From 8919225ef90758ab7507506b89aef5b1dc77607f Mon Sep 17 00:00:00 2001 From: Sophie Wigmore Date: Mon, 12 Dec 2022 18:09:12 -0500 Subject: [PATCH 1/4] Install packages into working directory - Test against framework apps - Update vendored packages on rebuild --- build.go | 90 +- build_test.go | 148 +- determine_composer_install_options.go | 5 +- determine_composer_install_options_test.go | 4 - go.mod | 9 +- go.sum | 8 - integration/custom_vendor_dir_test.go | 2 +- integration/default_app_test.go | 2 +- integration/framework_app_test.go | 122 + integration/init_test.go | 3 +- integration/outside_autoloading_test.go | 3 +- integration/reuse_layer_rebuild_test.go | 50 + integration/stack_upgrade_test.go | 2 +- .../testdata/laravel_app/.editorconfig | 18 + integration/testdata/laravel_app/.env.example | 58 + .../testdata/laravel_app/.gitattributes | 11 + integration/testdata/laravel_app/.gitignore | 18 + .../laravel_app/.php.ini.d/custom.ini | 3 + integration/testdata/laravel_app/README.md | 73 + .../laravel_app/app/Console/Kernel.php | 32 + .../laravel_app/app/Exceptions/Handler.php | 50 + .../app/Http/Controllers/Controller.php | 13 + .../testdata/laravel_app/app/Http/Kernel.php | 67 + .../app/Http/Middleware/Authenticate.php | 21 + .../app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + .../app/Http/Middleware/TrimStrings.php | 19 + .../app/Http/Middleware/TrustHosts.php | 20 + .../app/Http/Middleware/TrustProxies.php | 28 + .../app/Http/Middleware/ValidateSignature.php | 22 + .../app/Http/Middleware/VerifyCsrfToken.php | 17 + .../testdata/laravel_app/app/Models/User.php | 44 + .../app/Providers/AppServiceProvider.php | 28 + .../app/Providers/AuthServiceProvider.php | 30 + .../Providers/BroadcastServiceProvider.php | 21 + .../app/Providers/EventServiceProvider.php | 42 + .../app/Providers/RouteServiceProvider.php | 52 + integration/testdata/laravel_app/artisan | 53 + .../testdata/laravel_app/bootstrap/app.php | 55 + .../laravel_app/bootstrap/cache/.gitignore | 2 + .../testdata/laravel_app/composer.json | 66 + .../testdata/laravel_app/composer.lock | 7839 +++++++++++++++ .../testdata/laravel_app/config/app.php | 215 + .../testdata/laravel_app/config/auth.php | 111 + .../laravel_app/config/broadcasting.php | 70 + .../testdata/laravel_app/config/cache.php | 110 + .../testdata/laravel_app/config/cors.php | 34 + .../testdata/laravel_app/config/database.php | 151 + .../laravel_app/config/filesystems.php | 76 + .../testdata/laravel_app/config/hashing.php | 52 + .../testdata/laravel_app/config/logging.php | 122 + .../testdata/laravel_app/config/mail.php | 118 + .../testdata/laravel_app/config/queue.php | 93 + .../testdata/laravel_app/config/sanctum.php | 67 + .../testdata/laravel_app/config/services.php | 34 + .../testdata/laravel_app/config/session.php | 201 + .../testdata/laravel_app/config/view.php | 36 + .../testdata/laravel_app/database/.gitignore | 1 + .../database/factories/UserFactory.php | 40 + .../2014_10_12_000000_create_users_table.php | 36 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 37 + .../database/seeders/DatabaseSeeder.php | 24 + .../testdata/laravel_app/lang/en/auth.php | 20 + .../laravel_app/lang/en/pagination.php | 19 + .../laravel_app/lang/en/passwords.php | 22 + .../laravel_app/lang/en/validation.php | 176 + integration/testdata/laravel_app/package.json | 14 + integration/testdata/laravel_app/phpunit.xml | 31 + .../testdata/laravel_app/public/.htaccess | 21 + .../testdata/laravel_app/public/favicon.ico | 0 .../testdata/laravel_app/public/index.php | 55 + .../testdata/laravel_app/public/robots.txt | 2 + .../laravel_app/resources/css/app.css | 0 .../testdata/laravel_app/resources/js/app.js | 1 + .../laravel_app/resources/js/bootstrap.js | 34 + .../resources/views/welcome.blade.php | 132 + .../testdata/laravel_app/routes/api.php | 19 + .../testdata/laravel_app/routes/channels.php | 18 + .../testdata/laravel_app/routes/console.php | 19 + .../testdata/laravel_app/routes/web.php | 18 + .../laravel_app/storage/app/.gitignore | 3 + .../laravel_app/storage/app/public/.gitignore | 2 + .../laravel_app/storage/framework/.gitignore | 9 + .../storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + .../storage/framework/sessions/.gitignore | 2 + .../storage/framework/testing/.gitignore | 2 + .../storage/framework/views/.gitignore | 2 + .../laravel_app/storage/logs/.gitignore | 2 + .../laravel_app/tests/CreatesApplication.php | 22 + .../laravel_app/tests/Feature/ExampleTest.php | 21 + .../testdata/laravel_app/tests/TestCase.php | 10 + .../laravel_app/tests/Unit/ExampleTest.php | 18 + .../testdata/laravel_app/vite.config.js | 11 + .../.devcontainer/devcontainer.json | 20 + .../testdata/symfony_app/.editorconfig | 10 + integration/testdata/symfony_app/.env | 35 + integration/testdata/symfony_app/.env.test | 7 + .../symfony_app/.github/workflows/lint.yaml | 95 + .../symfony_app/.github/workflows/tests.yaml | 74 + integration/testdata/symfony_app/.gitignore | 24 + .../.nginx.conf.d/custom-server.conf | 4 + .../symfony_app/.php-cs-fixer.dist.php | 43 + .../symfony_app/.php.ini.d/custom.ini | 2 + .../testdata/symfony_app/CONTRIBUTING.md | 7 + integration/testdata/symfony_app/README.md | 75 + .../testdata/symfony_app/assets/admin.js | 64 + .../testdata/symfony_app/assets/app.js | 18 + .../testdata/symfony_app/assets/bootstrap.js | 11 + .../symfony_app/assets/controllers.json | 4 + .../symfony_app/assets/controllers/.gitignore | 0 .../symfony_app/assets/js/doclinks.js | 63 + .../symfony_app/assets/js/highlight.js | 8 + .../assets/js/jquery.instantSearch.js | 106 + .../testdata/symfony_app/assets/login.js | 11 + .../testdata/symfony_app/assets/search.js | 9 + .../symfony_app/assets/styles/admin.scss | 26 + .../symfony_app/assets/styles/app.scss | 368 + .../assets/styles/bootstrap-tagsinput.scss | 194 + integration/testdata/symfony_app/bin/console | 17 + integration/testdata/symfony_app/bin/phpunit | 19 + .../testdata/symfony_app/composer.json | 101 + .../testdata/symfony_app/composer.lock | 8608 +++++++++++++++++ .../testdata/symfony_app/config/bundles.php | 17 + .../symfony_app/config/packages/cache.yaml | 19 + .../packages/dama_doctrine_test_bundle.yaml | 5 + .../symfony_app/config/packages/debug.yaml | 5 + .../config/packages/deprecations.yaml | 9 + .../symfony_app/config/packages/doctrine.yaml | 43 + .../config/packages/doctrine_migrations.yaml | 6 + .../config/packages/framework.yaml | 35 + .../config/packages/html_sanitizer.yaml | 5 + .../symfony_app/config/packages/mailer.yaml | 15 + .../symfony_app/config/packages/monolog.yaml | 61 + .../symfony_app/config/packages/routing.yaml | 12 + .../symfony_app/config/packages/security.yaml | 94 + .../config/packages/translation.yaml | 9 + .../symfony_app/config/packages/twig.yaml | 9 + .../config/packages/validator.yaml | 14 + .../config/packages/web_profiler.yaml | 17 + .../config/packages/webpack_encore.yaml | 45 + .../testdata/symfony_app/config/preload.php | 5 + .../testdata/symfony_app/config/routes.yaml | 23 + .../symfony_app/config/routes/framework.yaml | 4 + .../config/routes/web_profiler.yaml | 8 + .../testdata/symfony_app/config/services.yaml | 40 + .../testdata/symfony_app/data/database.sqlite | Bin 0 -> 274432 bytes .../symfony_app/data/database_test.sqlite | Bin 0 -> 241664 bytes .../symfony_app/migrations/.gitignore | 0 integration/testdata/symfony_app/package.json | 31 + .../symfony_app/phpstan-baseline.neon | 0 .../testdata/symfony_app/phpstan.neon.dist | 7 + .../testdata/symfony_app/phpunit.xml.dist | 44 + .../testdata/symfony_app/public/.htaccess | 66 + .../symfony_app/public/apple-touch-icon.png | Bin 0 -> 10784 bytes .../testdata/symfony_app/public/favicon.ico | Bin 0 -> 1150 bytes .../testdata/symfony_app/public/index.php | 9 + .../testdata/symfony_app/public/robots.txt | 4 + .../src/Command/AddUserCommand.php | 263 + .../src/Command/DeleteUserCommand.php | 140 + .../src/Command/ListUsersCommand.php | 150 + .../src/Controller/Admin/BlogController.php | 183 + .../src/Controller/BlogController.php | 191 + .../src/Controller/SecurityController.php | 74 + .../src/Controller/UserController.php | 84 + .../src/DataFixtures/AppFixtures.php | 262 + .../symfony_app/src/Entity/Comment.php | 111 + .../testdata/symfony_app/src/Entity/Post.php | 198 + .../testdata/symfony_app/src/Entity/Tag.php | 67 + .../testdata/symfony_app/src/Entity/User.php | 177 + .../src/Event/CommentCreatedEvent.php | 28 + .../CheckRequirementsSubscriber.php | 100 + .../CommentNotificationSubscriber.php | 82 + .../EventSubscriber/ControllerSubscriber.php | 49 + .../RedirectToPreferredLocaleSubscriber.php | 89 + .../symfony_app/src/Form/CommentType.php | 59 + .../TagArrayToStringTransformer.php | 99 + .../symfony_app/src/Form/PostType.php | 98 + .../src/Form/Type/ChangePasswordType.php | 62 + .../src/Form/Type/DateTimePickerType.php | 69 + .../src/Form/Type/TagsInputType.php | 68 + .../symfony_app/src/Form/UserType.php | 65 + .../testdata/symfony_app/src/Kernel.php | 20 + .../symfony_app/src/Pagination/Paginator.php | 128 + .../src/Repository/PostRepository.php | 107 + .../src/Repository/TagRepository.php | 35 + .../src/Repository/UserRepository.php | 39 + .../symfony_app/src/Security/PostVoter.php | 65 + .../symfony_app/src/Twig/AppExtension.php | 73 + .../src/Twig/SourceCodeExtension.php | 164 + .../src/Utils/MomentFormatConverter.php | 46 + .../symfony_app/src/Utils/Validator.php | 73 + integration/testdata/symfony_app/symfony.lock | 531 + .../admin/blog/_delete_form.html.twig | 8 + .../templates/admin/blog/_form.html.twig | 26 + .../templates/admin/blog/edit.html.twig | 29 + .../templates/admin/blog/index.html.twig | 55 + .../templates/admin/blog/new.html.twig | 29 + .../templates/admin/blog/show.html.twig | 36 + .../templates/admin/layout.html.twig | 31 + .../symfony_app/templates/base.html.twig | 166 + .../templates/blog/_comment_form.html.twig | 40 + .../blog/_delete_post_confirmation.html.twig | 19 + .../templates/blog/_post_tags.html.twig | 12 + .../symfony_app/templates/blog/_rss.html.twig | 5 + .../templates/blog/about.html.twig | 15 + .../blog/comment_form_error.html.twig | 11 + .../templates/blog/index.html.twig | 59 + .../symfony_app/templates/blog/index.xml.twig | 25 + .../templates/blog/post_show.html.twig | 77 + .../templates/blog/search.html.twig | 29 + .../TwigBundle/Exception/error.html.twig | 30 + .../TwigBundle/Exception/error403.html.twig | 30 + .../TwigBundle/Exception/error404.html.twig | 30 + .../TwigBundle/Exception/error500.html.twig | 35 + .../templates/debug/source_code.html.twig | 35 + .../default/_flash_messages.html.twig | 32 + .../templates/default/homepage.html.twig | 44 + .../templates/form/fields.html.twig | 26 + .../templates/form/layout.html.twig | 16 + .../templates/security/login.html.twig | 100 + .../templates/user/change_password.html.twig | 29 + .../symfony_app/templates/user/edit.html.twig | 27 + .../tests/Command/AbstractCommandTest.php | 46 + .../tests/Command/AddUserCommandTest.php | 111 + .../tests/Command/ListUsersCommandTest.php | 57 + .../Controller/Admin/BlogControllerTest.php | 204 + .../tests/Controller/BlogControllerTest.php | 101 + .../Controller/DefaultControllerTest.php | 101 + .../tests/Controller/UserControllerTest.php | 102 + .../TagArrayToStringTransformerTest.php | 117 + .../symfony_app/tests/Utils/ValidatorTest.php | 102 + .../testdata/symfony_app/tests/bootstrap.php | 20 + .../translations/messages+intl-icu.ar.xlf | 447 + .../translations/messages+intl-icu.bg.xlf | 368 + .../translations/messages+intl-icu.bs.xlf | 446 + .../translations/messages+intl-icu.ca.xlf | 265 + .../translations/messages+intl-icu.cs.xlf | 262 + .../translations/messages+intl-icu.de.xlf | 447 + .../translations/messages+intl-icu.en.xlf | 447 + .../translations/messages+intl-icu.es.xlf | 375 + .../translations/messages+intl-icu.fr.xlf | 443 + .../translations/messages+intl-icu.hr.xlf | 348 + .../translations/messages+intl-icu.id.xlf | 254 + .../translations/messages+intl-icu.it.xlf | 377 + .../translations/messages+intl-icu.ja.xlf | 295 + .../translations/messages+intl-icu.lt.xlf | 443 + .../translations/messages+intl-icu.nl.xlf | 377 + .../translations/messages+intl-icu.pl.xlf | 293 + .../translations/messages+intl-icu.pt_BR.xlf | 448 + .../translations/messages+intl-icu.ro.xlf | 290 + .../translations/messages+intl-icu.ru.xlf | 447 + .../translations/messages+intl-icu.sk.xlf | 443 + .../translations/messages+intl-icu.sl.xlf | 368 + .../messages+intl-icu.sr_Cyrl.xlf | 446 + .../messages+intl-icu.sr_Latn.xlf | 446 + .../translations/messages+intl-icu.tr.xlf | 368 + .../translations/messages+intl-icu.uk.xlf | 447 + .../translations/messages+intl-icu.zh_CN.xlf | 443 + .../translations/validators+intl-icu.ar.xlf | 43 + .../translations/validators+intl-icu.bg.xlf | 39 + .../translations/validators+intl-icu.ca.xlf | 35 + .../translations/validators+intl-icu.cs.xlf | 31 + .../translations/validators+intl-icu.de.xlf | 39 + .../translations/validators+intl-icu.en.xlf | 43 + .../translations/validators+intl-icu.es.xlf | 43 + .../translations/validators+intl-icu.fr.xlf | 35 + .../translations/validators+intl-icu.hr.xlf | 39 + .../translations/validators+intl-icu.id.xlf | 35 + .../translations/validators+intl-icu.it.xlf | 35 + .../translations/validators+intl-icu.ja.xlf | 35 + .../translations/validators+intl-icu.lt.xlf | 39 + .../translations/validators+intl-icu.nl.xlf | 35 + .../translations/validators+intl-icu.pl.xlf | 35 + .../validators+intl-icu.pt_BR.xlf | 39 + .../translations/validators+intl-icu.ro.xlf | 35 + .../translations/validators+intl-icu.ru.xlf | 43 + .../translations/validators+intl-icu.sl.xlf | 39 + .../translations/validators+intl-icu.tr.xlf | 39 + .../translations/validators+intl-icu.uk.xlf | 43 + .../validators+intl-icu.zh_CN.xlf | 39 + .../cache/dev/App_KernelDevDebugContainer.php | 21 + .../dev/App_KernelDevDebugContainer.php.lock | 0 .../dev/App_KernelDevDebugContainer.php.meta | Bin 0 -> 30494 bytes .../App_KernelDevDebugContainer.preload.php | 714 ++ .../cache/dev/App_KernelDevDebugContainer.xml | 8125 ++++++++++++++++ .../dev/App_KernelDevDebugContainer.xml.meta | Bin 0 -> 30494 bytes .../App_KernelDevDebugContainerCompiler.log | 846 ++ ...pp_KernelDevDebugContainerDeprecations.log | 1 + .../Config/Framework/AnnotationsConfig.php | 121 + .../Config/Framework/Assets/PackageConfig.php | 190 + .../Symfony/Config/Framework/AssetsConfig.php | 237 + .../Config/Framework/Cache/PoolConfig.php | 194 + .../Symfony/Config/Framework/CacheConfig.php | 277 + .../Config/Framework/CsrfProtectionConfig.php | 52 + .../Symfony/Config/Framework/EsiConfig.php | 52 + .../Config/Framework/ExceptionsConfig.php | 77 + .../Framework/Form/CsrfProtectionConfig.php | 75 + .../Symfony/Config/Framework/FormConfig.php | 103 + .../Config/Framework/FragmentsConfig.php | 98 + .../HtmlSanitizer/SanitizerConfig.php | 445 + .../Config/Framework/HtmlSanitizerConfig.php | 76 + .../Config/Framework/HttpCacheConfig.php | 282 + .../DefaultOptions/PeerFingerprintConfig.php | 101 + .../RetryFailed/HttpCodeConfig.php | 75 + .../DefaultOptions/RetryFailedConfig.php | 233 + .../HttpClient/DefaultOptionsConfig.php | 495 + .../HttpClient/ScopedClientConfig.php | 636 ++ .../PeerFingerprintConfig.php | 101 + .../RetryFailed/HttpCodeConfig.php | 75 + .../ScopedClientConfig/RetryFailedConfig.php | 233 + .../Config/Framework/HttpClientConfig.php | 160 + .../Symfony/Config/Framework/LockConfig.php | 73 + .../Framework/Mailer/EnvelopeConfig.php | 75 + .../Config/Framework/Mailer/HeaderConfig.php | 53 + .../Symfony/Config/Framework/MailerConfig.php | 183 + .../Config/Framework/Messenger/BusConfig.php | 95 + .../Messenger/BusConfig/MiddlewareConfig.php | 75 + .../Framework/Messenger/RoutingConfig.php | 52 + .../Serializer/SymfonySerializerConfig.php | 74 + .../Framework/Messenger/SerializerConfig.php | 80 + .../Framework/Messenger/TransportConfig.php | 185 + .../TransportConfig/RetryStrategyConfig.php | 148 + .../Config/Framework/MessengerConfig.php | 249 + .../Notifier/AdminRecipientConfig.php | 74 + .../Config/Framework/NotifierConfig.php | 157 + .../Config/Framework/PhpErrorsConfig.php | 79 + .../Config/Framework/ProfilerConfig.php | 192 + .../Config/Framework/PropertyAccessConfig.php | 167 + .../Config/Framework/PropertyInfoConfig.php | 52 + .../Framework/RateLimiter/LimiterConfig.php | 200 + .../RateLimiter/LimiterConfig/RateConfig.php | 77 + .../Config/Framework/RateLimiterConfig.php | 76 + .../Config/Framework/RequestConfig.php | 73 + .../Symfony/Config/Framework/RouterConfig.php | 241 + .../Config/Framework/SecretsConfig.php | 121 + .../Config/Framework/SemaphoreConfig.php | 73 + .../Framework/Serializer/MappingConfig.php | 52 + .../Config/Framework/SerializerConfig.php | 192 + .../Config/Framework/SessionConfig.php | 444 + .../Symfony/Config/Framework/SsiConfig.php | 52 + .../Framework/Translator/ProviderConfig.php | 98 + .../Translator/PseudoLocalizationConfig.php | 167 + .../Config/Framework/TranslatorConfig.php | 255 + .../Symfony/Config/Framework/UidConfig.php | 167 + .../Validation/AutoMappingConfig.php | 52 + .../Framework/Validation/MappingConfig.php | 52 + .../NotCompromisedPasswordConfig.php | 77 + .../Config/Framework/ValidationConfig.php | 259 + .../Config/Framework/WebLinkConfig.php | 52 + .../Framework/Workflows/WorkflowsConfig.php | 290 + .../WorkflowsConfig/AuditTrailConfig.php | 52 + .../WorkflowsConfig/MarkingStoreConfig.php | 98 + .../Workflows/WorkflowsConfig/PlaceConfig.php | 75 + .../WorkflowsConfig/TransitionConfig.php | 146 + .../Config/Framework/WorkflowsConfig.php | 89 + .../dev/Symfony/Config/FrameworkConfig.php | 1448 +++ .../symfony_app/var/cache/dev/annotations.map | 3 + .../var/cache/dev/url_generating_routes.php | 36 + .../cache/dev/url_generating_routes.php.meta | Bin 0 -> 3464 bytes .../var/cache/dev/url_matching_routes.php | 87 + .../cache/dev/url_matching_routes.php.meta | Bin 0 -> 3464 bytes .../testdata/symfony_app/webpack.config.js | 83 + integration/testdata/symfony_app/yarn.lock | 4767 +++++++++ integration/with_vendored_packages_test.go | 2 - run/main.go | 2 - 369 files changed, 65228 insertions(+), 181 deletions(-) create mode 100644 integration/framework_app_test.go create mode 100644 integration/testdata/laravel_app/.editorconfig create mode 100644 integration/testdata/laravel_app/.env.example create mode 100644 integration/testdata/laravel_app/.gitattributes create mode 100644 integration/testdata/laravel_app/.gitignore create mode 100644 integration/testdata/laravel_app/.php.ini.d/custom.ini create mode 100644 integration/testdata/laravel_app/README.md create mode 100644 integration/testdata/laravel_app/app/Console/Kernel.php create mode 100644 integration/testdata/laravel_app/app/Exceptions/Handler.php create mode 100644 integration/testdata/laravel_app/app/Http/Controllers/Controller.php create mode 100644 integration/testdata/laravel_app/app/Http/Kernel.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/Authenticate.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/EncryptCookies.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/TrimStrings.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/TrustHosts.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/TrustProxies.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/ValidateSignature.php create mode 100644 integration/testdata/laravel_app/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 integration/testdata/laravel_app/app/Models/User.php create mode 100644 integration/testdata/laravel_app/app/Providers/AppServiceProvider.php create mode 100644 integration/testdata/laravel_app/app/Providers/AuthServiceProvider.php create mode 100644 integration/testdata/laravel_app/app/Providers/BroadcastServiceProvider.php create mode 100644 integration/testdata/laravel_app/app/Providers/EventServiceProvider.php create mode 100644 integration/testdata/laravel_app/app/Providers/RouteServiceProvider.php create mode 100755 integration/testdata/laravel_app/artisan create mode 100644 integration/testdata/laravel_app/bootstrap/app.php create mode 100644 integration/testdata/laravel_app/bootstrap/cache/.gitignore create mode 100644 integration/testdata/laravel_app/composer.json create mode 100644 integration/testdata/laravel_app/composer.lock create mode 100644 integration/testdata/laravel_app/config/app.php create mode 100644 integration/testdata/laravel_app/config/auth.php create mode 100644 integration/testdata/laravel_app/config/broadcasting.php create mode 100644 integration/testdata/laravel_app/config/cache.php create mode 100644 integration/testdata/laravel_app/config/cors.php create mode 100644 integration/testdata/laravel_app/config/database.php create mode 100644 integration/testdata/laravel_app/config/filesystems.php create mode 100644 integration/testdata/laravel_app/config/hashing.php create mode 100644 integration/testdata/laravel_app/config/logging.php create mode 100644 integration/testdata/laravel_app/config/mail.php create mode 100644 integration/testdata/laravel_app/config/queue.php create mode 100644 integration/testdata/laravel_app/config/sanctum.php create mode 100644 integration/testdata/laravel_app/config/services.php create mode 100644 integration/testdata/laravel_app/config/session.php create mode 100644 integration/testdata/laravel_app/config/view.php create mode 100644 integration/testdata/laravel_app/database/.gitignore create mode 100644 integration/testdata/laravel_app/database/factories/UserFactory.php create mode 100644 integration/testdata/laravel_app/database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 integration/testdata/laravel_app/database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 integration/testdata/laravel_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 integration/testdata/laravel_app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 integration/testdata/laravel_app/database/seeders/DatabaseSeeder.php create mode 100644 integration/testdata/laravel_app/lang/en/auth.php create mode 100644 integration/testdata/laravel_app/lang/en/pagination.php create mode 100644 integration/testdata/laravel_app/lang/en/passwords.php create mode 100644 integration/testdata/laravel_app/lang/en/validation.php create mode 100644 integration/testdata/laravel_app/package.json create mode 100644 integration/testdata/laravel_app/phpunit.xml create mode 100644 integration/testdata/laravel_app/public/.htaccess create mode 100644 integration/testdata/laravel_app/public/favicon.ico create mode 100644 integration/testdata/laravel_app/public/index.php create mode 100644 integration/testdata/laravel_app/public/robots.txt create mode 100644 integration/testdata/laravel_app/resources/css/app.css create mode 100644 integration/testdata/laravel_app/resources/js/app.js create mode 100644 integration/testdata/laravel_app/resources/js/bootstrap.js create mode 100644 integration/testdata/laravel_app/resources/views/welcome.blade.php create mode 100644 integration/testdata/laravel_app/routes/api.php create mode 100644 integration/testdata/laravel_app/routes/channels.php create mode 100644 integration/testdata/laravel_app/routes/console.php create mode 100644 integration/testdata/laravel_app/routes/web.php create mode 100644 integration/testdata/laravel_app/storage/app/.gitignore create mode 100644 integration/testdata/laravel_app/storage/app/public/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/cache/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/cache/data/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/sessions/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/testing/.gitignore create mode 100644 integration/testdata/laravel_app/storage/framework/views/.gitignore create mode 100644 integration/testdata/laravel_app/storage/logs/.gitignore create mode 100644 integration/testdata/laravel_app/tests/CreatesApplication.php create mode 100644 integration/testdata/laravel_app/tests/Feature/ExampleTest.php create mode 100644 integration/testdata/laravel_app/tests/TestCase.php create mode 100644 integration/testdata/laravel_app/tests/Unit/ExampleTest.php create mode 100644 integration/testdata/laravel_app/vite.config.js create mode 100644 integration/testdata/symfony_app/.devcontainer/devcontainer.json create mode 100644 integration/testdata/symfony_app/.editorconfig create mode 100644 integration/testdata/symfony_app/.env create mode 100644 integration/testdata/symfony_app/.env.test create mode 100644 integration/testdata/symfony_app/.github/workflows/lint.yaml create mode 100644 integration/testdata/symfony_app/.github/workflows/tests.yaml create mode 100644 integration/testdata/symfony_app/.gitignore create mode 100644 integration/testdata/symfony_app/.nginx.conf.d/custom-server.conf create mode 100644 integration/testdata/symfony_app/.php-cs-fixer.dist.php create mode 100644 integration/testdata/symfony_app/.php.ini.d/custom.ini create mode 100644 integration/testdata/symfony_app/CONTRIBUTING.md create mode 100644 integration/testdata/symfony_app/README.md create mode 100644 integration/testdata/symfony_app/assets/admin.js create mode 100644 integration/testdata/symfony_app/assets/app.js create mode 100644 integration/testdata/symfony_app/assets/bootstrap.js create mode 100644 integration/testdata/symfony_app/assets/controllers.json create mode 100644 integration/testdata/symfony_app/assets/controllers/.gitignore create mode 100644 integration/testdata/symfony_app/assets/js/doclinks.js create mode 100644 integration/testdata/symfony_app/assets/js/highlight.js create mode 100644 integration/testdata/symfony_app/assets/js/jquery.instantSearch.js create mode 100644 integration/testdata/symfony_app/assets/login.js create mode 100644 integration/testdata/symfony_app/assets/search.js create mode 100644 integration/testdata/symfony_app/assets/styles/admin.scss create mode 100644 integration/testdata/symfony_app/assets/styles/app.scss create mode 100644 integration/testdata/symfony_app/assets/styles/bootstrap-tagsinput.scss create mode 100755 integration/testdata/symfony_app/bin/console create mode 100755 integration/testdata/symfony_app/bin/phpunit create mode 100644 integration/testdata/symfony_app/composer.json create mode 100644 integration/testdata/symfony_app/composer.lock create mode 100644 integration/testdata/symfony_app/config/bundles.php create mode 100644 integration/testdata/symfony_app/config/packages/cache.yaml create mode 100644 integration/testdata/symfony_app/config/packages/dama_doctrine_test_bundle.yaml create mode 100644 integration/testdata/symfony_app/config/packages/debug.yaml create mode 100644 integration/testdata/symfony_app/config/packages/deprecations.yaml create mode 100644 integration/testdata/symfony_app/config/packages/doctrine.yaml create mode 100644 integration/testdata/symfony_app/config/packages/doctrine_migrations.yaml create mode 100644 integration/testdata/symfony_app/config/packages/framework.yaml create mode 100644 integration/testdata/symfony_app/config/packages/html_sanitizer.yaml create mode 100644 integration/testdata/symfony_app/config/packages/mailer.yaml create mode 100644 integration/testdata/symfony_app/config/packages/monolog.yaml create mode 100644 integration/testdata/symfony_app/config/packages/routing.yaml create mode 100644 integration/testdata/symfony_app/config/packages/security.yaml create mode 100644 integration/testdata/symfony_app/config/packages/translation.yaml create mode 100644 integration/testdata/symfony_app/config/packages/twig.yaml create mode 100644 integration/testdata/symfony_app/config/packages/validator.yaml create mode 100644 integration/testdata/symfony_app/config/packages/web_profiler.yaml create mode 100644 integration/testdata/symfony_app/config/packages/webpack_encore.yaml create mode 100644 integration/testdata/symfony_app/config/preload.php create mode 100644 integration/testdata/symfony_app/config/routes.yaml create mode 100644 integration/testdata/symfony_app/config/routes/framework.yaml create mode 100644 integration/testdata/symfony_app/config/routes/web_profiler.yaml create mode 100644 integration/testdata/symfony_app/config/services.yaml create mode 100644 integration/testdata/symfony_app/data/database.sqlite create mode 100644 integration/testdata/symfony_app/data/database_test.sqlite create mode 100644 integration/testdata/symfony_app/migrations/.gitignore create mode 100644 integration/testdata/symfony_app/package.json create mode 100644 integration/testdata/symfony_app/phpstan-baseline.neon create mode 100644 integration/testdata/symfony_app/phpstan.neon.dist create mode 100644 integration/testdata/symfony_app/phpunit.xml.dist create mode 100644 integration/testdata/symfony_app/public/.htaccess create mode 100644 integration/testdata/symfony_app/public/apple-touch-icon.png create mode 100644 integration/testdata/symfony_app/public/favicon.ico create mode 100644 integration/testdata/symfony_app/public/index.php create mode 100644 integration/testdata/symfony_app/public/robots.txt create mode 100644 integration/testdata/symfony_app/src/Command/AddUserCommand.php create mode 100644 integration/testdata/symfony_app/src/Command/DeleteUserCommand.php create mode 100644 integration/testdata/symfony_app/src/Command/ListUsersCommand.php create mode 100644 integration/testdata/symfony_app/src/Controller/Admin/BlogController.php create mode 100644 integration/testdata/symfony_app/src/Controller/BlogController.php create mode 100644 integration/testdata/symfony_app/src/Controller/SecurityController.php create mode 100644 integration/testdata/symfony_app/src/Controller/UserController.php create mode 100644 integration/testdata/symfony_app/src/DataFixtures/AppFixtures.php create mode 100644 integration/testdata/symfony_app/src/Entity/Comment.php create mode 100644 integration/testdata/symfony_app/src/Entity/Post.php create mode 100644 integration/testdata/symfony_app/src/Entity/Tag.php create mode 100644 integration/testdata/symfony_app/src/Entity/User.php create mode 100644 integration/testdata/symfony_app/src/Event/CommentCreatedEvent.php create mode 100644 integration/testdata/symfony_app/src/EventSubscriber/CheckRequirementsSubscriber.php create mode 100644 integration/testdata/symfony_app/src/EventSubscriber/CommentNotificationSubscriber.php create mode 100644 integration/testdata/symfony_app/src/EventSubscriber/ControllerSubscriber.php create mode 100644 integration/testdata/symfony_app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php create mode 100644 integration/testdata/symfony_app/src/Form/CommentType.php create mode 100644 integration/testdata/symfony_app/src/Form/DataTransformer/TagArrayToStringTransformer.php create mode 100644 integration/testdata/symfony_app/src/Form/PostType.php create mode 100644 integration/testdata/symfony_app/src/Form/Type/ChangePasswordType.php create mode 100644 integration/testdata/symfony_app/src/Form/Type/DateTimePickerType.php create mode 100644 integration/testdata/symfony_app/src/Form/Type/TagsInputType.php create mode 100644 integration/testdata/symfony_app/src/Form/UserType.php create mode 100644 integration/testdata/symfony_app/src/Kernel.php create mode 100644 integration/testdata/symfony_app/src/Pagination/Paginator.php create mode 100644 integration/testdata/symfony_app/src/Repository/PostRepository.php create mode 100644 integration/testdata/symfony_app/src/Repository/TagRepository.php create mode 100644 integration/testdata/symfony_app/src/Repository/UserRepository.php create mode 100644 integration/testdata/symfony_app/src/Security/PostVoter.php create mode 100644 integration/testdata/symfony_app/src/Twig/AppExtension.php create mode 100644 integration/testdata/symfony_app/src/Twig/SourceCodeExtension.php create mode 100644 integration/testdata/symfony_app/src/Utils/MomentFormatConverter.php create mode 100644 integration/testdata/symfony_app/src/Utils/Validator.php create mode 100644 integration/testdata/symfony_app/symfony.lock create mode 100644 integration/testdata/symfony_app/templates/admin/blog/_delete_form.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/blog/_form.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/blog/edit.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/blog/index.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/blog/new.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/blog/show.html.twig create mode 100644 integration/testdata/symfony_app/templates/admin/layout.html.twig create mode 100644 integration/testdata/symfony_app/templates/base.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/_comment_form.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/_delete_post_confirmation.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/_post_tags.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/_rss.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/about.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/comment_form_error.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/index.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/index.xml.twig create mode 100644 integration/testdata/symfony_app/templates/blog/post_show.html.twig create mode 100644 integration/testdata/symfony_app/templates/blog/search.html.twig create mode 100644 integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error.html.twig create mode 100644 integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error403.html.twig create mode 100644 integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error404.html.twig create mode 100644 integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error500.html.twig create mode 100644 integration/testdata/symfony_app/templates/debug/source_code.html.twig create mode 100644 integration/testdata/symfony_app/templates/default/_flash_messages.html.twig create mode 100644 integration/testdata/symfony_app/templates/default/homepage.html.twig create mode 100644 integration/testdata/symfony_app/templates/form/fields.html.twig create mode 100644 integration/testdata/symfony_app/templates/form/layout.html.twig create mode 100644 integration/testdata/symfony_app/templates/security/login.html.twig create mode 100644 integration/testdata/symfony_app/templates/user/change_password.html.twig create mode 100644 integration/testdata/symfony_app/templates/user/edit.html.twig create mode 100644 integration/testdata/symfony_app/tests/Command/AbstractCommandTest.php create mode 100644 integration/testdata/symfony_app/tests/Command/AddUserCommandTest.php create mode 100644 integration/testdata/symfony_app/tests/Command/ListUsersCommandTest.php create mode 100644 integration/testdata/symfony_app/tests/Controller/Admin/BlogControllerTest.php create mode 100644 integration/testdata/symfony_app/tests/Controller/BlogControllerTest.php create mode 100644 integration/testdata/symfony_app/tests/Controller/DefaultControllerTest.php create mode 100644 integration/testdata/symfony_app/tests/Controller/UserControllerTest.php create mode 100644 integration/testdata/symfony_app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php create mode 100644 integration/testdata/symfony_app/tests/Utils/ValidatorTest.php create mode 100644 integration/testdata/symfony_app/tests/bootstrap.php create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.ar.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.bg.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.bs.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.ca.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.cs.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.de.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.en.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.es.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.fr.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.hr.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.id.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.it.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.ja.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.lt.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.nl.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.pl.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.pt_BR.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.ro.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.ru.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.sk.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.sl.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.sr_Cyrl.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.sr_Latn.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.tr.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.uk.xlf create mode 100644 integration/testdata/symfony_app/translations/messages+intl-icu.zh_CN.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.ar.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.bg.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.ca.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.cs.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.de.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.en.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.es.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.fr.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.hr.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.id.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.it.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.ja.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.lt.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.nl.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.pl.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.pt_BR.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.ro.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.ru.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.sl.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.tr.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.uk.xlf create mode 100644 integration/testdata/symfony_app/translations/validators+intl-icu.zh_CN.xlf create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.lock create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.meta create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.preload.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml.meta create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainerCompiler.log create mode 100644 integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainerDeprecations.log create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AnnotationsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Assets/PackageConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AssetsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Cache/PoolConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CacheConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CsrfProtectionConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/EsiConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ExceptionsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Form/CsrfProtectionConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FormConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FragmentsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizer/SanitizerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpCacheConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/PeerFingerprintConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailed/HttpCodeConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailedConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptionsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/PeerFingerprintConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailed/HttpCodeConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailedConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClientConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/LockConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/EnvelopeConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/HeaderConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MailerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig/MiddlewareConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/RoutingConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/Serializer/SymfonySerializerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/SerializerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig/RetryStrategyConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MessengerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Notifier/AdminRecipientConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/NotifierConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PhpErrorsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ProfilerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyAccessConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyInfoConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig/RateConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiterConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RequestConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RouterConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SecretsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SemaphoreConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Serializer/MappingConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SerializerConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SessionConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SsiConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/ProviderConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/PseudoLocalizationConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/TranslatorConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/UidConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/AutoMappingConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/MappingConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/NotCompromisedPasswordConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ValidationConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WebLinkConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/AuditTrailConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/MarkingStoreConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/PlaceConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/TransitionConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WorkflowsConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/Symfony/Config/FrameworkConfig.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/annotations.map create mode 100644 integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php.meta create mode 100644 integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php create mode 100644 integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php.meta create mode 100644 integration/testdata/symfony_app/webpack.config.js create mode 100644 integration/testdata/symfony_app/yarn.lock diff --git a/build.go b/build.go index d65d20a1..cf6d656b 100644 --- a/build.go +++ b/build.go @@ -46,7 +46,6 @@ func Build( logger scribe.Emitter, composerInstallOptions DetermineComposerInstallOptions, composerInstallExec Executable, - composerDumpAutoloadExec Executable, composerGlobalExec Executable, checkPlatformReqsExec Executable, sbomGenerator SBOMGenerator, @@ -89,7 +88,6 @@ func Build( composerPhpIniPath, path, composerInstallExec, - composerDumpAutoloadExec, workspaceVendorDir, calculator) return err @@ -209,14 +207,12 @@ func runComposerGlobalIfRequired( return } -// runComposerInstall will run `composer install` to download dependencies into a new layer +// runComposerInstall will run `composer install` to download dependencie into +// the app directory, and will be copied into a layer and cached for reuse. // // Returns: // - composerPackagesLayer: a new layer into which the dependencies will be installed -// - layerVendorDir: the absolute file path inside the layer where the dependencies are installed // - err: any error -// -// https://getcomposer.org/doc/03-cli.md#install-i func runComposerInstall( logger scribe.Emitter, context packit.BuildContext, @@ -224,7 +220,6 @@ func runComposerInstall( composerPhpIniPath string, path string, composerInstallExec Executable, - composerDumpAutoloadExec Executable, workspaceVendorDir string, calculator Calculator) (composerPackagesLayer packit.Layer, err error) { @@ -257,17 +252,16 @@ func runComposerInstall( logger.Process("Reusing cached layer %s", composerPackagesLayer.Path) logger.Break() - composerPackagesLayer.Launch, composerPackagesLayer.Build, composerPackagesLayer.Cache = launch, build, build + composerPackagesLayer.Launch, composerPackagesLayer.Build, composerPackagesLayer.Cache = launch, build, launch logger.Debug.Subprocess("Setting cached layer types: launch=[%t], build=[%t], cache=[%t]", composerPackagesLayer.Launch, composerPackagesLayer.Build, composerPackagesLayer.Cache) - logger.Process("Writing symlink %s => %s", workspaceVendorDir, layerVendorDir) if os.Getenv(BpLogLevel) == "DEBUG" { - logger.Debug.Subprocess("Listing files in %s:", layerVendorDir) - files, err := os.ReadDir(layerVendorDir) + logger.Debug.Subprocess("Listing files in %s:", composerPackagesLayer) + files, err := os.ReadDir(composerPackagesLayer.Path) if err != nil { // untested return packit.Layer{}, err } @@ -276,8 +270,16 @@ func runComposerInstall( } } - err = os.Symlink(layerVendorDir, workspaceVendorDir) - if err != nil { // untested + if exists, err := fs.Exists(workspaceVendorDir); err != nil { + return packit.Layer{}, err + } else if exists { + logger.Process("Detected existing vendored packages, replacing with cached vendored packages") + if err := os.RemoveAll(workspaceVendorDir); err != nil { // untested + return packit.Layer{}, err + } + } + + if err := fs.Copy(layerVendorDir, workspaceVendorDir); err != nil { // untested return packit.Layer{}, err } @@ -291,7 +293,7 @@ func runComposerInstall( return packit.Layer{}, err } - composerPackagesLayer.Launch, composerPackagesLayer.Build, composerPackagesLayer.Cache = launch, build, build + composerPackagesLayer.Launch, composerPackagesLayer.Build, composerPackagesLayer.Cache = launch, build, launch logger.Debug.Subprocess("Setting layer types: launch=[%t], build=[%t], cache=[%t]", composerPackagesLayer.Launch, @@ -303,36 +305,19 @@ func runComposerInstall( "composer-lock-sha": composerLockChecksum, } - if exists, err := fs.Exists(workspaceVendorDir); err != nil { - return packit.Layer{}, err - } else if exists { - logger.Process("Detected existing vendored packages, will run 'composer install' with those packages") - if err := fs.Copy(workspaceVendorDir, layerVendorDir); err != nil { // untested - return packit.Layer{}, err - } - if err := os.RemoveAll(workspaceVendorDir); err != nil { // untested - return packit.Layer{}, err - } - } - composerInstallBuffer := bytes.NewBuffer(nil) - // `composer install` will run with `--no-autoloader` to avoid errors from - // autoloading classes outside of the vendor directory - - // Once `composer install` has run, the symlink to the working directory is - // set up, and then `composer dump-autoload` on the vendor directory from - // the working directory. logger.Process("Running 'composer install'") + // install packages into /workspace/vendor because composer cannot handle symlinks easily execution := pexec.Execution{ Args: append([]string{"install"}, composerInstallOptions.Determine()...), - Dir: composerPackagesLayer.Path, + Dir: context.WorkingDir, Env: append(os.Environ(), "COMPOSER_NO_INTERACTION=1", // https://getcomposer.org/doc/03-cli.md#composer-no-interaction fmt.Sprintf("COMPOSER=%s", composerJsonPath), fmt.Sprintf("COMPOSER_HOME=%s", filepath.Join(composerPackagesLayer.Path, ".composer")), - "COMPOSER_VENDOR_DIR=vendor", // ensure default in the layer + fmt.Sprintf("COMPOSER_VENDOR_DIR=%s", workspaceVendorDir), fmt.Sprintf("PHPRC=%s", composerPhpIniPath), fmt.Sprintf("PATH=%s", path), ), @@ -348,8 +333,13 @@ func runComposerInstall( logger.Debug.Subprocess(composerInstallBuffer.String()) logger.Process("Ran 'composer %s'", strings.Join(execution.Args, " ")) + logger.Process("Copying from %s => to %s", workspaceVendorDir, layerVendorDir) + + err = fs.Copy(workspaceVendorDir, layerVendorDir) + if err != nil { + return packit.Layer{}, err + } - logger.Process("Writing symlink %s => %s", workspaceVendorDir, layerVendorDir) if os.Getenv(BpLogLevel) == "DEBUG" { logger.Debug.Subprocess("Listing files in %s:", layerVendorDir) files, err := os.ReadDir(layerVendorDir) @@ -361,36 +351,6 @@ func runComposerInstall( } } - err = os.Symlink(layerVendorDir, workspaceVendorDir) - if err != nil { // untested - return packit.Layer{}, err - } - - logger.Process("Running 'composer dump-autoload'") - - composerAutoloadBuffer := bytes.NewBuffer(nil) - execution = pexec.Execution{ - Args: append([]string{"dump-autoload", "--classmap-authoritative"}), - Dir: context.WorkingDir, - Env: append(os.Environ(), - "COMPOSER_NO_INTERACTION=1", // https://getcomposer.org/doc/03-cli.md#composer-no-interaction - fmt.Sprintf("COMPOSER_VENDOR_DIR=%s", workspaceVendorDir), - fmt.Sprintf("PHPRC=%s", composerPhpIniPath), - fmt.Sprintf("PATH=%s", path), - ), - Stdout: composerAutoloadBuffer, - Stderr: composerAutoloadBuffer, - } - - err = composerDumpAutoloadExec.Execute(execution) - if err != nil { - logger.Subprocess(composerAutoloadBuffer.String()) - return packit.Layer{}, err - } - - logger.Debug.Subprocess(composerAutoloadBuffer.String()) - logger.Process("Ran 'composer %s'", strings.Join(execution.Args, " ")) - return composerPackagesLayer, nil } diff --git a/build_test.go b/build_test.go index 6e66a0e4..2380b444 100644 --- a/build_test.go +++ b/build_test.go @@ -26,11 +26,9 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { buffer *bytes.Buffer installOptions *fakes.DetermineComposerInstallOptions composerInstallExecutable *fakes.Executable - composerDumpAutoloadExecutable *fakes.Executable composerGlobalExecutable *fakes.Executable composerCheckPlatformReqsExecExecutable *fakes.Executable composerInstallExecution pexec.Execution - composerDumpAutoloadExecution pexec.Execution composerGlobalExecution pexec.Execution composerCheckPlatformReqsExecExecution pexec.Execution sbomGenerator *fakes.SBOMGenerator @@ -56,26 +54,17 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { buffer = bytes.NewBuffer(nil) installOptions = &fakes.DetermineComposerInstallOptions{} composerInstallExecutable = &fakes.Executable{} - composerDumpAutoloadExecutable = &fakes.Executable{} composerGlobalExecutable = &fakes.Executable{} composerCheckPlatformReqsExecExecutable = &fakes.Executable{} composerInstallExecutable.ExecuteCall.Stub = func(temp pexec.Execution) error { - Expect(os.MkdirAll(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor", "local-package-name"), os.ModeDir|os.ModePerm)).To(Succeed()) + Expect(os.MkdirAll(filepath.Join(workingDir, "vendor", "local-package-name"), os.ModeDir|os.ModePerm)).To(Succeed()) Expect(fmt.Fprint(temp.Stdout, "stdout from composer install\n")).To(Equal(29)) Expect(fmt.Fprint(temp.Stderr, "stderr from composer install\n")).To(Equal(29)) composerInstallExecution = temp return nil } - composerDumpAutoloadExecutable.ExecuteCall.Stub = func(temp pexec.Execution) error { - Expect(os.MkdirAll(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor", "autoload.php"), os.ModeDir|os.ModePerm)).To(Succeed()) - Expect(fmt.Fprint(temp.Stdout, "stdout from composer dump-autoload\n")).To(Equal(35)) - Expect(fmt.Fprint(temp.Stderr, "stderr from composer dump-autoload\n")).To(Equal(35)) - composerDumpAutoloadExecution = temp - return nil - } - composerGlobalExecutable.ExecuteCall.Stub = func(temp pexec.Execution) error { Expect(os.MkdirAll(filepath.Join(layersDir, composer.ComposerGlobalLayerName, "vendor", "bin", "global-package-name"), os.ModeDir|os.ModePerm)).To(Succeed()) Expect(fmt.Fprint(temp.Stdout, "stdout from composer global\n")).To(Equal(28)) @@ -115,7 +104,6 @@ php 8.1.4 success scribe.NewEmitter(buffer).WithLevel("DEBUG"), installOptions, composerInstallExecutable, - composerDumpAutoloadExecutable, composerGlobalExecutable, composerCheckPlatformReqsExecExecutable, sbomGenerator, @@ -169,7 +157,7 @@ php 8.1.4 success Expect(packagesLayer.Build).To(BeFalse()) Expect(packagesLayer.Launch).To(BeTrue()) - Expect(packagesLayer.Cache).To(BeFalse()) + Expect(packagesLayer.Cache).To(BeTrue()) Expect(packagesLayer.BuildEnv).To(BeEmpty()) Expect(packagesLayer.LaunchEnv).To(BeEmpty()) @@ -193,22 +181,17 @@ php 8.1.4 success Expect(installOptions.DetermineCall.CallCount).To(Equal(1)) Expect(composerInstallExecution.Args).To(Equal([]string{"install", "options", "from", "fake"})) - Expect(composerInstallExecution.Dir).To(Equal(filepath.Join(layersDir, composer.ComposerPackagesLayerName))) + Expect(composerInstallExecution.Dir).To(Equal(filepath.Join(workingDir))) Expect(composerInstallExecution.Stdout).ToNot(BeNil()) Expect(composerInstallExecution.Stderr).ToNot(BeNil()) Expect(len(composerInstallExecution.Env)).To(Equal(len(os.Environ()) + 6)) - Expect(composerDumpAutoloadExecution.Args).To(Equal([]string{"dump-autoload", "--classmap-authoritative"})) - Expect(composerDumpAutoloadExecution.Dir).To(Equal(workingDir)) - Expect(composerDumpAutoloadExecution.Stdout).ToNot(BeNil()) - Expect(composerDumpAutoloadExecution.Stderr).ToNot(BeNil()) - Expect(sbomGenerator.GenerateCall.Receives.Dir).To(Equal(workingDir)) Expect(composerInstallExecution.Env).To(ContainElements( "COMPOSER_NO_INTERACTION=1", fmt.Sprintf("COMPOSER=%s", filepath.Join(workingDir, "composer.json")), fmt.Sprintf("COMPOSER_HOME=%s", filepath.Join(layersDir, composer.ComposerPackagesLayerName, ".composer")), - fmt.Sprintf("COMPOSER_VENDOR_DIR=vendor"), + fmt.Sprintf("COMPOSER_VENDOR_DIR=%s/vendor", workingDir), fmt.Sprintf("PHPRC=%s", filepath.Join(layersDir, "composer-php-ini", "composer-php.ini")), fmt.Sprintf("PATH=fake-path-from-tests"))) @@ -220,27 +203,7 @@ php 8.1.4 success extension_dir = "php-extension-dir" extension = openssl.so`)) - vendorLink, err := os.Readlink(filepath.Join(workingDir, "vendor")) - Expect(err).NotTo(HaveOccurred()) - Expect(vendorLink).To(Equal(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor"))) - }) - - context("with previously existing vendor dir", func() { - it.Before(func() { - Expect(os.Mkdir(filepath.Join(workingDir, "vendor"), os.ModeDir|os.ModePerm)).To(Succeed()) - Expect(os.WriteFile(filepath.Join(workingDir, "vendor", "existing-file.text"), []byte(""), os.ModePerm)).To(Succeed()) - }) - - it("copies the vendor dir into the layer for composer install", func() { - _, err := build(packit.BuildContext{ - BuildpackInfo: buildpackInfo, - WorkingDir: workingDir, - Layers: packit.Layers{Path: layersDir}, - Plan: buildpackPlan, - }) - Expect(err).NotTo(HaveOccurred()) - Expect(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor", "existing-file.text")).To(BeARegularFile()) - }) + Expect(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor")).To(BeADirectory()) }) }) @@ -264,15 +227,23 @@ extension = openssl.so`)) }) context("with COMPOSER_VENDOR_DIR set", func() { + var ( + err error + customDir string + ) + it.Before(func() { - Expect(os.Setenv("COMPOSER_VENDOR_DIR", "some-custom-dir")).To(Succeed()) + customDir, err = os.MkdirTemp(workingDir, "some-custom-dir") + Expect(err).NotTo(HaveOccurred()) + Expect(os.Setenv("COMPOSER_VENDOR_DIR", filepath.Base(customDir))).To(Succeed()) }) it.After(func() { + Expect(os.RemoveAll(customDir)).To(Succeed()) Expect(os.Unsetenv("COMPOSER_VENDOR_DIR")).To(Succeed()) }) - it("symlinks COMPOSER_VENDOR_DIR", func() { + it("uses custom COMPOSER_VENDOR_DIR", func() { _, err := build(packit.BuildContext{ BuildpackInfo: buildpackInfo, WorkingDir: workingDir, @@ -280,19 +251,15 @@ extension = openssl.so`)) Plan: buildpackPlan, }) Expect(err).NotTo(HaveOccurred()) - - vendorLink, err := os.Readlink(filepath.Join(workingDir, "some-custom-dir")) - Expect(err).NotTo(HaveOccurred()) - Expect(vendorLink).To(Equal(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor"))) + Expect(composerInstallExecution.Env).To(ContainElement(fmt.Sprintf("COMPOSER_VENDOR_DIR=%s", customDir))) }) context("with previously existing vendor dir", func() { it.Before(func() { - Expect(os.Mkdir(filepath.Join(workingDir, "some-custom-dir"), os.ModeDir|os.ModePerm)).To(Succeed()) - Expect(os.WriteFile(filepath.Join(workingDir, "some-custom-dir", "existing-file.text"), []byte(""), os.ModePerm)).To(Succeed()) + Expect(os.WriteFile(filepath.Join(customDir, "existing-file.text"), []byte(""), os.ModePerm)).To(Succeed()) }) - it("copies the vendor dir into the layer for composer install", func() { + it("existing files are in final composer packages layer", func() { _, err := build(packit.BuildContext{ BuildpackInfo: buildpackInfo, WorkingDir: workingDir, @@ -300,10 +267,7 @@ extension = openssl.so`)) Plan: buildpackPlan, }) Expect(err).NotTo(HaveOccurred()) - existingFile, err := filepath.EvalSymlinks(filepath.Join(workingDir, "some-custom-dir", "existing-file.text")) - Expect(err).NotTo(HaveOccurred()) - Expect(existingFile).To(BeARegularFile()) - Expect(existingFile).To(HaveSuffix(filepath.Join(composer.ComposerPackagesLayerName, "vendor", "existing-file.text"))) + Expect(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor", "existing-file.text")).To(BeAnExistingFile()) }) }) }) @@ -357,6 +321,12 @@ composer-lock-sha = "sha-from-composer-lock" `), os.ModePerm) Expect(err).NotTo(HaveOccurred()) + Expect(os.MkdirAll(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor"), os.ModePerm)).To(Succeed()) + Expect(os.WriteFile(filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor", "file.txt"), []byte(""), os.ModePerm)).To(Succeed()) + }) + + it.After(func() { + Expect(os.RemoveAll(filepath.Join(layersDir, composer.ComposerPackagesLayerName))).To(Succeed()) }) it("reuses the cached version of the composer packages", func() { @@ -395,6 +365,8 @@ composer-lock-sha = "sha-from-composer-lock" Content: sbom.NewFormattedReader(sbom.SBOM{}, sbom.SPDXFormat), }, })) + + Expect(filepath.Join(workingDir, "vendor", "file.txt")).To(BeAnExistingFile()) }) context("when trying to reuse a layer but the stack changes", func() { @@ -426,6 +398,42 @@ composer-lock-sha = "sha-from-composer-lock" Expect(packagesLayer.Metadata["stack"]).To(Equal("another-stack")) }) }) + + context("with previously existing vendor dir", func() { + it.Before(func() { + Expect(os.Mkdir(filepath.Join(workingDir, "vendor"), os.ModeDir|os.ModePerm)).To(Succeed()) + Expect(os.WriteFile(filepath.Join(workingDir, "vendor", "pre-existing-file.text"), []byte(""), os.ModePerm)).To(Succeed()) + }) + + it("replaces workspace vendor directory with cached vendor directory", func() { + result, err := build(packit.BuildContext{ + BuildpackInfo: buildpackInfo, + WorkingDir: workingDir, + Layers: packit.Layers{Path: layersDir}, + Plan: buildpackPlan, + }) + Expect(err).NotTo(HaveOccurred()) + Expect(buffer).NotTo(ContainSubstring("Running 'composer install'")) + + Expect(calculator.SumCall.Receives.Paths).To(Equal([]string{filepath.Join(workingDir, "composer.lock")})) + layers := result.Layers + Expect(layers).To(HaveLen(1)) + + packagesLayer := layers[0] + Expect(packagesLayer.Name).To(Equal(composer.ComposerPackagesLayerName)) + Expect(packagesLayer.Path).To(Equal(filepath.Join(layersDir, composer.ComposerPackagesLayerName))) + + Expect(packagesLayer.Build).To(BeTrue()) + Expect(packagesLayer.Launch).To(BeTrue()) + Expect(packagesLayer.Cache).To(BeTrue()) + + Expect(packagesLayer.Metadata["composer-lock-sha"]).To(Equal("sha-from-composer-lock")) + Expect(packagesLayer.Metadata["stack"]).To(Equal("")) + + Expect(filepath.Join(workingDir, "vendor", "file.txt")).To(BeAnExistingFile()) + Expect(filepath.Join(workingDir, "vendor", "pre-existing-file.text")).NotTo(BeAnExistingFile()) + }) + }) }) context("invokes 'composer check-platform-reqs'", func() { @@ -487,11 +495,10 @@ extension = bar.so Expect(output).To(ContainSubstring("Ran 'composer global require --no-progress package'")) Expect(output).To(ContainSubstring(" Running 'composer install'")) Expect(output).To(ContainSubstring("Ran 'composer install options from fake'")) - Expect(output).To(ContainSubstring(fmt.Sprintf("Writing symlink %s => %s", filepath.Join(workingDir, "vendor"), - filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor")))) + Expect(output).To(ContainSubstring(fmt.Sprintf("Copying from %s => to %s", filepath.Join(workingDir, "vendor"), + filepath.Join(layersDir, composer.ComposerPackagesLayerName)))) + Expect(output).To(ContainSubstring(fmt.Sprintf("Listing files in %s:", filepath.Join(layersDir, composer.ComposerPackagesLayerName, "vendor")))) - Expect(output).To(ContainSubstring("Running 'composer dump-autoload'")) - Expect(output).To(ContainSubstring("Ran 'composer dump-autoload --classmap-authoritative'")) Expect(output).To(ContainSubstring(" Generating SBOM")) Expect(output).To(ContainSubstring(" Running 'composer check-platform-reqs'")) Expect(output).To(ContainSubstring(" Ran 'composer check-platform-reqs', found extensions 'hello, bar'")) @@ -571,29 +578,6 @@ extension = bar.so Expect(buffer.String()).To(ContainSubstring("error message from install")) }) - - context("when composerDumpAutoloadExecution fails", func() { - it.Before(func() { - composerDumpAutoloadExecutable.ExecuteCall.Stub = func(temp pexec.Execution) error { - composerDumpAutoloadExecution = temp - _, _ = fmt.Fprint(composerDumpAutoloadExecution.Stderr, "error message from dump-autoload") - return errors.New("some error from dump-autoload") - } - }) - - it("logs the output", func() { - result, err := build(packit.BuildContext{ - BuildpackInfo: buildpackInfo, - WorkingDir: workingDir, - Layers: packit.Layers{Path: layersDir}, - Plan: buildpackPlan, - }) - Expect(err).To(Equal(errors.New("some error from install"))) - Expect(result).To(Equal(packit.BuildResult{})) - - Expect(buffer.String()).To(ContainSubstring("error message from install")) - }) - }) }) context("when generating the SBOM returns an error", func() { diff --git a/determine_composer_install_options.go b/determine_composer_install_options.go index bb171f03..4459c62d 100644 --- a/determine_composer_install_options.go +++ b/determine_composer_install_options.go @@ -19,23 +19,20 @@ func (_ InstallOptions) Determine() []string { return []string{ "--no-progress", "--no-dev", - "--no-autoloader", } } else if installOptionsFromEnv == "" { return []string{ "--no-progress", - "--no-autoloader", } } else { parsedOptionsFromEnv, err := shellwords.Parse(installOptionsFromEnv) if err != nil { return []string{ "--no-progress", - "--no-autoloader", installOptionsFromEnv, } } - return append([]string{"--no-progress", "--no-autoloader"}, parsedOptionsFromEnv...) + return append([]string{"--no-progress"}, parsedOptionsFromEnv...) } } diff --git a/determine_composer_install_options_test.go b/determine_composer_install_options_test.go index f085e1c2..8da826af 100644 --- a/determine_composer_install_options_test.go +++ b/determine_composer_install_options_test.go @@ -30,7 +30,6 @@ func testComposerInstallOptions(t *testing.T, context spec.G, it spec.S) { Expect(options.Determine()).To(Equal([]string{ "--no-progress", "--no-dev", - "--no-autoloader", })) }) }) @@ -43,7 +42,6 @@ func testComposerInstallOptions(t *testing.T, context spec.G, it spec.S) { it("should return --no-progress only", func() { Expect(options.Determine()).To(Equal([]string{ "--no-progress", - "--no-autoloader", })) }) }) @@ -56,7 +54,6 @@ func testComposerInstallOptions(t *testing.T, context spec.G, it spec.S) { it("should return those values as individual args", func() { Expect(options.Determine()).To(Equal([]string{ "--no-progress", - "--no-autoloader", "--foo=bar", "-v", "--something", @@ -72,7 +69,6 @@ func testComposerInstallOptions(t *testing.T, context spec.G, it spec.S) { it("should return those values as one single arg", func() { Expect(options.Determine()).To(Equal([]string{ "--no-progress", - "--no-autoloader", "invalid'option for composer", })) }) diff --git a/go.mod b/go.mod index 9c1e14d7..b2ad1891 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.18 require ( github.com/BurntSushi/toml v1.2.1 - github.com/docker/docker v20.10.21+incompatible github.com/mattn/go-shellwords v1.0.12 github.com/onsi/gomega v1.24.1 github.com/paketo-buildpacks/occam v0.13.3 @@ -34,11 +33,10 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/containerd/cgroups v1.0.4 // indirect github.com/containerd/containerd v1.6.9 // indirect - github.com/containerd/continuity v0.3.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect - github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/docker/cli v20.10.21+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v20.10.21+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -47,7 +45,6 @@ require ( github.com/facebookincubator/nvdtools v0.1.5 // indirect github.com/gabriel-vasile/mimetype v1.4.1 // indirect github.com/go-restruct/restruct v1.2.0-alpha // indirect - github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect @@ -74,10 +71,8 @@ require ( github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/locker v1.0.1 // indirect github.com/moby/sys/mount v0.3.3 // indirect github.com/moby/sys/mountinfo v0.6.2 // indirect - github.com/moby/sys/symlink v0.2.0 // indirect github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/nwaples/rardecode v1.1.3 // indirect @@ -86,7 +81,6 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/opencontainers/runc v1.1.4 // indirect - github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -101,7 +95,6 @@ require ( github.com/spf13/cast v1.5.0 // indirect github.com/sylabs/sif/v2 v2.8.3 // indirect github.com/sylabs/squashfs v0.6.1 // indirect - github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/testcontainers/testcontainers-go v0.15.0 // indirect github.com/therootcompany/xz v1.0.1 // indirect github.com/ulikunitz/xz v0.5.10 // indirect diff --git a/go.sum b/go.sum index f363fe91..c1ab66c6 100644 --- a/go.sum +++ b/go.sum @@ -749,7 +749,6 @@ github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EX github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= @@ -828,7 +827,6 @@ github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -1196,7 +1194,6 @@ github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6 github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6 h1:mkgN1ofwASrYnJ5W6U/BxG15eXXXjirgZc7CLqkcaro= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -1882,7 +1879,6 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs= @@ -1894,7 +1890,6 @@ github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vyg github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= @@ -2033,14 +2028,12 @@ github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -2384,7 +2377,6 @@ github.com/sylabs/squashfs v0.6.1/go.mod h1:ZwpbPCj0ocIvMy2br6KZmix6Gzh6fsGQcCny github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= diff --git a/integration/custom_vendor_dir_test.go b/integration/custom_vendor_dir_test.go index 9f122ee6..65e08e87 100644 --- a/integration/custom_vendor_dir_test.go +++ b/integration/custom_vendor_dir_test.go @@ -68,7 +68,7 @@ func testCustomVendorDir(t *testing.T, context spec.G, it spec.S) { Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) - Expect(logs).To(ContainSubstring(fmt.Sprintf("Writing symlink /workspace/custom_vendor_dir => /layers/%s/composer-packages/vendor", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")))) + Expect(logs.String()).To(ContainSubstring(fmt.Sprintf("Copying from /workspace/custom_vendor_dir => to /layers/%s/composer-packages/vendor", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")))) container, err = docker.Container.Run. WithEnv(map[string]string{"PORT": "8765"}). diff --git a/integration/default_app_test.go b/integration/default_app_test.go index 76a534cd..a0d13fd3 100644 --- a/integration/default_app_test.go +++ b/integration/default_app_test.go @@ -65,7 +65,7 @@ func testDefaultApp(t *testing.T, context spec.G, it spec.S) { Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) - Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev --no-autoloader'")) + Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev'")) container, err = docker.Container.Run. WithEnv(map[string]string{"PORT": "8765"}). diff --git a/integration/framework_app_test.go b/integration/framework_app_test.go new file mode 100644 index 00000000..78c280fd --- /dev/null +++ b/integration/framework_app_test.go @@ -0,0 +1,122 @@ +package integration_test + +import ( + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/paketo-buildpacks/occam" + "github.com/sclevine/spec" + + . "github.com/onsi/gomega" + . "github.com/paketo-buildpacks/occam/matchers" +) + +func testFrameworkApps(t *testing.T, context spec.G, it spec.S) { + var ( + Expect = NewWithT(t).Expect + Eventually = NewWithT(t).Eventually + + pack occam.Pack + docker occam.Docker + ) + + it.Before(func() { + pack = occam.NewPack().WithVerbose().WithNoColor() + docker = occam.NewDocker() + }) + + context("PHP apps that use frameworks", func() { + var ( + image occam.Image + container occam.Container + + name string + source string + ) + + it.Before(func() { + var err error + name, err = occam.RandomName() + Expect(err).NotTo(HaveOccurred()) + }) + + it.After(func() { + Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) + Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) + Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) + Expect(os.RemoveAll(source)).To(Succeed()) + }) + + context("building a laravel app", func() { + var ( + err error + logs fmt.Stringer + ) + + it.Before(func() { + source, err = occam.Source(filepath.Join("testdata", "laravel_app")) + Expect(err).NotTo(HaveOccurred()) + }) + + it("builds and runs", func() { + image, logs, err = pack.Build. + WithPullPolicy("never"). + WithBuildpacks(buildpacksArray...). + WithEnv(map[string]string{ + "BP_PHP_SERVER": "nginx", + "BP_PHP_WEB_DIR": "public", + "BP_LOG_LEVEL": "DEBUG", + }). + Execute(name, source) + + Expect(err).ToNot(HaveOccurred(), logs.String) + + container, err = docker.Container.Run. + WithEnv(map[string]string{"PORT": "8080"}). + WithPublish("8080"). + Execute(image.ID) + Expect(err).NotTo(HaveOccurred()) + + Eventually(container).Should(Serve(ContainSubstring("Laravel")).OnPort(8080)) + }) + }) + + context("building a symfony app", func() { + var ( + err error + logs fmt.Stringer + ) + + it.Before(func() { + source, err = occam.Source(filepath.Join("testdata", "symfony_app")) + Expect(err).NotTo(HaveOccurred()) + }) + + it("builds and runs", func() { + image, logs, err = pack.Build. + WithPullPolicy("never"). + WithBuildpacks(buildpacksArray...). + WithEnv(map[string]string{ + "BP_PHP_SERVER": "nginx", + "BP_PHP_WEB_DIR": "public", + "BP_COMPOSER_INSTALL_OPTIONS": "--no-scripts -o", + }). + Execute(name, source) + + Expect(err).ToNot(HaveOccurred(), logs.String) + + container, err = docker.Container.Run. + WithEnv(map[string]string{"PORT": "8080"}). + WithPublish("8080"). + Execute(image.ID) + Expect(err).NotTo(HaveOccurred()) + + Eventually(container).Should(Serve(ContainSubstring("Symfony Demo application")).OnPort(8080)) + Eventually(container).Should(Serve(ContainSubstring("Symfony Demo blog")).OnPort(8080).WithEndpoint("/en/blog/")) + }) + }) + + }) +} diff --git a/integration/init_test.go b/integration/init_test.go index 4255580e..07fe0e29 100644 --- a/integration/init_test.go +++ b/integration/init_test.go @@ -103,12 +103,13 @@ func TestIntegration(t *testing.T) { buildpacks.PhpStart, } - SetDefaultEventuallyTimeout(5 * time.Second) + SetDefaultEventuallyTimeout(20 * time.Second) suite := spec.New("Integration", spec.Report(report.Terminal{})) suite("StackUpgrade", testStackUpgrade) suite("CustomVendorDir", testCustomVendorDir) suite("Default", testDefaultApp) + suite("FrameworkApps", testFrameworkApps) suite("Global", testGlobal) suite("ReusingLayerRebuild", testReusingLayerRebuild, spec.Sequential()) suite("TestOutsideAutoloading", testOutsideAutoloading) diff --git a/integration/outside_autoloading_test.go b/integration/outside_autoloading_test.go index 02b3b1f7..e2d42c3e 100644 --- a/integration/outside_autoloading_test.go +++ b/integration/outside_autoloading_test.go @@ -64,8 +64,7 @@ func testOutsideAutoloading(t *testing.T, context spec.G, it spec.S) { Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) - Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev --no-autoloader'")) - Expect(logs).To(ContainSubstring("Ran 'composer dump-autoload --classmap-authoritative'")) + Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev'")) container, err = docker.Container.Run. WithEnv(map[string]string{"PORT": "8080"}). diff --git a/integration/reuse_layer_rebuild_test.go b/integration/reuse_layer_rebuild_test.go index 31d69238..88467ee4 100644 --- a/integration/reuse_layer_rebuild_test.go +++ b/integration/reuse_layer_rebuild_test.go @@ -147,4 +147,54 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) { Expect(secondImage.Buildpacks[2].Layers["composer-packages"].SHA).NotTo(Equal(firstImage.Buildpacks[2].Layers["composer-packages"].SHA)) }) }) + + context("when a vendored app is rebuilt and composer.lock does not change", func() { + it("reuses the vendor layer from a previous build", func() { + var ( + err error + logs fmt.Stringer + firstImage occam.Image + secondImage occam.Image + ) + + source, err = occam.Source(filepath.Join("testdata", "with_vendored_packages")) + Expect(err).NotTo(HaveOccurred()) + + build := pack.WithNoColor().Build. + WithPullPolicy("never"). + WithBuildpacks(buildpacksArray...). + WithEnv(map[string]string{ + "BP_PHP_SERVER": "nginx", + }) + + firstImage, logs, err = build.Execute(name, source) + Expect(err).NotTo(HaveOccurred()) + + imageIDs[firstImage.ID] = struct{}{} + + Expect(firstImage.Buildpacks).To(HaveLen(7)) + + Expect(firstImage.Buildpacks[2].Key).To(Equal(buildpackInfo.Buildpack.ID)) + Expect(firstImage.Buildpacks[2].Layers).To(HaveKey("composer-packages")) + + Expect(logs.String()).To(ContainSubstring("Running 'composer install'")) + + // Second pack build + secondImage, logs, err = build.Execute(name, source) + Expect(err).NotTo(HaveOccurred()) + + imageIDs[secondImage.ID] = struct{}{} + + Expect(secondImage.Buildpacks).To(HaveLen(7)) + + Expect(secondImage.Buildpacks[2].Key).To(Equal(buildpackInfo.Buildpack.ID)) + Expect(secondImage.Buildpacks[2].Layers).To(HaveKey("composer-packages")) + + Expect(logs.String()).NotTo(ContainSubstring("Running 'composer install'")) + Expect(logs.String()).To(ContainSubstring("Detected existing vendored packages, replacing with cached vendored packages")) + Expect(logs.String()).To(ContainSubstring(fmt.Sprintf("Reusing cached layer /layers/%s/composer-packages", strings.ReplaceAll(buildpackInfo.Buildpack.ID, "/", "_")))) + + Expect(secondImage.Buildpacks[2].Layers["composer-packages"].SHA).To(Equal(firstImage.Buildpacks[2].Layers["composer-packages"].SHA)) + }) + }) } diff --git a/integration/stack_upgrade_test.go b/integration/stack_upgrade_test.go index ca901fb8..fadb41b3 100644 --- a/integration/stack_upgrade_test.go +++ b/integration/stack_upgrade_test.go @@ -83,7 +83,7 @@ func testStackUpgrade(t *testing.T, context spec.G, it spec.S) { firstImage, logs, err = build.Execute(name, source) Expect(err).NotTo(HaveOccurred(), logs.String()) - Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev --no-autoloader'")) + Expect(logs).To(ContainSubstring("Ran 'composer install --no-progress --no-dev'")) imageIDs[firstImage.ID] = struct{}{} diff --git a/integration/testdata/laravel_app/.editorconfig b/integration/testdata/laravel_app/.editorconfig new file mode 100644 index 00000000..8f0de65c --- /dev/null +++ b/integration/testdata/laravel_app/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/integration/testdata/laravel_app/.env.example b/integration/testdata/laravel_app/.env.example new file mode 100644 index 00000000..00b6110e --- /dev/null +++ b/integration/testdata/laravel_app/.env.example @@ -0,0 +1,58 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/integration/testdata/laravel_app/.gitattributes b/integration/testdata/laravel_app/.gitattributes new file mode 100644 index 00000000..7dbbf41a --- /dev/null +++ b/integration/testdata/laravel_app/.gitattributes @@ -0,0 +1,11 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/integration/testdata/laravel_app/.gitignore b/integration/testdata/laravel_app/.gitignore new file mode 100644 index 00000000..f0d10af6 --- /dev/null +++ b/integration/testdata/laravel_app/.gitignore @@ -0,0 +1,18 @@ +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode diff --git a/integration/testdata/laravel_app/.php.ini.d/custom.ini b/integration/testdata/laravel_app/.php.ini.d/custom.ini new file mode 100644 index 00000000..90676bed --- /dev/null +++ b/integration/testdata/laravel_app/.php.ini.d/custom.ini @@ -0,0 +1,3 @@ +extension="curl.so" +extension="fileinfo.so" +extension="openssl.so" diff --git a/integration/testdata/laravel_app/README.md b/integration/testdata/laravel_app/README.md new file mode 100644 index 00000000..df6af965 --- /dev/null +++ b/integration/testdata/laravel_app/README.md @@ -0,0 +1,73 @@ +This app was generated by: + +1. Running `composer create-project laravel/laravel ./example-laravel-app` +2. Adding necessary extensions to `.php.ini.d/custom.ini` + +------------------------------- + +

Laravel Logo

+ +

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

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! 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 + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/integration/testdata/laravel_app/app/Console/Kernel.php b/integration/testdata/laravel_app/app/Console/Kernel.php new file mode 100644 index 00000000..d8bc1d29 --- /dev/null +++ b/integration/testdata/laravel_app/app/Console/Kernel.php @@ -0,0 +1,32 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/integration/testdata/laravel_app/app/Exceptions/Handler.php b/integration/testdata/laravel_app/app/Exceptions/Handler.php new file mode 100644 index 00000000..82a37e40 --- /dev/null +++ b/integration/testdata/laravel_app/app/Exceptions/Handler.php @@ -0,0 +1,50 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/integration/testdata/laravel_app/app/Http/Controllers/Controller.php b/integration/testdata/laravel_app/app/Http/Controllers/Controller.php new file mode 100644 index 00000000..a0a2a8a3 --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/Authenticate.php b/integration/testdata/laravel_app/app/Http/Middleware/Authenticate.php new file mode 100644 index 00000000..704089a7 --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/EncryptCookies.php b/integration/testdata/laravel_app/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 00000000..867695bd --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/integration/testdata/laravel_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 00000000..74cbd9a9 --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/RedirectIfAuthenticated.php b/integration/testdata/laravel_app/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 00000000..a2813a06 --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/TrimStrings.php b/integration/testdata/laravel_app/app/Http/Middleware/TrimStrings.php new file mode 100644 index 00000000..88cadcaa --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/TrustHosts.php b/integration/testdata/laravel_app/app/Http/Middleware/TrustHosts.php new file mode 100644 index 00000000..7186414c --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/TrustProxies.php b/integration/testdata/laravel_app/app/Http/Middleware/TrustProxies.php new file mode 100644 index 00000000..3391630e --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/ValidateSignature.php b/integration/testdata/laravel_app/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 00000000..093bf64a --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/integration/testdata/laravel_app/app/Http/Middleware/VerifyCsrfToken.php b/integration/testdata/laravel_app/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 00000000..9e865217 --- /dev/null +++ b/integration/testdata/laravel_app/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/integration/testdata/laravel_app/app/Models/User.php b/integration/testdata/laravel_app/app/Models/User.php new file mode 100644 index 00000000..23b40634 --- /dev/null +++ b/integration/testdata/laravel_app/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; +} diff --git a/integration/testdata/laravel_app/app/Providers/AppServiceProvider.php b/integration/testdata/laravel_app/app/Providers/AppServiceProvider.php new file mode 100644 index 00000000..ee8ca5bc --- /dev/null +++ b/integration/testdata/laravel_app/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/integration/testdata/laravel_app/app/Providers/BroadcastServiceProvider.php b/integration/testdata/laravel_app/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 00000000..395c518b --- /dev/null +++ b/integration/testdata/laravel_app/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/integration/testdata/laravel_app/app/Providers/RouteServiceProvider.php b/integration/testdata/laravel_app/app/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..ea87f2e5 --- /dev/null +++ b/integration/testdata/laravel_app/app/Providers/RouteServiceProvider.php @@ -0,0 +1,52 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/integration/testdata/laravel_app/artisan b/integration/testdata/laravel_app/artisan new file mode 100755 index 00000000..67a3329b --- /dev/null +++ b/integration/testdata/laravel_app/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/integration/testdata/laravel_app/bootstrap/app.php b/integration/testdata/laravel_app/bootstrap/app.php new file mode 100644 index 00000000..037e17df --- /dev/null +++ b/integration/testdata/laravel_app/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/integration/testdata/laravel_app/bootstrap/cache/.gitignore b/integration/testdata/laravel_app/bootstrap/cache/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/integration/testdata/laravel_app/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/integration/testdata/laravel_app/composer.json b/integration/testdata/laravel_app/composer.json new file mode 100644 index 00000000..2f37331c --- /dev/null +++ b/integration/testdata/laravel_app/composer.json @@ -0,0 +1,66 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.0.2", + "ext-fileinfo": "*", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^9.19", + "laravel/sanctum": "^3.0", + "laravel/tinker": "^2.7" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/pint": "^1.0", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^6.1", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ignition": "^1.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/integration/testdata/laravel_app/composer.lock b/integration/testdata/laravel_app/composer.lock new file mode 100644 index 00000000..5122f38f --- /dev/null +++ b/integration/testdata/laravel_app/composer.lock @@ -0,0 +1,7839 @@ +{ + "_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": "75a174a0e7c3e71a3aaee16e806c06eb", + "packages": [ + { + "name": "brick/math", + "version": "0.10.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.10.2" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-08-10T22:54:19+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "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" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-09-10T18:51:20+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2022-06-18T20:57:19+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-08-28T15:39:27+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "67c26b443f348a51926030c83481b85718457d3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-10-26T14:07:24+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.43.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "011f2e1d49a11c22519a7899b46ddf3bc5b0f40b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/011f2e1d49a11c22519a7899b46ddf3bc5b0f40b", + "reference": "011f2e1d49a11c22519a7899b46ddf3bc5b0f40b", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1", + "ext-mbstring": "*", + "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.2.2", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "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/macroable": "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": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.11", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "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.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.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 (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.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 (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "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" + }, + "time": "2022-12-06T14:26:07+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "b71e80a3a8e8029e2ec8c1aa814b999609ce16dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/b71e80a3a8e8029e2ec8c1aa814b999609ce16dc", + "reference": "b71e80a3a8e8029e2ec8c1aa814b999609ce16dc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21", + "illuminate/contracts": "^9.21", + "illuminate/database": "^9.21", + "illuminate/support": "^9.21", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-07-29T21:33:30+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-09-08T13:45:54+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef", + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "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" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.3" + }, + "time": "2022-11-09T15:11:38+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.7", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "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/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "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://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-11-03T17:29:46+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "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": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "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" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "3.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "7e423e5dd240a60adfab9bde058d7668863b7731" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7e423e5dd240a60adfab9bde058d7668863b7731", + "reference": "7e423e5dd240a60adfab9bde058d7668863b7731", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.11.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-12-02T14:39:57+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T11:55:47+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.64.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "889546413c97de2d05063b8cb7b193c2531ea211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/889546413c97de2d05063b8cb7b193c2531ea211", + "reference": "889546413c97de2d05063b8cb7b193c2531ea211", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2022-11-26T17:36:00+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.3" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.8" + }, + "time": "2022-09-12T23:36:20+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "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": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + }, + "time": "2022-11-12T15:38:23+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.14.2", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-10-28T22:51:32+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:51:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "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" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.9", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778", + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "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." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.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" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.9" + }, + "time": "2022-11-06T15:29:46+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "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 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "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 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.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.6.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ad63bc700e7d021039e30ce464eba384c4a1d40f", + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "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." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.6.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2022-11-05T23:03:38+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f", + "reference": "58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.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": "2022-12-01T13:44:20+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/91c342ffc99283c43653ed8eb47bc2a94db7f398", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "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": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.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": "2022-08-26T05:51:22+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/b4e41f62c1124378863ff2705158a60da3e4c6b9", + "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.2.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": "2022-12-01T21:07:46+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-09T08:55:40+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0bbd5a7e81b38f32504399b9199f265505b7bac", + "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.2.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": "2022-12-04T18:26:13+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404", + "reference": "bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.2.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": "2022-12-06T17:28:26+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "a18c3dd41cfcf011e3866802e39b9ae9e541deaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/a18c3dd41cfcf011e3866802e39b9ae9e541deaf", + "reference": "a18c3dd41cfcf011e3866802e39b9ae9e541deaf", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "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": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.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": "2022-12-06T16:54:23+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/1e8005a7cbd79fb824ad81308ef2a76592a08bc0", + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-28T12:28:19+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877", + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/857ac6f4df371470fbdefa2f5967a2618dbf1852", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-09T13:28:29+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.1.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": "2022-05-30T19:18:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/145702685e0d12f81d755c71127bfff7582fdd36", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-30T17:13:47+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c08de62caead8357244efcb809d0b1a2584f2198" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c08de62caead8357244efcb809d0b1a2584f2198", + "reference": "c08de62caead8357244efcb809d0b1a2584f2198", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.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": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "4f9f537e57261519808a7ce1d941490736522bbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/4f9f537e57261519808a7ce1d941490736522bbc", + "reference": "4f9f537e57261519808a7ce1d941490736522bbc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.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": "2022-10-09T08:55:40+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "1e7544c8698627b908657e5276854d52ab70087a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1e7544c8698627b908657e5276854d52ab70087a", + "reference": "1e7544c8698627b908657e5276854d52ab70087a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.2.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": "2022-12-03T22:32:58+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.5", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "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", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5" + }, + "time": "2022-09-12T13:28:28+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "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" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.20-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + }, + "time": "2022-07-20T13:12:54+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "f7948baaa0330277c729714910336383286305da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.6" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-11-02T16:23:29+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "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": "laravel/pint", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "e60e2112ee779ce60f253695b273d1646a17d6f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/e60e2112ee779ce60f253695b273d1646a17d6f1", + "reference": "e60e2112ee779ce60f253695b273d1646a17d6f1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11.0", + "illuminate/view": "^9.32.0", + "laravel-zero/framework": "^9.2.0", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.2.0", + "nunomaduro/termwind": "^1.14.0", + "pestphp/pest": "^1.22.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2022-11-29T16:25:20+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.16.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "0dbee8802e17911afbe29a8506316343829b056e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/0dbee8802e17911afbe29a8506316343829b056e", + "reference": "0dbee8802e17911afbe29a8506316343829b056e", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2022-11-21T16:19:18+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "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/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v6.3.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0f6349c3ed5dd28467087b08fb59384bb458a22b", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "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/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-09-29T12:29:49+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "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/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "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.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.19", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.14", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-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": "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/9.2.19" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-11-18T07:47:47+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-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": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "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/9.5.26" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2022-10-28T06:00:21+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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 PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "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/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "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": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "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/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "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/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "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/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "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", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "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", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-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/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-12T14:47:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "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/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-11-16T08:30:20+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/dd3d456779108d7078baf4e43f8c2b937d9794a1", + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "monolog/monolog": "^2.0", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-26T11:51:15+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.27", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.4.1", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-10-26T17:39:54+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "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", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0.2", + "ext-fileinfo": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/integration/testdata/laravel_app/config/app.php b/integration/testdata/laravel_app/config/app.php new file mode 100644 index 00000000..ef76a7ed --- /dev/null +++ b/integration/testdata/laravel_app/config/app.php @@ -0,0 +1,215 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, + ])->toArray(), + +]; diff --git a/integration/testdata/laravel_app/config/auth.php b/integration/testdata/laravel_app/config/auth.php new file mode 100644 index 00000000..d8c6cee7 --- /dev/null +++ b/integration/testdata/laravel_app/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/integration/testdata/laravel_app/config/broadcasting.php b/integration/testdata/laravel_app/config/broadcasting.php new file mode 100644 index 00000000..9e4d4aa4 --- /dev/null +++ b/integration/testdata/laravel_app/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/integration/testdata/laravel_app/config/cache.php b/integration/testdata/laravel_app/config/cache.php new file mode 100644 index 00000000..33bb2954 --- /dev/null +++ b/integration/testdata/laravel_app/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/integration/testdata/laravel_app/config/cors.php b/integration/testdata/laravel_app/config/cors.php new file mode 100644 index 00000000..8a39e6da --- /dev/null +++ b/integration/testdata/laravel_app/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/integration/testdata/laravel_app/config/database.php b/integration/testdata/laravel_app/config/database.php new file mode 100644 index 00000000..137ad18c --- /dev/null +++ b/integration/testdata/laravel_app/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/integration/testdata/laravel_app/config/filesystems.php b/integration/testdata/laravel_app/config/filesystems.php new file mode 100644 index 00000000..e9d9dbdb --- /dev/null +++ b/integration/testdata/laravel_app/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/integration/testdata/laravel_app/config/hashing.php b/integration/testdata/laravel_app/config/hashing.php new file mode 100644 index 00000000..bcd3be4c --- /dev/null +++ b/integration/testdata/laravel_app/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/integration/testdata/laravel_app/config/logging.php b/integration/testdata/laravel_app/config/logging.php new file mode 100644 index 00000000..5aa1dbb7 --- /dev/null +++ b/integration/testdata/laravel_app/config/logging.php @@ -0,0 +1,122 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/integration/testdata/laravel_app/config/mail.php b/integration/testdata/laravel_app/config/mail.php new file mode 100644 index 00000000..534395a3 --- /dev/null +++ b/integration/testdata/laravel_app/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/integration/testdata/laravel_app/config/queue.php b/integration/testdata/laravel_app/config/queue.php new file mode 100644 index 00000000..25ea5a81 --- /dev/null +++ b/integration/testdata/laravel_app/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/integration/testdata/laravel_app/config/sanctum.php b/integration/testdata/laravel_app/config/sanctum.php new file mode 100644 index 00000000..529cfdc9 --- /dev/null +++ b/integration/testdata/laravel_app/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/integration/testdata/laravel_app/config/services.php b/integration/testdata/laravel_app/config/services.php new file mode 100644 index 00000000..0ace530e --- /dev/null +++ b/integration/testdata/laravel_app/config/services.php @@ -0,0 +1,34 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/integration/testdata/laravel_app/config/session.php b/integration/testdata/laravel_app/config/session.php new file mode 100644 index 00000000..8fed97c0 --- /dev/null +++ b/integration/testdata/laravel_app/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/integration/testdata/laravel_app/config/view.php b/integration/testdata/laravel_app/config/view.php new file mode 100644 index 00000000..22b8a18d --- /dev/null +++ b/integration/testdata/laravel_app/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/integration/testdata/laravel_app/database/.gitignore b/integration/testdata/laravel_app/database/.gitignore new file mode 100644 index 00000000..9b19b93c --- /dev/null +++ b/integration/testdata/laravel_app/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/integration/testdata/laravel_app/database/factories/UserFactory.php b/integration/testdata/laravel_app/database/factories/UserFactory.php new file mode 100644 index 00000000..41f8ae89 --- /dev/null +++ b/integration/testdata/laravel_app/database/factories/UserFactory.php @@ -0,0 +1,40 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return static + */ + public function unverified() + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/integration/testdata/laravel_app/database/migrations/2014_10_12_000000_create_users_table.php b/integration/testdata/laravel_app/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 00000000..cf6b7766 --- /dev/null +++ b/integration/testdata/laravel_app/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +}; diff --git a/integration/testdata/laravel_app/database/migrations/2014_10_12_100000_create_password_resets_table.php b/integration/testdata/laravel_app/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 00000000..fcacb80b --- /dev/null +++ b/integration/testdata/laravel_app/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/integration/testdata/laravel_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/integration/testdata/laravel_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 00000000..17191986 --- /dev/null +++ b/integration/testdata/laravel_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/integration/testdata/laravel_app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/integration/testdata/laravel_app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 00000000..6c81fd22 --- /dev/null +++ b/integration/testdata/laravel_app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,37 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/integration/testdata/laravel_app/database/seeders/DatabaseSeeder.php b/integration/testdata/laravel_app/database/seeders/DatabaseSeeder.php new file mode 100644 index 00000000..76d96dc7 --- /dev/null +++ b/integration/testdata/laravel_app/database/seeders/DatabaseSeeder.php @@ -0,0 +1,24 @@ +create(); + + // \App\Models\User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + // ]); + } +} diff --git a/integration/testdata/laravel_app/lang/en/auth.php b/integration/testdata/laravel_app/lang/en/auth.php new file mode 100644 index 00000000..6598e2c0 --- /dev/null +++ b/integration/testdata/laravel_app/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/integration/testdata/laravel_app/lang/en/pagination.php b/integration/testdata/laravel_app/lang/en/pagination.php new file mode 100644 index 00000000..d4814118 --- /dev/null +++ b/integration/testdata/laravel_app/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/integration/testdata/laravel_app/lang/en/passwords.php b/integration/testdata/laravel_app/lang/en/passwords.php new file mode 100644 index 00000000..2345a56b --- /dev/null +++ b/integration/testdata/laravel_app/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/integration/testdata/laravel_app/lang/en/validation.php b/integration/testdata/laravel_app/lang/en/validation.php new file mode 100644 index 00000000..f3d8cc5f --- /dev/null +++ b/integration/testdata/laravel_app/lang/en/validation.php @@ -0,0 +1,176 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'string' => 'The :attribute must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute must have more than :value items.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'numeric' => 'The :attribute must be greater than :value.', + 'string' => 'The :attribute must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute must have :value items or more.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lowercase' => 'The :attribute must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute must have less than :value items.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'numeric' => 'The :attribute must be less than :value.', + 'string' => 'The :attribute must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute must not have more than :value items.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute must not have more than :max items.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute must not be greater than :max.', + 'string' => 'The :attribute must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute must not have more than :max digits.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'numeric' => 'The :attribute must be at least :min.', + 'string' => 'The :attribute must be at least :min characters.', + ], + 'min_digits' => 'The :attribute must have at least :min digits.', + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => [ + 'letters' => 'The :attribute must contain at least one letter.', + 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute must contain at least one number.', + 'symbols' => 'The :attribute must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'numeric' => 'The :attribute must be :size.', + 'string' => 'The :attribute must be :size characters.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute must be uppercase.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/integration/testdata/laravel_app/package.json b/integration/testdata/laravel_app/package.json new file mode 100644 index 00000000..a11c53af --- /dev/null +++ b/integration/testdata/laravel_app/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.0", + "lodash": "^4.17.19", + "postcss": "^8.1.14", + "vite": "^3.0.0" + } +} diff --git a/integration/testdata/laravel_app/phpunit.xml b/integration/testdata/laravel_app/phpunit.xml new file mode 100644 index 00000000..2ac86a18 --- /dev/null +++ b/integration/testdata/laravel_app/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/integration/testdata/laravel_app/public/.htaccess b/integration/testdata/laravel_app/public/.htaccess new file mode 100644 index 00000000..3aec5e27 --- /dev/null +++ b/integration/testdata/laravel_app/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/integration/testdata/laravel_app/public/favicon.ico b/integration/testdata/laravel_app/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/integration/testdata/laravel_app/public/index.php b/integration/testdata/laravel_app/public/index.php new file mode 100644 index 00000000..1d69f3a2 --- /dev/null +++ b/integration/testdata/laravel_app/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/integration/testdata/laravel_app/public/robots.txt b/integration/testdata/laravel_app/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/integration/testdata/laravel_app/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/integration/testdata/laravel_app/resources/css/app.css b/integration/testdata/laravel_app/resources/css/app.css new file mode 100644 index 00000000..e69de29b diff --git a/integration/testdata/laravel_app/resources/js/app.js b/integration/testdata/laravel_app/resources/js/app.js new file mode 100644 index 00000000..e59d6a0a --- /dev/null +++ b/integration/testdata/laravel_app/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/integration/testdata/laravel_app/resources/js/bootstrap.js b/integration/testdata/laravel_app/resources/js/bootstrap.js new file mode 100644 index 00000000..366c49d0 --- /dev/null +++ b/integration/testdata/laravel_app/resources/js/bootstrap.js @@ -0,0 +1,34 @@ +import _ from 'lodash'; +window._ = _; + +/** + * 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. + */ + +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * 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'; + +// import Pusher from 'pusher-js'; +// window.Pusher = Pusher; + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: import.meta.env.VITE_PUSHER_APP_KEY, +// wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, +// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, +// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', +// enabledTransports: ['ws', 'wss'], +// }); diff --git a/integration/testdata/laravel_app/resources/views/welcome.blade.php b/integration/testdata/laravel_app/resources/views/welcome.blade.php new file mode 100644 index 00000000..0ad6097c --- /dev/null +++ b/integration/testdata/laravel_app/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/integration/testdata/laravel_app/routes/api.php b/integration/testdata/laravel_app/routes/api.php new file mode 100644 index 00000000..eb6fa48c --- /dev/null +++ b/integration/testdata/laravel_app/routes/api.php @@ -0,0 +1,19 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/integration/testdata/laravel_app/routes/channels.php b/integration/testdata/laravel_app/routes/channels.php new file mode 100644 index 00000000..5d451e1f --- /dev/null +++ b/integration/testdata/laravel_app/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/integration/testdata/laravel_app/routes/console.php b/integration/testdata/laravel_app/routes/console.php new file mode 100644 index 00000000..e05f4c9a --- /dev/null +++ b/integration/testdata/laravel_app/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/integration/testdata/laravel_app/routes/web.php b/integration/testdata/laravel_app/routes/web.php new file mode 100644 index 00000000..b1303973 --- /dev/null +++ b/integration/testdata/laravel_app/routes/web.php @@ -0,0 +1,18 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/integration/testdata/laravel_app/tests/Feature/ExampleTest.php b/integration/testdata/laravel_app/tests/Feature/ExampleTest.php new file mode 100644 index 00000000..1eafba61 --- /dev/null +++ b/integration/testdata/laravel_app/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/integration/testdata/laravel_app/tests/TestCase.php b/integration/testdata/laravel_app/tests/TestCase.php new file mode 100644 index 00000000..2932d4a6 --- /dev/null +++ b/integration/testdata/laravel_app/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/integration/testdata/laravel_app/vite.config.js b/integration/testdata/laravel_app/vite.config.js new file mode 100644 index 00000000..421b5695 --- /dev/null +++ b/integration/testdata/laravel_app/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + ], +}); diff --git a/integration/testdata/symfony_app/.devcontainer/devcontainer.json b/integration/testdata/symfony_app/.devcontainer/devcontainer.json new file mode 100644 index 00000000..cbe99861 --- /dev/null +++ b/integration/testdata/symfony_app/.devcontainer/devcontainer.json @@ -0,0 +1,20 @@ +{ + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/shyim/devcontainers-features/symfony-cli:0": {}, + "ghcr.io/shyim/devcontainers-features/php:0": { + "version": "8.1" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "lts" + } + }, + "updateContentCommand": { + "composer install": ["composer", "install"], + "yarn": ["yarn"] + }, + "postAttachCommand": { + "server": "symfony server:start", + "yarn": ["yarn", "watch"] + } +} diff --git a/integration/testdata/symfony_app/.editorconfig b/integration/testdata/symfony_app/.editorconfig new file mode 100644 index 00000000..153cf3ef --- /dev/null +++ b/integration/testdata/symfony_app/.editorconfig @@ -0,0 +1,10 @@ +; top-most EditorConfig file +root = true + +; Unix-style newlines +[*] +end_of_line = LF + +[*.php] +indent_style = space +indent_size = 4 diff --git a/integration/testdata/symfony_app/.env b/integration/testdata/symfony_app/.env new file mode 100644 index 00000000..76ccbc48 --- /dev/null +++ b/integration/testdata/symfony_app/.env @@ -0,0 +1,35 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# https://symfony.com/doc/current/configuration/secrets.html +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=2ca64f8d83b9e89f5f19d672841d6bb8 +#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 +#TRUSTED_HOSTS='^(localhost|example\.com)$' +###< symfony/framework-bundle ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +# +DATABASE_URL=sqlite:///%kernel.project_dir%/data/database.sqlite +# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7", +# DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" +###< doctrine/doctrine-bundle ### + +###> symfony/mailer ### +# MAILER_DSN=null://null +###< symfony/mailer ### diff --git a/integration/testdata/symfony_app/.env.test b/integration/testdata/symfony_app/.env.test new file mode 100644 index 00000000..9820405e --- /dev/null +++ b/integration/testdata/symfony_app/.env.test @@ -0,0 +1,7 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='$ecretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 +PANTHER_APP_ENV=panther +PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots +DATABASE_URL=sqlite:///%kernel.project_dir%/data/database_test.sqlite diff --git a/integration/testdata/symfony_app/.github/workflows/lint.yaml b/integration/testdata/symfony_app/.github/workflows/lint.yaml new file mode 100644 index 00000000..56cba5da --- /dev/null +++ b/integration/testdata/symfony_app/.github/workflows/lint.yaml @@ -0,0 +1,95 @@ +name: "Lint" + +on: + pull_request: + push: + branches: + - main + +env: + fail-fast: true + +permissions: + contents: read + +jobs: + php-cs-fixer: + name: PHP-CS-Fixer + runs-on: ubuntu-latest + steps: + - name: "Checkout code" + uses: actions/checkout@v3 + + - name: PHP-CS-Fixer + uses: docker://oskarstark/php-cs-fixer-ga + with: + args: --diff --dry-run + + linters: + name: Linters + runs-on: ubuntu-latest + strategy: + matrix: + php-version: ['8.1'] + + steps: + - name: "Checkout code" + uses: actions/checkout@v3 + + - name: "Install PHP with extensions" + uses: shivammathur/setup-php@v2 + with: + coverage: "none" + extensions: intl + php-version: ${{ matrix.php-version }} + tools: composer:v2 + + - name: "Set composer cache directory" + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: "Cache composer" + uses: actions/cache@v3 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }} + restore-keys: ${{ runner.os }}-${{ matrix.php-version }}-composer- + + - name: "Composer install" + run: composer install --no-interaction --no-progress + + - name: Install PHPUnit + id: install + run: vendor/bin/simple-phpunit install + + - name: Lint YAML files + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:yaml config --parse-tags + + - name: Lint Twig templates + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:twig templates --env=prod + + - name: Lint XLIFF translations + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:xliff translations + + - name: Lint Parameters and Services + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:container --no-debug + + - name: Lint Doctrine entities + if: always() && steps.install.outcome == 'success' + run: ./bin/console doctrine:schema:validate --skip-sync -vvv --no-interaction + + - name: Lint Composer config + if: always() && steps.install.outcome == 'success' + run: composer validate --strict + + - name: Check if any dependencies are compromised + if: always() && steps.install.outcome == 'success' + run: composer audit + + - name: Run PHPStan + if: always() && steps.install.outcome == 'success' + run: ./vendor/bin/phpstan analyze diff --git a/integration/testdata/symfony_app/.github/workflows/tests.yaml b/integration/testdata/symfony_app/.github/workflows/tests.yaml new file mode 100644 index 00000000..48116895 --- /dev/null +++ b/integration/testdata/symfony_app/.github/workflows/tests.yaml @@ -0,0 +1,74 @@ +name: "Tests" + +on: + pull_request: + push: + branches: + - main + +env: + fail-fast: true + PHPUNIT_FLAGS: "-v" + SYMFONY_PHPUNIT_DIR: "$HOME/symfony-bridge/.phpunit" + SYMFONY_DEPRECATIONS_HELPER: 7 + +permissions: + contents: read + +jobs: + test: + name: "${{ matrix.operating-system }} / PHP ${{ matrix.php-version }}" + runs-on: ${{ matrix.operating-system }} + continue-on-error: false + + strategy: + matrix: + operating-system: ['ubuntu-latest'] + php-version: ['8.1'] + include: + - operating-system: 'macos-latest' + php-version: '8.1' + - operating-system: 'windows-latest' + php-version: '8.1' + + steps: + - name: "Checkout code" + uses: actions/checkout@v3 + + - name: "Install PHP with extensions" + uses: shivammathur/setup-php@v2 + with: + coverage: "none" + extensions: "intl, mbstring, pdo_sqlite" + php-version: ${{ matrix.php-version }} + tools: composer:v2 + + - name: "Add PHPUnit matcher" + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: "Set composer cache directory" + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + shell: bash + + - name: "Cache composer" + uses: actions/cache@v3 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('composer.json') }} + restore-keys: ${{ runner.os }}-${{ matrix.php-version }}-composer- + + - name: "Require symfony/flex" + run: composer require --no-progress --no-scripts --no-plugins symfony/flex + + - name: "Install dependencies" + run: composer update --no-interaction --prefer-dist --optimize-autoloader + + - name: "Install PHPUnit" + run: vendor/bin/simple-phpunit install + + - name: "PHPUnit version" + run: vendor/bin/simple-phpunit --version + + - name: "Run tests" + run: vendor/bin/simple-phpunit ${{ env.PHPUNIT_FLAGS }} diff --git a/integration/testdata/symfony_app/.gitignore b/integration/testdata/symfony_app/.gitignore new file mode 100644 index 00000000..63425ae1 --- /dev/null +++ b/integration/testdata/symfony_app/.gitignore @@ -0,0 +1,24 @@ +/public/build/fonts/glyphicons-* +/public/build/images/glyphicons-* + +.php-version + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/phpunit-bridge ### +.phpunit.result.cache +/phpunit.xml +###< symfony/phpunit-bridge ### +###> symfony/webpack-encore-bundle ### +/node_modules/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/integration/testdata/symfony_app/.nginx.conf.d/custom-server.conf b/integration/testdata/symfony_app/.nginx.conf.d/custom-server.conf new file mode 100644 index 00000000..ce66b64c --- /dev/null +++ b/integration/testdata/symfony_app/.nginx.conf.d/custom-server.conf @@ -0,0 +1,4 @@ +location / { + # try to serve file directly, fallback to index.php + try_files $uri /index.php$is_args$args; +} diff --git a/integration/testdata/symfony_app/.php-cs-fixer.dist.php b/integration/testdata/symfony_app/.php-cs-fixer.dist.php new file mode 100644 index 00000000..8347d964 --- /dev/null +++ b/integration/testdata/symfony_app/.php-cs-fixer.dist.php @@ -0,0 +1,43 @@ + + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +COMMENT; + +$finder = PhpCsFixer\Finder::create() + ->in(__DIR__) + ->exclude('config') + ->exclude('var') + ->exclude('public/bundles') + ->exclude('public/build') + // exclude files generated by Symfony Flex recipes + ->notPath('bin/console') + ->notPath('public/index.php') +; + +return (new PhpCsFixer\Config()) + ->setRiskyAllowed(true) + ->setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], + 'linebreak_after_opening_tag' => true, + 'mb_str_functions' => true, + 'no_php4_constructor' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'php_unit_strict' => true, + 'phpdoc_order' => true, + 'strict_comparison' => true, + 'strict_param' => true, + 'blank_line_between_import_groups' => false, + ]) + ->setFinder($finder) + ->setCacheFile(__DIR__.'/var/.php-cs-fixer.cache') +; diff --git a/integration/testdata/symfony_app/.php.ini.d/custom.ini b/integration/testdata/symfony_app/.php.ini.d/custom.ini new file mode 100644 index 00000000..080587d1 --- /dev/null +++ b/integration/testdata/symfony_app/.php.ini.d/custom.ini @@ -0,0 +1,2 @@ +extension=pdo.so +extension=pdo_sqlite.so diff --git a/integration/testdata/symfony_app/CONTRIBUTING.md b/integration/testdata/symfony_app/CONTRIBUTING.md new file mode 100644 index 00000000..906c46f5 --- /dev/null +++ b/integration/testdata/symfony_app/CONTRIBUTING.md @@ -0,0 +1,7 @@ +Contributing +============ + +The Symfony Demo application is an open source project. Contributions made by +the community are welcome. Send us your ideas, code reviews, pull requests and +feature requests to help us improve this project. All contributions must follow +the [usual Symfony contribution requirements](https://symfony.com/doc/current/contributing/index.html). diff --git a/integration/testdata/symfony_app/README.md b/integration/testdata/symfony_app/README.md new file mode 100644 index 00000000..128ad10d --- /dev/null +++ b/integration/testdata/symfony_app/README.md @@ -0,0 +1,75 @@ +This app was generated by: +- Running `composer create-project symfony/symfony-demo example-symfony-api` +- Adding extensions to `.php.ini.d/custom.ini` + + +Symfony Demo Application +======================== + +The "Symfony Demo Application" is a reference application created to show how +to develop applications following the [Symfony Best Practices][1]. + +You can also learn about these practices in [the official Symfony Book][5]. + +Requirements +------------ + + * PHP 8.1.0 or higher; + * PDO-SQLite PHP extension enabled; + * and the [usual Symfony application requirements][2]. + +Installation +------------ + +[Download Symfony][4] to install the `symfony` binary on your computer and run +this command: + +```bash +$ symfony new --demo my_project +``` + +Alternatively, you can use Composer: + +```bash +$ composer create-project symfony/symfony-demo my_project +``` + +If you want to test the demo without installing anything locally, you can also +deploy it on Platform.sh, the official Symfony PaaS: + +

+Deploy on Platform.sh +

+ +Usage +----- + +There's no need to configure anything to run the application. If you have +[installed Symfony][4] binary, run this command: + +```bash +$ cd my_project/ +$ symfony serve +``` + +Then access the application in your browser at the given URL ( by default). + +If you don't have the Symfony binary installed, run `php -S localhost:8000 -t public/` +to use the built-in PHP web server or [configure a web server][3] like Nginx or +Apache to run the application. + +Tests +----- + +Execute this command to run tests: + +```bash +$ cd my_project/ +$ ./bin/phpunit +``` + +[1]: https://symfony.com/doc/current/best_practices.html +[2]: https://symfony.com/doc/current/setup.html#technical-requirements +[3]: https://symfony.com/doc/current/setup/web_server_configuration.html +[4]: https://symfony.com/download +[5]: https://symfony.com/book diff --git a/integration/testdata/symfony_app/assets/admin.js b/integration/testdata/symfony_app/assets/admin.js new file mode 100644 index 00000000..f47fab78 --- /dev/null +++ b/integration/testdata/symfony_app/assets/admin.js @@ -0,0 +1,64 @@ +import './styles/admin.scss'; +import 'eonasdan-bootstrap-datetimepicker'; +import 'typeahead.js'; +import Bloodhound from "bloodhound-js"; +import 'bootstrap-tagsinput'; + +$(function() { + // Datetime picker initialization. + // See https://eonasdan.github.io/bootstrap-datetimepicker/ + $('[data-toggle="datetimepicker"]').datetimepicker({ + icons: { + time: 'fa fa-clock-o', + date: 'fa fa-calendar', + up: 'fa fa-chevron-up', + down: 'fa fa-chevron-down', + previous: 'fa fa-chevron-left', + next: 'fa fa-chevron-right', + today: 'fa fa-check-circle-o', + clear: 'fa fa-trash', + close: 'fa fa-remove' + } + }); + + // Bootstrap-tagsinput initialization + // https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/ + var $input = $('input[data-toggle="tagsinput"]'); + if ($input.length) { + var source = new Bloodhound({ + local: $input.data('tags'), + queryTokenizer: Bloodhound.tokenizers.whitespace, + datumTokenizer: Bloodhound.tokenizers.whitespace + }); + source.initialize(); + + $input.tagsinput({ + trimValue: true, + focusClass: 'focus', + typeaheadjs: { + name: 'tags', + source: source.ttAdapter() + } + }); + } +}); + +// Handling the modal confirmation message. +$(document).on('submit', 'form[data-confirmation]', function (event) { + var $form = $(this), + $confirm = $('#confirmationModal'); + + if ($confirm.data('result') !== 'yes') { + //cancel submit event + event.preventDefault(); + + $confirm + .off('click', '#btnYes') + .on('click', '#btnYes', function () { + $confirm.data('result', 'yes'); + $form.find('input[type="submit"]').attr('disabled', 'disabled'); + $form.submit(); + }) + .modal('show'); + } +}); diff --git a/integration/testdata/symfony_app/assets/app.js b/integration/testdata/symfony_app/assets/app.js new file mode 100644 index 00000000..80bbef86 --- /dev/null +++ b/integration/testdata/symfony_app/assets/app.js @@ -0,0 +1,18 @@ +import './styles/app.scss'; + +// loads the Bootstrap jQuery plugins +import 'bootstrap-sass/assets/javascripts/bootstrap/transition.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/alert.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/collapse.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/dropdown.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/modal.js'; +import 'jquery' + +// loads the code syntax highlighting library +import './js/highlight.js'; + +// Creates links to the Symfony documentation +import './js/doclinks.js'; + +// start the Stimulus application +import './bootstrap'; diff --git a/integration/testdata/symfony_app/assets/bootstrap.js b/integration/testdata/symfony_app/assets/bootstrap.js new file mode 100644 index 00000000..4ab2df64 --- /dev/null +++ b/integration/testdata/symfony_app/assets/bootstrap.js @@ -0,0 +1,11 @@ +import { startStimulusApp } from '@symfony/stimulus-bridge'; + +// Registers Stimulus controllers from controllers.json and in the controllers/ directory +export const app = startStimulusApp(require.context( + '@symfony/stimulus-bridge/lazy-controller-loader!./controllers', + true, + /\.[jt]sx?$/ +)); + +// register any custom, 3rd party controllers here +// app.register('some_controller_name', SomeImportedController); diff --git a/integration/testdata/symfony_app/assets/controllers.json b/integration/testdata/symfony_app/assets/controllers.json new file mode 100644 index 00000000..a1c6e90c --- /dev/null +++ b/integration/testdata/symfony_app/assets/controllers.json @@ -0,0 +1,4 @@ +{ + "controllers": [], + "entrypoints": [] +} diff --git a/integration/testdata/symfony_app/assets/controllers/.gitignore b/integration/testdata/symfony_app/assets/controllers/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/integration/testdata/symfony_app/assets/js/doclinks.js b/integration/testdata/symfony_app/assets/js/doclinks.js new file mode 100644 index 00000000..89c5c2a1 --- /dev/null +++ b/integration/testdata/symfony_app/assets/js/doclinks.js @@ -0,0 +1,63 @@ +'use strict'; + +// Wraps some elements in anchor tags referencing to the Symfony documentation +$(function() { + var $modal = $('#sourceCodeModal'); + var $controllerCode = $modal.find('code.php'); + var $templateCode = $modal.find('code.twig'); + + function anchor(url, content) { + return '' + content + ''; + }; + + function wrap(content, links) { + return content.replace( + new RegExp(Object.keys(links).join('|'), 'g'), + token => anchor(links[token], token) + ); + }; + + // Wraps links to the Symfony documentation + $modal.find('.hljs-comment').each(function() { + $(this).html($(this).html().replace(/https:\/\/symfony.com\/doc\/[\w/.#-]+/g, function(url) { + return anchor(url, url); + })); + }); + + // Wraps Symfony's attributes + var attributes = { + 'Cache': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/cache.html', + 'IsGranted': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#isgranted', + 'ParamConverter': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html', + 'Route': 'https://symfony.com/doc/current/routing.html#creating-routes-as-attributes-or-annotations', + 'Security': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#security' + }; + + $controllerCode.find('.hljs-meta').each(function() { + var src = $(this).text(); + + $(this).html(wrap(src, attributes)); + }); + + // Wraps Twig's tags + $templateCode.find('.hljs-template-tag + .hljs-name').each(function() { + var tag = $(this).text(); + + if ('else' === tag || tag.match(/^end/)) { + return; + } + + var url = 'https://twig.symfony.com/doc/3.x/tags/' + tag + '.html#' + tag; + + $(this).html(anchor(url, tag)); + }); + + // Wraps Twig's functions + $templateCode.find('.hljs-template-variable > .hljs-name').each(function() { + var func = $(this).text(); + + var url = 'https://twig.symfony.com/doc/3.x/functions/' + func + '.html#' + func; + + $(this).html(anchor(url, func)); + }); +}); diff --git a/integration/testdata/symfony_app/assets/js/highlight.js b/integration/testdata/symfony_app/assets/js/highlight.js new file mode 100644 index 00000000..4f3e27f8 --- /dev/null +++ b/integration/testdata/symfony_app/assets/js/highlight.js @@ -0,0 +1,8 @@ +import hljs from 'highlight.js/lib/core'; +import php from 'highlight.js/lib/languages/php'; +import twig from 'highlight.js/lib/languages/twig'; + +hljs.registerLanguage('php', php); +hljs.registerLanguage('twig', twig); + +hljs.highlightAll(); diff --git a/integration/testdata/symfony_app/assets/js/jquery.instantSearch.js b/integration/testdata/symfony_app/assets/js/jquery.instantSearch.js new file mode 100644 index 00000000..531bca99 --- /dev/null +++ b/integration/testdata/symfony_app/assets/js/jquery.instantSearch.js @@ -0,0 +1,106 @@ +/** + * jQuery plugin for an instant searching. + * + * @author Oleg Voronkovich + * @author Yonel Ceruto + */ +(function ($) { + 'use strict'; + + String.prototype.render = function (parameters) { + return this.replace(/({{ (\w+) }})/g, function (match, pattern, name) { + return parameters[name]; + }) + }; + + // INSTANTS SEARCH PUBLIC CLASS DEFINITION + // ======================================= + + var InstantSearch = function (element, options) { + this.$input = $(element); + this.$form = this.$input.closest('form'); + this.$preview = $('
    ').appendTo(this.$form); + this.options = $.extend({}, InstantSearch.DEFAULTS, this.$input.data(), options); + + this.$input.keyup(this.debounce()); + }; + + InstantSearch.DEFAULTS = { + minQueryLength: 2, + limit: 10, + delay: 500, + noResultsMessage: 'No results found', + itemTemplate: '\ +
    \ +

    {{ title }}

    \ + \ +

    {{ summary }}

    \ +
    ' + }; + + InstantSearch.prototype.debounce = function () { + var delay = this.options.delay; + var search = this.search; + var timer = null; + var self = this; + + return function () { + clearTimeout(timer); + timer = setTimeout(function () { + search.apply(self); + }, delay); + }; + }; + + InstantSearch.prototype.search = function () { + var query = $.trim(this.$input.val()).replace(/\s{2,}/g, ' '); + if (query.length < this.options.minQueryLength) { + this.$preview.empty(); + return; + } + + var self = this; + var data = this.$form.serializeArray(); + data['l'] = this.limit; + + $.getJSON(this.$form.attr('action'), data, function (items) { + self.show(items); + }); + }; + + InstantSearch.prototype.show = function (items) { + var $preview = this.$preview; + var itemTemplate = this.options.itemTemplate; + + if (0 === items.length) { + $preview.html(this.options.noResultsMessage); + } else { + $preview.empty(); + $.each(items, function (index, item) { + $preview.append(itemTemplate.render(item)); + }); + } + }; + + // INSTANTS SEARCH PLUGIN DEFINITION + // ================================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var instance = $this.data('instantSearch'); + var options = typeof option === 'object' && option; + + if (!instance) $this.data('instantSearch', (instance = new InstantSearch(this, options))); + + if (option === 'search') instance.search(); + }) + } + + $.fn.instantSearch = Plugin; + $.fn.instantSearch.Constructor = InstantSearch; + +})(window.jQuery); diff --git a/integration/testdata/symfony_app/assets/login.js b/integration/testdata/symfony_app/assets/login.js new file mode 100644 index 00000000..931a0c1b --- /dev/null +++ b/integration/testdata/symfony_app/assets/login.js @@ -0,0 +1,11 @@ +$(function() { + var usernameEl = $('#username'); + var passwordEl = $('#password'); + + // in a real application, the user/password should never be hardcoded + // but for the demo application it's very convenient to do so + if (!usernameEl.val() || 'jane_admin' === usernameEl.val()) { + usernameEl.val('jane_admin'); + passwordEl.val('kitten'); + } +}); diff --git a/integration/testdata/symfony_app/assets/search.js b/integration/testdata/symfony_app/assets/search.js new file mode 100644 index 00000000..6a1aa052 --- /dev/null +++ b/integration/testdata/symfony_app/assets/search.js @@ -0,0 +1,9 @@ +import './js/jquery.instantSearch.js'; + +$(function() { + $('.search-field') + .instantSearch({ + delay: 100, + }) + .keyup(); +}); diff --git a/integration/testdata/symfony_app/assets/styles/admin.scss b/integration/testdata/symfony_app/assets/styles/admin.scss new file mode 100644 index 00000000..c145f454 --- /dev/null +++ b/integration/testdata/symfony_app/assets/styles/admin.scss @@ -0,0 +1,26 @@ +@import "~bootswatch/flatly/variables"; +@import "~eonasdan-bootstrap-datetimepicker/src/sass/bootstrap-datetimepicker-build.scss"; +@import "bootstrap-tagsinput.scss"; + +/* Page: 'Backend post index' + ------------------------------------------------------------------------- */ +body#admin_post_index .item-actions { + white-space: nowrap +} + +body#admin_post_index .item-actions a.btn + a.btn { + margin-left: 4px +} + +/* Page: 'Backend post show' + ------------------------------------------------------------------------- */ +body#admin_post_show .post-tags .label-default { + background-color: #e9ecec; + color: #6D8283; + font-size: 16px; + margin-right: 10px; + padding: .4em 1em .5em; +} +body#admin_post_show .post-tags .label-default i { + color: #95A6A7; +} diff --git a/integration/testdata/symfony_app/assets/styles/app.scss b/integration/testdata/symfony_app/assets/styles/app.scss new file mode 100644 index 00000000..b20d6a0a --- /dev/null +++ b/integration/testdata/symfony_app/assets/styles/app.scss @@ -0,0 +1,368 @@ +// setting the value of this variable to an empty data URL is the only working solution +// to load the Bootswatch web fonts locally and avoid loading them from Google servers +// see https://github.com/thomaspark/bootswatch/issues/55#issuecomment-298093182 +$web-font-path: 'data:text/css;base64,'; + +// Make sure the bootstrap-sass and lato fonts are resolved correctly +$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; +$lato-font-path: '~lato-font/fonts'; + +@import "~bootswatch/flatly/variables"; +@import "~bootstrap-sass/assets/stylesheets/bootstrap"; +@import "~bootswatch/flatly/bootswatch"; +@import "~@fortawesome/fontawesome-free/css/all.css"; +@import "~@fortawesome/fontawesome-free/css/v4-shims.css"; +@import "~highlight.js/styles/github-dark-dimmed.css"; + +// pick the Lato fonts individually to avoid importing the entire font family +@import '~lato-font/scss/public-api'; +@include lato-include-font('normal'); +@include lato-include-font('bold'); + +/* Basic styles + ------------------------------------------------------------------------- */ +p, ul, ol { + font-size: 19px; + margin-bottom: 1.5em +} + +li { + margin-bottom: 0.5em +} + +code { + background: #ecf0f1; + color: #2c3e50 +} + +.text-danger, .text-danger:hover { + color: #e74c3c +} + +i { + margin-right: 0.25em +} + +.table.table-middle-aligned th, +.table.table-middle-aligned td { + vertical-align: middle; +} + +.doclink { + color: inherit +} + +/* Utilities + ------------------------------------------------------------------------- */ +.m-b-0 { margin-bottom: 0 } + +@media (min-width: $screen-md-min) { + .modal-xl { width: $modal-lg; } +} + +@media (min-width: $screen-lg-min) { + .modal-xl { width: $screen-lg-min - 60px; } +} + +/* Page elements + ------------------------------------------------------------------------- */ +body { + display: flex; + flex-direction: column; + min-height: 100vh +} + +header { + margin-bottom: 2em +} + +header ul.nav li { + margin-bottom: 0 +} + +header .locales { + min-width: 200px; +} +header .locales a { + color: #212529; + padding: 3px 15px; +} +header .locales a small { + border-radius: 4px; + border: 2px solid #dee2e6; + color: #7b8a8b; + float: left; + font-size: 12px; + line-height: 1.1; + margin: 2px 10px 0 0; + min-width: 26px; + padding: 0px 3px; + text-align: center; + text-transform: uppercase; +} +header .locales .active small, +header .locales a:hover small { + color: inherit; +} + +.body-container { + flex: 1; + /* needed to prevent pages with a very small height and browsers not supporting flex */ + min-height: 600px +} + +.body-container #main h1, .body-container #main h2 { + margin-top: 0 +} + +#sidebar .section { + margin-bottom: 2em +} + +#sidebar p { + font-size: 15px +} + +#sidebar p + p { + margin: 1.5em 0 0 +} + +footer { + background: #ecf0f1; + margin-top: 2em; + padding-top: 2em; + padding-bottom: 2em +} + +footer p { + color: #7b8a8b; + font-size: 13px; + margin-bottom: 0.25em +} + +footer #footer-resources { + text-align: right +} + +footer #footer-resources i { + color: #7b8a8b; + font-size: 28.5px; + margin-left: 0.5em +} + +#sourceCodeModal h3 { + font-size: 19px; + margin-top: 0 +} + +#sourceCodeModal h3 small { + color: #7b8a8b; + font-size: 80% +} + +#sourceCodeModal pre { + margin-bottom: 2em; + padding: 0 +} + +#confirmationModal .modal-dialog { + width: 500px +} + +#confirmationModal .modal-footer button { + min-width: 75px +} + +/* Misc. elements + ------------------------------------------------------------------------- */ +.section.rss a { + color: #f39c12; + font-size: 21px; +} + +/* Forms + ------------------------------------------------------------------------- */ +.form-group.has-error .form-control { + border-color: #e74c3c +} + +.form-group.has-error .control-label { + color: #e74c3c +} + +.form-group.has-error .help-block { + background-color: #e74c3c; + color: #fff; + font-size: 15px; + padding: 1em +} + +.form-group.has-error .help-block ul, +.form-group.has-error .help-block li { + margin-bottom: 0 +} +.form-group.has-error .help-block li + li { + margin-top: 0.5em; +} + +textarea { + max-width: 100% +} + +/* Page: 'Technical Requirements Checker' + ------------------------------------------------------------------------- */ +body#requirements_checker header h1 { + margin-bottom: 0; + margin-top: 0 +} + +body#requirements_checker header h1 span { + font-size: 120%; + opacity: 0.7; + padding: 0 5px +} + +body#requirements_checker .panel li { + margin-bottom: 1em +} + +/* Page: 'Homepage' + ------------------------------------------------------------------------- */ +body#homepage { + text-align: center +} + +/* Page: 'Login' + ------------------------------------------------------------------------- */ +body#login #login-users-help p { + font-size: 15px; + line-height: 1.42857 +} + +body#login #login-users-help p:last-child { + margin-bottom: 0 +} + +body#login #login-users-help p .label { + margin-right: 5px +} + +body#login #login-users-help p .console { + display: block; + margin: 5px 0; + padding: 10px +} + +/* Common Blog page elements + ------------------------------------------------------------------------- */ +.post-metadata { + color: #b4bcc2; + font-size: 19px; + margin-bottom: 16px; +} +.post-metadata .metadata { + margin-right: 1.5em; +} + +.post-tags .label { + margin-right: 5px; +} + +/* Page: 'Blog index' + ------------------------------------------------------------------------- */ +body#blog_index #main h1, +body#blog_index #main p { + margin-bottom: 0.5em +} + +body#blog_index article.post { + margin-bottom: 3em; +} + +body#blog_index .post-metadata { + font-size: 16px; + margin-bottom: 8px; +} + +body#blog_index .post-tags .label-default { + background-color: #e9ecec; + color: #6d8283; +} +body#blog_index .post-tags .label-default i { + color: #a3b2b2; +} + +/* Page: 'Blog post show' + ------------------------------------------------------------------------- */ +body#blog_post_show #main h3 { + margin-bottom: 0.75em +} + +body#blog_post_show .post-tags .label-default { + background-color: #e9ecec; + color: #6D8283; + font-size: 16px; + margin-right: 10px; + padding: .4em 1em .5em; +} +body#blog_post_show .post-tags .label-default i { + color: #95A6A7; +} + +body#blog_post_show #post-add-comment { + margin: 2em 0 +} + +body#blog_post_show #post-add-comment p { + margin-bottom: 0 +} + +body#blog_post_show #post-add-comment p a.btn { + margin-right: 0.5em +} + +body#blog_post_show .post-comment { + margin-bottom: 2em +} + +body#blog_post_show .post-comment h4 { + font-size: 13px; + line-height: 1.42857; + margin-top: 0 +} + +body#blog_post_show .post-comment h4 strong { + display: block +} + +/* Page: 'Comment form error' + ------------------------------------------------------------------------- */ +body#comment_form_error h1.text-danger { + margin-bottom: 1em +} + +@media (min-width: 768px) and (max-width: 1200px) { + .container { + width: 98%; + } +} + +/* Page: 'Blog search' + ------------------------------------------------------------------------- */ +body#blog_search #main h1, +body#blog_search #main p { + margin-bottom: 0.5em +} + +body#blog_search article.post:first-child { + margin-top: 2em; +} + +body#blog_search article.post { + margin-bottom: 2em; +} + +body#blog_search .post-metadata { + font-size: 16px; + margin-bottom: 8px; +} diff --git a/integration/testdata/symfony_app/assets/styles/bootstrap-tagsinput.scss b/integration/testdata/symfony_app/assets/styles/bootstrap-tagsinput.scss new file mode 100644 index 00000000..1af0e95a --- /dev/null +++ b/integration/testdata/symfony_app/assets/styles/bootstrap-tagsinput.scss @@ -0,0 +1,194 @@ +/* ------------------------------------------------------------------------------ + * + * # Twiter Typeahead + * + * Styles for tagsinput.js - input suggestion engine + * + * ---------------------------------------------------------------------------- */ +.twitter-typeahead { + width: 100%; +} +.typeahead, +.tt-query, +.tt-hint { + outline: 0; +} +.tt-hint { + color: #999; +} +.tt-menu{ + width: 100%; + margin-top: 1px; + min-width: 180px; + padding: 7px 0; + background-color: #fff; + border: 1px solid rgba(0,0,0,0.15); + border-radius: 4px; + max-height: 300px; + overflow-y: auto; + -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175); + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.typeahead-scrollable .tt-menu{ + max-height: 250px; +} +.typeahead-rtl .tt-menu{ + text-align: right; +} +.tt-suggestion { + padding: 8px 15px; + cursor: pointer; +} +.tt-suggestion.tt-cursor { + background-color: #f5f5f5; +} +.tt-suggestion p { + margin: 0; +} +.tt-suggestion.tt-selectable:before { + content: '\f02b'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: inherit; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.tt-dataset-group .tt-suggestion { + padding-left: 24px; + padding-right: 24px; +} +.tt-heading { + font-size: 11px; + line-height: 1.82; + padding: 8px 15px; + text-transform: uppercase; + display: block; + font-weight: 700; + margin-top: 2px; + margin-bottom: 2px; +} +.tt-suggestion:hover, +.tt-suggestion:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #18bc9c; +} +/* ------------------------------------------------------------------------------ +* +* # Bootstrap tags input +* +* Styles for tagsinput.js - tags input for Bootstrap +* +* ---------------------------------------------------------------------------- */ +.bootstrap-tagsinput { + display: table-cell; + vertical-align: middle; + width: 100%; + height: 45px; + padding: 0; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; + background-color: #ffffff; + background-image: none; + border: 2px solid #dce4ec; + border-radius: 4px; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} +.has-error .bootstrap-tagsinput { + border-color: #e74c3c !important; +} +.bootstrap-tagsinput.focus { + border-color: #2c3e50; + outline: 0; + box-shadow: none; +} +.bootstrap-tagsinput input { + border: 0; + outline: 0; + background-color: transparent; + padding: 5px 11px; + margin-top: 2px; + margin-left: 2px; + width: auto !important; + min-width: 100px; + font-size: 15px; + line-height: 1.6666667; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-tagsinput input:focus { + border: none; + box-shadow: none; +} +.bootstrap-tagsinput .twitter-typeahead { + width: auto; +} +.bootstrap-tagsinput .tt-menu { + margin-top: 5px; + min-width: 200px; +} +.bootstrap-tagsinput .tag { + margin: 1px 0 0 3px; + border: 0; + border-radius: .25em; + padding: 5px 11px; + padding-right: 30px; + float: left; + font-size: 15px; + line-height: 1.6666667; + font-weight: 400; + text-transform: none; + position: relative; + background-color: #18bc9c; + color: #fff; +} +.has-error .bootstrap-tagsinput .tag { + background-color: #e74c3c !important; +} +.bootstrap-tagsinput .tag [data-role="remove"] { + cursor: pointer; + color: inherit; + position: absolute; + top: 50%; + right: 11px; + line-height: 1; + margin-top: -5.5px; + opacity: 0.7; + filter: alpha(opacity=70); +} +.bootstrap-tagsinput .tag [data-role="remove"]:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.bootstrap-tagsinput .tag:before { + content: '\f02b'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bootstrap-tagsinput .tag [data-role="remove"]:after { + content: '\f00d'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: block; + font-size: 13px; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/integration/testdata/symfony_app/bin/console b/integration/testdata/symfony_app/bin/console new file mode 100755 index 00000000..c933dc53 --- /dev/null +++ b/integration/testdata/symfony_app/bin/console @@ -0,0 +1,17 @@ +#!/usr/bin/env php +=8.1", + "ext-pdo_sqlite": "*", + "doctrine/dbal": "^3.1", + "doctrine/doctrine-bundle": "^2.7", + "doctrine/doctrine-migrations-bundle": "^3.0", + "doctrine/orm": "^2.10", + "league/commonmark": "^2.1", + "symfony/apache-pack": "^1.0", + "symfony/asset": "^6.2", + "symfony/console": "^6.2", + "symfony/dotenv": "^6.2", + "symfony/expression-language": "^6.2", + "symfony/flex": "^2.0", + "symfony/form": "^6.2", + "symfony/framework-bundle": "^6.2", + "symfony/html-sanitizer": "^6.2", + "symfony/http-client": "^6.2", + "symfony/intl": "^6.2", + "symfony/mailer": "^6.2", + "symfony/monolog-bundle": "^3.7", + "symfony/polyfill-intl-messageformatter": "^1.12", + "symfony/runtime": "^6.2", + "symfony/security-bundle": "^6.2", + "symfony/string": "^6.2", + "symfony/translation": "^6.2", + "symfony/twig-bundle": "^6.2", + "symfony/validator": "^6.2", + "symfony/webpack-encore-bundle": "^1.13", + "symfony/yaml": "^6.2", + "twig/extra-bundle": "^3.3", + "twig/intl-extra": "^3.3", + "twig/markdown-extra": "^3.3" + }, + "require-dev": { + "dama/doctrine-test-bundle": "^7.0", + "doctrine/doctrine-fixtures-bundle": "^3.4", + "phpstan/phpstan": "^1.2", + "symfony/browser-kit": "^6.2", + "symfony/css-selector": "^6.2", + "symfony/debug-bundle": "^6.2", + "symfony/maker-bundle": "^1.36", + "symfony/phpunit-bridge": "^6.2", + "symfony/stopwatch": "^6.2", + "symfony/web-profiler-bundle": "^6.2" + }, + "config": { + "platform": { + "php": "8.1.0" + }, + "preferred-install": { + "*": "dist" + }, + "sort-packages": true, + "allow-plugins": { + "composer/package-versions-deprecated": true, + "symfony/flex": true, + "symfony/runtime": true + } + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "extra": { + "symfony": { + "allow-contrib": true, + "require": "6.2.*" + } + } +} diff --git a/integration/testdata/symfony_app/composer.lock b/integration/testdata/symfony_app/composer.lock new file mode 100644 index 00000000..02c1563f --- /dev/null +++ b/integration/testdata/symfony_app/composer.lock @@ -0,0 +1,8608 @@ +{ + "_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": "f20ad11409ce3b546aa9910c3130897b", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "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": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.3" + }, + "time": "2022-07-02T10:48:51+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "phpstan/phpstan": "^1.4.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "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 Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.8.0" + }, + "time": "2022-09-01T20:12:10+00:00" + }, + { + "name": "doctrine/common", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0 || ^3.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.4.3" + }, + "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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2022-10-09T11:47:59+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.5.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "10.0.0", + "jetbrains/phpstorm-stubs": "2022.2", + "phpstan/phpstan": "1.8.10", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.5.25", + "psalm/plugin-phpunit": "0.17.0", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.29.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.5.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2022-10-24T07:26:18+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "a2dcad48741c9d12fd6040398cf075025030096e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/a2dcad48741c9d12fd6040398cf075025030096e", + "reference": "a2dcad48741c9d12fd6040398cf075025030096e", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^2.13.1 || ^3.3.2", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.1 || ^8.0", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/config": "^4.4.3 || ^5.4 || ^6.0", + "symfony/console": "^4.4 || ^5.4 || ^6.0", + "symfony/dependency-injection": "^4.4.18 || ^5.4 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^4.4.22 || ^5.4 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/orm": "<2.11 || >=3.0", + "twig/twig": "<1.34 || >=2.0,<2.4" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "doctrine/orm": "^2.11 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", + "psalm/plugin-phpunit": "^0.16.1", + "psalm/plugin-symfony": "^3", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1", + "symfony/property-info": "^4.4 || ^5.4 || ^6.0", + "symfony/proxy-manager-bridge": "^4.4 || ^5.4 || ^6.0", + "symfony/security-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/twig-bridge": "^4.4 || ^5.4 || ^6.0", + "symfony/validator": "^4.4 || ^5.4 || ^6.0", + "symfony/web-profiler-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^4.4 || ^5.4 || ^6.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0", + "vimeo/psalm": "^4.7" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.7.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%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2022-10-23T09:47:06+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "3393f411ba25ade21969c33f2053220044854d01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/3393f411ba25ade21969c33f2053220044854d01", + "reference": "3393f411ba25ade21969c33f2053220044854d01", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/migrations": "^3.2", + "php": "^7.2|^8.0", + "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "doctrine/orm": "^2.6", + "doctrine/persistence": "^1.3||^2.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^8.0|^9.0", + "vimeo/psalm": "^4.11" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2022-02-01T18:08:07+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:51:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "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" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "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" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "61c6ef3a10b7df43c3b6388a184754f26e58700a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/61c6ef3a10b7df43c3b6388a184754f26e58700a", + "reference": "61c6ef3a10b7df43c3b6388a184754f26e58700a", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.3", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "php": "^7.4 || ^8.0", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^4.4.16 || ^5.4 || ^6.0", + "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0" + }, + "conflict": { + "doctrine/orm": "<2.12" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "doctrine/orm": "^2.12", + "doctrine/persistence": "^2 || ^3", + "doctrine/sql-formatter": "^1.0", + "ergebnis/composer-normalize": "^2.9", + "ext-pdo_sqlite": "*", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.1", + "phpunit/phpunit": "^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/process": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^4.4 || ^5.4 || ^6.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 4, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.5.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2022-08-04T14:29:49+00:00" + }, + { + "name": "doctrine/orm", + "version": "2.13.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "a5a6cc6630ce497290396d5f206887227820a634" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/a5a6cc6630ce497290396d5f206887227820a634", + "reference": "a5a6cc6630ce497290396d5f206887227820a634", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.12.1 || ^2.1.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3", + "doctrine/lexer": "^1.2.3", + "doctrine/persistence": "^2.4 || ^3", + "ext-ctype": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 2.0" + }, + "require-dev": { + "doctrine/annotations": "^1.13", + "doctrine/coding-standard": "^9.0.2 || ^10.0", + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/phpstan": "~1.4.10 || 1.9.2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" + } + }, + "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": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.13.4" + }, + "time": "2022-11-20T18:53:31+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/2a9c70a5e21f8968c5a46b79f819ea52f322080b", + "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/annotations": "<1.7 || >=2.0", + "doctrine/common": "<2.10" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/annotations": "^1.7", + "doctrine/coding-standard": "^10", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.8.8", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.29.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.1.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%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2022-11-18T14:10:19+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/25a06c7bf4c6b8218f47928654252863ffc890a5", + "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.1.3" + }, + "time": "2022-05-23T21:33:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2022-06-18T20:57:19+00:00" + }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.13", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "88354616f4cf4f6620910fd035e282173ba453e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/88354616f4cf4f6620910fd035e282173ba453e8", + "reference": "88354616f4cf4f6620910fd035e282173ba453e8", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0|^6.0" + }, + "conflict": { + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "replace": { + "ocramius/proxy-manager": "^2.1" + }, + "require-dev": { + "ext-phar": "*", + "symfony/phpunit-bridge": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "thanks": { + "name": "ocramius/proxy-manager", + "url": "https://github.com/Ocramius/ProxyManager" + } + }, + "autoload": { + "psr-4": { + "ProxyManager\\": "src/ProxyManager" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", + "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "support": { + "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.13" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2022-10-17T19:48:16+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "4.7.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "91aabc066d5620428120800c0eafc0411e441a62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/91aabc066d5620428120800c0eafc0411e441a62", + "reference": "91aabc066d5620428120800c0eafc0411e441a62", + "shasum": "" + }, + "require": { + "php": ">=7.4, <8.2" + }, + "require-dev": { + "doctrine/annotations": "^1.13.2", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^2.3.0", + "laminas/laminas-stdlib": "^3.6.1", + "phpunit/phpunit": "^9.5.10", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.13.1" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component" + }, + "type": "library", + "autoload": { + "files": [ + "polyfill/ReflectionEnumPolyfill.php" + ], + "psr-4": { + "Laminas\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas", + "laminasframework" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-11-21T01:32:31+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.7", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "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/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "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://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-11-03T17:29:46+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "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": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "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" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/uri", + "version": "6.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/a700b4656e4c54371b799ac61e300ab25a2d1d39", + "reference": "a700b4656e4c54371b799ac61e300ab25a2d1d39", + "shasum": "" + }, + "require": { + "ext-json": "*", + "league/uri-interfaces": "^2.3", + "php": "^8.1", + "psr/http-message": "^1.0.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.9.5", + "nyholm/psr7": "^1.5.1", + "php-http/psr7-integration-tests": "^1.1.1", + "phpbench/phpbench": "^1.2.6", + "phpstan/phpstan": "^1.8.5", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.1.1", + "phpstan/phpstan-strict-rules": "^1.4.3", + "phpunit/phpunit": "^9.5.24", + "psr/http-factory": "^1.0.1" + }, + "suggest": { + "ext-fileinfo": "Needed to create Data URI from a filepath", + "ext-intl": "Needed to improve host validation", + "league/uri-components": "Needed to easily manipulate URI objects", + "psr/http-factory": "Needed to use the URI factory" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri/issues", + "source": "https://github.com/thephpleague/uri/tree/6.8.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2022-09-13T19:58:47+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19", + "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan-phpunit": "^0.12.19", + "phpstan/phpstan-strict-rules": "^0.12.9", + "phpunit/phpunit": "^8.5.15 || ^9.5" + }, + "suggest": { + "ext-intl": "to use the IDNA feature", + "symfony/intl": "to use the IDNA feature via Symfony Polyfill" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interface for URI representation", + "homepage": "http://github.com/thephpleague/uri-interfaces", + "keywords": [ + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-interfaces/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2021-06-28T04:27:21+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.7.6", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + }, + "time": "2022-08-18T16:18:26+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "305444bc6fb6c89e490f4b34fa6e979584d7fa81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/305444bc6fb6c89e490f4b34fa6e979584d7fa81", + "reference": "305444bc6fb6c89e490f4b34fa6e979584d7fa81", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^9.5.16", + "predis/predis": "^1.1", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T12:00:55+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.3" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.8" + }, + "time": "2022-09-12T23:36:20+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "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" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "symfony/apache-pack", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/apache-pack.git", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/apache-pack/zipball/3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "shasum": "" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for Apache support in Symfony", + "support": { + "issues": "https://github.com/symfony/apache-pack/issues", + "source": "https://github.com/symfony/apache-pack/tree/master" + }, + "time": "2017-12-12T01:46:35+00:00" + }, + { + "name": "symfony/asset", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "a0ebf67f56f028217256d5f99438175430b3836c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/a0ebf67f56f028217256d5f99438175430b3836c", + "reference": "a0ebf67f56f028217256d5f99438175430b3836c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/http-foundation": "<5.4" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "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": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v6.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": "2022-10-19T16:13:28+00:00" + }, + { + "name": "symfony/cache", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "64cb231dfb25677097d18503d1ad4d016b19f19c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/64cb231dfb25677097d18503d1ad4d016b19f19c", + "reference": "64cb231dfb25677097d18503d1ad4d016b19f19c", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2|^3", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^6.2" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.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": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v6.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": "2022-11-24T11:58:37+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2eab7fa459af6d75c6463e63e633b667a9b761d3", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/config", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", + "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "75d4749d9620a8fa21a2d2847800a84b5c4e7682" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/75d4749d9620a8fa21a2d2847800a84b5c4e7682", + "reference": "75d4749d9620a8fa21a2d2847800a84b5c4e7682", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-29T16:44:51+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "bb328032f400961be5db5aed87fac9742b506f80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/bb328032f400961be5db5aed87fac9742b506f80", + "reference": "bb328032f400961be5db5aed87fac9742b506f80", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/service-contracts": "^1.1.6|^2.0|^3.0", + "symfony/var-exporter": "^6.2" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.2", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v6.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": "2022-11-25T07:37:13+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "11c13fff0cd2fe1528ea1e60638fb23c9a0c748f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/11c13fff0cd2fe1528ea1e60638fb23c9a0c748f", + "reference": "11c13fff0cd2fe1528ea1e60638fb23c9a0c748f", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1.2|^2", + "doctrine/persistence": "^2|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.7.4", + "phpunit/phpunit": "<5.4.3", + "symfony/cache": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/form": "<5.4", + "symfony/http-kernel": "<6.2", + "symfony/messenger": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-bundle": "<5.4", + "symfony/security-core": "<6.0", + "symfony/validator": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "doctrine/collections": "^1.0|^2.0", + "doctrine/data-fixtures": "^1.1", + "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/orm": "^2.7.4", + "psr/log": "^1|^2|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/doctrine-messenger": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4.9|^6.0.9", + "symfony/http-kernel": "^6.2", + "symfony/messenger": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/proxy-manager-bridge": "^5.4|^6.0", + "symfony/security-core": "^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.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": "2022-11-28T12:28:19+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "bdc3766f31a0944cadfcdf52170ad3fb80b1540b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/bdc3766f31a0944cadfcdf52170ad3fb80b1540b", + "reference": "bdc3766f31a0944cadfcdf52170ad3fb80b1540b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/process": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "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": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v6.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": "2022-09-30T13:41:10+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "d9894724a9d20afd3329e36b36e45835b5c2ab3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d9894724a9d20afd3329e36b36e45835b5c2ab3e", + "reference": "d9894724a9d20afd3329e36b36e45835b5c2ab3e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "e1f77901361f287c5b7d99b80c9ea8d3afe7d2cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/e1f77901361f287c5b7d99b80c9ea8d3afe7d2cd", + "reference": "e1f77901361f287c5b7d99b80c9ea8d3afe7d2cd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/50b2523c874605cf3d4acf7a9e2b30b6a440a016", + "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-20T13:01:27+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-09T08:55:40+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "0763da1bdcce1d48c06778d48249905c26d34a72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/0763da1bdcce1d48c06778d48249905c26d34a72", + "reference": "0763da1bdcce1d48c06778d48249905c26d34a72", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-08-07T09:39:47+00:00" + }, + { + "name": "symfony/form", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "31a25bd415ee56547efaaa9ebd84d1d13e6c8672" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/31a25bd415ee56547efaaa9ebd84d1d13e6c8672", + "reference": "31a25bd415ee56547efaaa9ebd84d1d13e6c8672", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/options-resolver": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/error-handler": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<1.1.7", + "symfony/twig-bridge": "<5.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/security-core": "^6.2", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "symfony/security-core": "For hashing users passwords.", + "symfony/security-csrf": "For protecting forms against CSRF attacks.", + "symfony/twig-bridge": "For templating with Twig.", + "symfony/validator": "For form validation." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v6.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": "2022-11-28T12:28:19+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "e6545946a969a05b81a24e2528e3ac74659b61df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/e6545946a969a05b81a24e2528e3ac74659b61df", + "reference": "e6545946a969a05b81a24e2528e3ac74659b61df", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^5.4|^6.0" + }, + "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<5.4", + "symfony/console": "<5.4", + "symfony/dom-crawler": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.1", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<5.4", + "symfony/web-profiler-bundle": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13.1", + "doctrine/persistence": "^1.3|^2|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/mime": "^6.2", + "symfony/notifier": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/semaphore": "^5.4|^6.0", + "symfony/serializer": "^6.1", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/twig": "^2.10|^3.0" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v6.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": "2022-11-28T10:27:48+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "28d19124099e860ef52da06ae251e37738b750fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/28d19124099e860ef52da06ae251e37738b750fe", + "reference": "28d19124099e860ef52da06ae251e37738b750fe", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5", + "masterminds/html5": "^2.7.2", + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/tree/v6.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": "2022-05-06T15:18:34+00:00" + }, + { + "name": "symfony/http-client", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.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": "2022-11-14T10:13:36+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/fd038f08c623ab5d22b26e9ba35afe8c79071800", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.1.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": "2022-04-22T07:30:54+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "edc56ed49a2955383d59e9b7043fd3bbc26f1854" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/edc56ed49a2955383d59e9b7043fd3bbc26f1854", + "reference": "edc56ed49a2955383d59e9b7043fd3bbc26f1854", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-21T16:03:04+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "e008ce658dbd995b3c3ab3d9be0555ea3b11867e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e008ce658dbd995b3c3ab3d9be0555ea3b11867e", + "reference": "e008ce658dbd995b3c3ab3d9be0555ea3b11867e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-30T17:37:58+00:00" + }, + { + "name": "symfony/intl", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "04726ae6cec43582f7dfbfc67a313d1ecdd81c0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/04726ae6cec43582f7dfbfc67a313d1ecdd81c0f", + "reference": "04726ae6cec43582f7dfbfc67a313d1ecdd81c0f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "7b355fca167fa5302c77bccdfa0af4d7abc6bd8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b355fca167fa5302c77bccdfa0af4d7abc6bd8c", + "reference": "7b355fca167fa5302c77bccdfa0af4d7abc6bd8c", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "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": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.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": "2022-11-28T17:18:31+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/1e8005a7cbd79fb824ad81308ef2a76592a08bc0", + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-28T12:28:19+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "a549937e3d2da2753fdf816b05cc4fec8e5d68da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/a549937e3d2da2753fdf816b05cc4fec8e5d68da", + "reference": "a549937e3d2da2753fdf816b05cc4fec8e5d68da", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1|^2|^3", + "php": ">=8.1", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/http-foundation": "<5.4", + "symfony/security-core": "<6.0" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/security-core": "^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v6.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": "2022-10-20T07:00:24+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.22 || ^2.0 || ^3.0", + "php": ">=7.1.3", + "symfony/config": "~4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0", + "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "symfony/console": "~4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.2 || ^6.0", + "symfony/yaml": "~4.4 || ^5.0 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "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 MonologBundle", + "homepage": "https://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T14:24:36+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "d28f02acde71ff75e957082cd36e973df395f626" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", + "reference": "d28f02acde71ff75e957082cd36e973df395f626", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "955ce6bdbb53933897043ad00776a88ba916208a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/955ce6bdbb53933897043ad00776a88ba916208a", + "reference": "955ce6bdbb53933897043ad00776a88ba916208a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/security-core": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/security-core": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v6.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": "2022-09-01T02:03:18+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c", + "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "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 polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-messageformatter", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-messageformatter.git", + "reference": "861fe322b162bc23822a1ee0bd62d5c7eef8c6c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-messageformatter/zipball/861fe322b162bc23822a1ee0bd62d5c7eef8c6c7", + "reference": "861fe322b162bc23822a1ee0bd62d5c7eef8c6c7", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\MessageFormatter\\": "" + }, + "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 MessageFormatter class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "messageformatter", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-messageformatter/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/property-access", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "ed937ca8e103fdcefb43020c8784f87d3e5d09c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/ed937ca8e103fdcefb43020c8784f87d3e5d09c3", + "reference": "ed937ca8e103fdcefb43020c8784f87d3e5d09c3", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/property-info": "^5.4|^6.0" + }, + "require-dev": { + "symfony/cache": "^5.4|^6.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v6.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": "2022-10-28T16:24:13+00:00" + }, + { + "name": "symfony/property-info", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "ddfa5c49812d7bcfea21f9ad5341092daa82e4cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ddfa5c49812d7bcfea21f9ad5341092daa82e4cc", + "reference": "ddfa5c49812d7bcfea21f9ad5341092daa82e4cc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v6.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": "2022-11-25T07:37:13+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/857ac6f4df371470fbdefa2f5967a2618dbf1852", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-09T13:28:29+00:00" + }, + { + "name": "symfony/runtime", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "45a63a5885f92741c8def9cbd81c925e6b5b891d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/45a63a5885f92741c8def9cbd81c925e6b5b891d", + "reference": "45a63a5885f92741c8def9cbd81c925e6b5b891d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.1" + }, + "conflict": { + "symfony/dotenv": "<5.4" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/console": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "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": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/runtime/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "25494608506638bcc004dcca6a36682aa425f1ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/25494608506638bcc004dcca6a36682aa425f1ea", + "reference": "25494608506638bcc004dcca6a36682aa425f1ea", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.1", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/password-hasher": "^5.4|^6.0", + "symfony/security-core": "^6.2", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^6.2" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/console": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/ldap": "<5.4", + "symfony/twig-bundle": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "symfony/asset": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/ldap": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bridge": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v6.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": "2022-11-30T13:46:03+00:00" + }, + { + "name": "symfony/security-core", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14", + "reference": "aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^1.1|^2|^3", + "symfony/password-hasher": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.6|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<5.4", + "symfony/http-foundation": "<5.4", + "symfony/ldap": "<5.4", + "symfony/security-guard": "<5.4", + "symfony/validator": "<5.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/ldap": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "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 Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v6.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": "2022-11-18T07:19:04+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "12d6ef4695f522566639e58b929d90e25b509379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/12d6ef4695f522566639e58b929d90e25b509379", + "reference": "12d6ef4695f522566639e58b929d90e25b509379", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/security-core": "^5.4|^6.0" + }, + "conflict": { + "symfony/http-foundation": "<5.4" + }, + "require-dev": { + "symfony/http-foundation": "^5.4|^6.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "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 Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v6.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": "2022-11-21T18:36:40+00:00" + }, + { + "name": "symfony/security-http", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "14c79cf944acf24511b22eca631f5524b3d091a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/14c79cf944acf24511b22eca631f5524b3d091a8", + "reference": "14c79cf944acf24511b22eca631f5524b3d091a8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/security-core": "^6.0" + }, + "conflict": { + "symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9", + "symfony/security-bundle": "<5.4", + "symfony/security-csrf": "<5.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "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 Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v6.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": "2022-11-30T17:18:15+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.1.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": "2022-05-30T19:18:58+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/266636bb8f3fbdccc302491df7b3a1b9a8c238a7", + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.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": "2022-09-28T16:00:52+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/145702685e0d12f81d755c71127bfff7582fdd36", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-30T17:13:47+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c08de62caead8357244efcb809d0b1a2584f2198" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c08de62caead8357244efcb809d0b1a2584f2198", + "reference": "c08de62caead8357244efcb809d0b1a2584f2198", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.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": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "45f9070b3409871237782135330acd7cc7d39b42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/45f9070b3409871237782135330acd7cc7d39b42", + "reference": "45f9070b3409871237782135330acd7cc7d39b42", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.4", + "symfony/form": "<6.1", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<6.2", + "symfony/mime": "<6.2", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "egulias/email-validator": "^2.1.10|^3", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^6.1", + "symfony/html-sanitizer": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^5.4|^6.0", + "symfony/serializer": "^6.2", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/html-sanitizer": "For using the HtmlSanitizerExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v6.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": "2022-11-04T07:42:34+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "d1dfb3c8fbe7e70cef86a8940f6a86544c99e9b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d1dfb3c8fbe7e70cef86a8940f6a86544c99e9b1", + "reference": "d1dfb3c8fbe7e70cef86a8940f6a86544c99e9b1", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.1", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/twig-bridge": "^6.2", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/framework-bundle": "<5.4", + "symfony/translation": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "symfony/asset": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v6.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": "2022-09-13T06:25:34+00:00" + }, + { + "name": "symfony/validator", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "0f74ad1cab71f5899dca8233db774a50f8656de0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/0f74ad1cab71f5899dca8233db774a50f8656de0", + "reference": "0f74ad1cab71f5899dca8233db774a50f8656de0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/annotations": "<1.13", + "doctrine/lexer": "<1.1", + "phpunit/phpunit": "<5.4.3", + "symfony/dependency-injection": "<5.4", + "symfony/expression-language": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/intl": "<5.4", + "symfony/property-info": "<5.4", + "symfony/translation": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13", + "egulias/email-validator": "^2.1.10|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v6.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": "2022-11-25T08:42:40+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "6228b11059d7b279be699682f164a107ba9a268d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6228b11059d7b279be699682f164a107ba9a268d", + "reference": "6228b11059d7b279be699682f164a107ba9a268d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-28T13:41:56+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "0437f26ca0c648071cc15ddacd26152cc65f4cd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0437f26ca0c648071cc15ddacd26152cc65f4cd6", + "reference": "0437f26ca0c648071cc15ddacd26152cc65f4cd6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.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": "2022-11-25T08:33:31+00:00" + }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "bb399930c0299866258b616a74a27b50b94c5d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/bb399930c0299866258b616a74a27b50b94c5d45", + "reference": "bb399930c0299866258b616a74a27b50b94c5d45", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/asset": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25.0", + "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.3 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/web-link": "^4.4 || ^5.0 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/webpack-encore", + "url": "https://github.com/symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Webpack Encore!", + "support": { + "issues": "https://github.com/symfony/webpack-encore-bundle/issues", + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-18T15:21:06+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "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": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.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": "2022-11-25T19:00:27+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "2e58256b0e9fe52f30149347c0547e4633304765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/2e58256b0e9fe52f30149347c0547e4633304765", + "reference": "2e58256b0e9fe52f30149347c0547e4633304765", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^2.12|^3.0", + "twig/html-extra": "^2.12|^3.0", + "twig/inky-extra": "^2.12|^3.0", + "twig/intl-extra": "^2.12|^3.0", + "twig/markdown-extra": "^2.12|^3.0", + "twig/string-extra": "^2.12|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-01-04T13:58:53+00:00" + }, + { + "name": "twig/intl-extra", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/twigphp/intl-extra.git", + "reference": "151e50fad9c7915bd56f0adf3f0cb3c47e6ed28a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/151e50fad9c7915bd56f0adf3f0cb3c47e6ed28a", + "reference": "151e50fad9c7915bd56f0adf3f0cb3c47e6ed28a", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/intl": "^4.4|^5.0|^6.0", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Intl", + "homepage": "https://twig.symfony.com", + "keywords": [ + "intl", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/intl-extra/tree/v3.4.2" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-06-10T08:33:05+00:00" + }, + { + "name": "twig/markdown-extra", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/markdown-extra.git", + "reference": "25ed505b6ffd3b00f922ca682489dfbaf44eb1f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/25ed505b6ffd3b00f922ca682489dfbaf44eb1f7", + "reference": "25ed505b6ffd3b00f922ca682489dfbaf44eb1f7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "erusev/parsedown": "^1.7", + "league/commonmark": "^1.0|^2.0", + "league/html-to-markdown": "^4.8|^5.0", + "michelf/php-markdown": "^1.8", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\Markdown\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Markdown", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "markdown", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/markdown-extra/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-01-29T15:34:05+00:00" + }, + { + "name": "twig/twig", + "version": "v3.4.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58", + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.4.3" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-09-28T08:42:51+00:00" + } + ], + "packages-dev": [ + { + "name": "dama/doctrine-test-bundle", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/dmaicher/doctrine-test-bundle.git", + "reference": "279a554556bed387a6aaae0c13cc982d4874773b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/279a554556bed387a6aaae0c13cc982d4874773b", + "reference": "279a554556bed387a6aaae0c13cc982d4874773b", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.3", + "doctrine/doctrine-bundle": "^2.2.2", + "ext-json": "*", + "php": "^7.3 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0" + }, + "require-dev": { + "behat/behat": "^3.0", + "doctrine/cache": "^1.12", + "phpstan/phpstan": "^1.2", + "phpunit/phpunit": "^8.0 || ^9.0", + "symfony/phpunit-bridge": "^6.0", + "symfony/process": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^4.4 || ^5.4 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Maicher", + "email": "mail@dmaicher.de" + } + ], + "description": "Symfony bundle to isolate doctrine database tests and improve test performance", + "keywords": [ + "doctrine", + "isolation", + "performance", + "symfony", + "tests" + ], + "support": { + "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v7.1.1" + }, + "time": "2022-07-01T12:06:31+00:00" + }, + { + "name": "doctrine/data-fixtures", + "version": "1.5.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ba37bfb776de763c5bf04a36d074cd5f5a083c42", + "reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.13|^3.0", + "doctrine/persistence": "^1.3.3|^2.0|^3.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<2.13", + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "doctrine/dbal": "^2.13 || ^3.0", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.7.0", + "ext-sqlite3": "*", + "jangregor/phpstan-prophecy": "^1", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^5.0 || ^6.0", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/1.5.3" + }, + "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%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2022-04-19T10:01:44+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.4.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/601988c5b46dbd20a0f886f967210aba378a6fd5", + "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.3", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.6.0", + "doctrine/persistence": "^1.3.7|^2.0|^3.0", + "php": "^7.1 || ^8.0", + "symfony/config": "^3.4|^4.3|^5.0|^6.0", + "symfony/console": "^3.4|^4.3|^5.0|^6.0", + "symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0", + "symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0", + "symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "^1.4.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "symfony/phpunit-bridge": "^6.0.8", + "vimeo/psalm": "^4.22" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2022-04-28T17:58:29+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "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": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + }, + "time": "2022-11-12T15:38:23+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.9.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d6fdf01c53978b6429f1393ba4afeca39cc68afa", + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.9.2" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-11-10T09:56:11+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "5602fcc9a2a696f1743050ffcafa30741da94227" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/5602fcc9a2a696f1743050ffcafa30741da94227", + "reference": "5602fcc9a2a696f1743050ffcafa30741da94227", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "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": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/91c342ffc99283c43653ed8eb47bc2a94db7f398", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "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": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.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": "2022-08-26T05:51:22+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "edf89d327c6dce1224d498421715e41257d85994" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/edf89d327c6dce1224d498421715e41257d85994", + "reference": "edf89d327c6dce1224d498421715e41257d85994", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=8.1", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/twig-bridge": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4" + }, + "require-dev": { + "symfony/config": "^5.4|^6.0", + "symfony/web-profiler-bundle": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v6.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": "2022-09-12T16:11:19+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c079db42bed39928fc77a24307cbfff7ac7757f7", + "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v6.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": "2022-11-02T09:08:04+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.48.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/2e428e8432e9879187672fe08f1cc335e2a31dd6", + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^4.11", + "php": ">=8.0", + "symfony/config": "^5.4.7|^6.0", + "symfony/console": "^5.4.7|^6.0", + "symfony/dependency-injection": "^5.4.7|^6.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^5.4.7|^6.0", + "symfony/finder": "^5.4.3|^6.0", + "symfony/framework-bundle": "^5.4.7|^6.0", + "symfony/http-kernel": "^5.4.7|^6.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.4", + "doctrine/orm": "<2.10", + "symfony/doctrine-bridge": "<5.4" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.4", + "doctrine/orm": "^2.10.0", + "symfony/http-client": "^5.4.7|^6.0", + "symfony/phpunit-bridge": "^5.4.7|^6.0", + "symfony/polyfill-php80": "^1.16.0", + "symfony/process": "^5.4.7|^6.0", + "symfony/security-core": "^5.4.7|^6.0", + "symfony/yaml": "^5.4.3|^6.0", + "twig/twig": "^2.0|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.48.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-14T10:48:46+00:00" + }, + { + "name": "symfony/phpunit-bridge", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/1bd3b17db6d2ec284efbdc916600e880d6d858df", + "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "conflict": { + "phpunit/phpunit": "<7.5|9.1.2" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3.0", + "symfony/error-handler": "^5.4|^6.0" + }, + "suggest": { + "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + }, + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", + "extra": { + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Bridge\\PhpUnit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides utilities for PHPUnit, especially user deprecation notices management", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.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": "2022-11-18T19:08:09+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "94d1b790e3113c9c65b87e27325ca321f02afb2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/94d1b790e3113c9c65b87e27325ca321f02afb2f", + "reference": "94d1b790e3113c9c65b87e27325ca321f02afb2f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/http-kernel": "^6.1", + "symfony/routing": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/form": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4" + }, + "require-dev": { + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.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": "2022-11-21T16:07:56+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.1", + "ext-pdo_sqlite": "*" + }, + "platform-dev": [], + "platform-overrides": { + "php": "8.1.0" + }, + "plugin-api-version": "2.3.0" +} diff --git a/integration/testdata/symfony_app/config/bundles.php b/integration/testdata/symfony_app/config/bundles.php new file mode 100644 index 00000000..5df8bc94 --- /dev/null +++ b/integration/testdata/symfony_app/config/bundles.php @@ -0,0 +1,17 @@ + ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], +]; diff --git a/integration/testdata/symfony_app/config/packages/cache.yaml b/integration/testdata/symfony_app/config/packages/cache.yaml new file mode 100644 index 00000000..6899b720 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/integration/testdata/symfony_app/config/packages/dama_doctrine_test_bundle.yaml b/integration/testdata/symfony_app/config/packages/dama_doctrine_test_bundle.yaml new file mode 100644 index 00000000..3482cbae --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/dama_doctrine_test_bundle.yaml @@ -0,0 +1,5 @@ +when@test: + dama_doctrine_test: + enable_static_connection: true + enable_static_meta_data_cache: true + enable_static_query_cache: true diff --git a/integration/testdata/symfony_app/config/packages/debug.yaml b/integration/testdata/symfony_app/config/packages/debug.yaml new file mode 100644 index 00000000..ad874afd --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/debug.yaml @@ -0,0 +1,5 @@ +when@dev: + debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/integration/testdata/symfony_app/config/packages/deprecations.yaml b/integration/testdata/symfony_app/config/packages/deprecations.yaml new file mode 100644 index 00000000..d4254d01 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/deprecations.yaml @@ -0,0 +1,9 @@ +when@prod: + # As of Symfony 5.1, deprecations are logged in the dedicated "deprecation" channel when it exists + #monolog: + # channels: [deprecation] + # handlers: + # deprecation: + # type: stream + # channels: [deprecation] + # path: php://stderr diff --git a/integration/testdata/symfony_app/config/packages/doctrine.yaml b/integration/testdata/symfony_app/config/packages/doctrine.yaml new file mode 100644 index 00000000..2fce576c --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/doctrine.yaml @@ -0,0 +1,43 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '14' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + type: attribute + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/integration/testdata/symfony_app/config/packages/doctrine_migrations.yaml b/integration/testdata/symfony_app/config/packages/doctrine_migrations.yaml new file mode 100644 index 00000000..29231d94 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' + enable_profiler: false diff --git a/integration/testdata/symfony_app/config/packages/framework.yaml b/integration/testdata/symfony_app/config/packages/framework.yaml new file mode 100644 index 00000000..51bebaba --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/framework.yaml @@ -0,0 +1,35 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + csrf_protection: true + http_method_override: false + handle_all_throwables: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native + + # When using the HTTP Cache, ESI allows to render page fragments separately + # and with different cache configurations for each fragment + # https://symfony.com/doc/current/http_cache/esi.html + esi: true + fragments: true + + php_errors: + log: true + + # The 'ide' option turns all of the file paths in an exception page + # into clickable links that open the given file using your favorite IDE. + # When 'ide' is set to null the file is opened in your web browser. + # See https://symfony.com/doc/current/reference/configuration/framework.html#ide + ide: null + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/integration/testdata/symfony_app/config/packages/html_sanitizer.yaml b/integration/testdata/symfony_app/config/packages/html_sanitizer.yaml new file mode 100644 index 00000000..4978fb51 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/html_sanitizer.yaml @@ -0,0 +1,5 @@ +framework: + html_sanitizer: + sanitizers: + default: + allow_safe_elements: true diff --git a/integration/testdata/symfony_app/config/packages/mailer.yaml b/integration/testdata/symfony_app/config/packages/mailer.yaml new file mode 100644 index 00000000..58a03081 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/mailer.yaml @@ -0,0 +1,15 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' + +when@dev: + framework: + mailer: + # this disables delivery of messages entirely + dsn: 'null://null' + +when@test: + framework: + mailer: + # this disables delivery of messages entirely + dsn: 'null://null' diff --git a/integration/testdata/symfony_app/config/packages/monolog.yaml b/integration/testdata/symfony_app/config/packages/monolog.yaml new file mode 100644 index 00000000..bb524db0 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/monolog.yaml @@ -0,0 +1,61 @@ +monolog: + channels: + - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists + +when@dev: + monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] + +when@test: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [ 404, 405 ] + channels: [ "!event" ] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + +when@prod: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [ 404, 405 ] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: php://stderr + level: debug + formatter: monolog.formatter.json + console: + type: console + process_psr_3_messages: false + channels: [ "!event", "!doctrine" ] + deprecation: + type: stream + channels: [deprecation] + path: php://stderr diff --git a/integration/testdata/symfony_app/config/packages/routing.yaml b/integration/testdata/symfony_app/config/packages/routing.yaml new file mode 100644 index 00000000..4b766ce5 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/routing.yaml @@ -0,0 +1,12 @@ +framework: + router: + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/integration/testdata/symfony_app/config/packages/security.yaml b/integration/testdata/symfony_app/config/packages/security.yaml new file mode 100644 index 00000000..4e90936e --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/security.yaml @@ -0,0 +1,94 @@ +security: + password_hashers: + # Our user class and the algorithm we'll use to encode passwords + # 'auto' means to let Symfony choose the best possible password hasher (Argon2 or Bcrypt) + # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' + + providers: + # https://symfony.com/doc/current/security/user_provider.html + # In this example, users are stored via Doctrine in the database + # To see the users at src/App/DataFixtures/ORM/LoadFixtures.php + # To load users from somewhere else: https://symfony.com/doc/current/security/user_provider.html#creating-a-custom-user-provider + database_users: + entity: { class: App\Entity\User, property: username } + + # https://symfony.com/doc/current/security.html#a-authentication-firewalls + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + + main: + # this firewall does not have a 'pattern' option because it applies to all URLs + lazy: true + provider: database_users + + # This allows the user to login by submitting a username and password + # Reference: https://symfony.com/doc/current/security/form_login_setup.html + form_login: + # The route name that the login form submits to + check_path: security_login + # The name of the route where the login form lives + # When the user tries to access a protected page, they are redirected here + login_path: security_login + # Secure the login form against CSRF + # Reference: https://symfony.com/doc/current/security/csrf.html + enable_csrf: true + # The page users are redirect to when there is no previous page stored in the + # session (for example when the users access directly to the login page). + default_target_path: blog_index + + # This option allows users to choose to stay logged in for longer than + # the session lasts using a cookie. Reference: https://symfony.com/doc/current/security/remember_me.html + remember_me: + secret: '%kernel.secret%' # required + lifetime: 604800 # 1 week in seconds + # by default, the feature is enabled by checking a checkbox in the + # login form , uncomment the following line to always enable it. + #always_remember_me: true + + logout: + # The route name the user can go to in order to logout + path: security_logout + # The name of the route to redirect to after logging out + target: homepage + + # Secure the logout against CSRF + csrf_parameter: logout + csrf_token_generator: security.csrf.token_manager + + # needed because in tests we redefine the 'main' firewall to use + # HTTP Basic instead of the login form, so this firewall has + # multiple authenticators + # See https://symfony.com/doc/current/security/experimental_authenticators.html#configuring-the-authentication-entry-point + entry_point: 'form_login' + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # this is a catch-all for the admin area + # additional security lives in the controllers + - { path: '^/(%app_locales%)/admin', roles: ROLE_ADMIN } + + role_hierarchy: + ROLE_ADMIN: ROLE_USER + +when@test: + # this configuration simplifies testing URLs protected by the security mechanism + # See https://symfony.com/doc/current/testing/http_authentication.html + security: + password_hashers: + # By default, password hashers are resource intensive and take time. This is + # important to generate secure password hashes. In tests however, secure hashes + # are not important, waste resources and increase test times. The following + # reduces the work factor to the lowest possible values. + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: + algorithm: auto + cost: 4 # Lowest possible value for bcrypt + time_cost: 3 # Lowest possible value for argon + memory_cost: 10 # Lowest possible value for argon + + firewalls: + main: + http_basic: ~ diff --git a/integration/testdata/symfony_app/config/packages/translation.yaml b/integration/testdata/symfony_app/config/packages/translation.yaml new file mode 100644 index 00000000..2b1f685c --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/translation.yaml @@ -0,0 +1,9 @@ +# See https://symfony.com/doc/current/translation.html +framework: + default_locale: '%locale%' + translator: + # Translations are defined using the ICU Message Format + # See https://symfony.com/doc/current/translation/message_format.html + default_path: '%kernel.project_dir%/translations' + fallbacks: + - '%locale%' diff --git a/integration/testdata/symfony_app/config/packages/twig.yaml b/integration/testdata/symfony_app/config/packages/twig.yaml new file mode 100644 index 00000000..3185fbce --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/twig.yaml @@ -0,0 +1,9 @@ +twig: + default_path: '%kernel.project_dir%/templates' + form_themes: + - 'form/layout.html.twig' + - 'form/fields.html.twig' + +when@test: + twig: + strict_variables: true diff --git a/integration/testdata/symfony_app/config/packages/validator.yaml b/integration/testdata/symfony_app/config/packages/validator.yaml new file mode 100644 index 00000000..1bdc10ec --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/validator.yaml @@ -0,0 +1,14 @@ +framework: + validation: + enable_annotations: true + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + auto_mapping: + App\Entity\: [] + +when@test: + framework: + validation: + not_compromised_password: false diff --git a/integration/testdata/symfony_app/config/packages/web_profiler.yaml b/integration/testdata/symfony_app/config/packages/web_profiler.yaml new file mode 100644 index 00000000..b9461110 --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/web_profiler.yaml @@ -0,0 +1,17 @@ +when@dev: + web_profiler: + toolbar: true + intercept_redirects: false + + framework: + profiler: + only_exceptions: false + collect_serializer_data: true + +when@test: + web_profiler: + toolbar: false + intercept_redirects: false + + framework: + profiler: { collect: false } diff --git a/integration/testdata/symfony_app/config/packages/webpack_encore.yaml b/integration/testdata/symfony_app/config/packages/webpack_encore.yaml new file mode 100644 index 00000000..de1a214c --- /dev/null +++ b/integration/testdata/symfony_app/config/packages/webpack_encore.yaml @@ -0,0 +1,45 @@ +webpack_encore: + # The path where Encore is building the assets - i.e. Encore.setOutputPath() + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # Set attributes that will be rendered on all script and link tags + script_attributes: + defer: true + # Uncomment (also under link_attributes) if using Turbo Drive + # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change + # 'data-turbo-track': reload + # link_attributes: + # Uncomment if using Turbo Drive + # 'data-turbo-track': reload + + # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # Preload all rendered script and link tags automatically via the HTTP/2 Link header + # preload: true + + # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data + # strict_mode: false + + # If you have multiple builds: + # builds: + # pass "frontend" as the 3rg arg to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + + # frontend: '%kernel.project_dir%/public/frontend/build' + + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Put in config/packages/prod/webpack_encore.yaml + # cache: true + +#when@prod: +# webpack_encore: +# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) +# # Available in version 1.2 +# cache: true + +#when@test: +# webpack_encore: +# strict_mode: false diff --git a/integration/testdata/symfony_app/config/preload.php b/integration/testdata/symfony_app/config/preload.php new file mode 100644 index 00000000..5ebcdb21 --- /dev/null +++ b/integration/testdata/symfony_app/config/preload.php @@ -0,0 +1,5 @@ +3z~!I$JmtOsSwwj|54Y|DzH4uK&xHh`gK zFtlXHaYay4lBTVhZqn@|>89EAm2S69`r7o}?%!_yZJTzxZMWNYw{7~$w&^3gY1)6& z?f=~~07+l~%)KMh+t^q3+#x{#GxMFtJ?GqW&OLqVajRnLGqzJQDtaz?2i_K>c} zVzDha4&%t;=)sY}5yw&g*H!G`s(@Q8M=}B>R%v?!C9G`as2) zE}DTW1zyP1F8$QOLyu3jdMc{`D4v>ncm$JB4)#wNP1Y$6-)PILC)*RG{yBYb?J6xK!+-P^e^^bI+Q$d< z8c+lJ;gcs$KlS86NSc21v1JM^Kkw0#Pfi_s_yl9_<%{prpPV{6_2krv!&9dl1($uj z&V+#BbY$xBDQLCB2Tvb9cw~wM<_P=TlO*uRP8@sc*ulpiKdT=*ethc4F(|-xH&bU9 zz2RnRPtf*W@b~DqvhP^3XWR1=T`}Ta_hJ#2?0Lhh*!27Pmh?N{nxA_y?XV+ONq{La zHEdj#hq1|n`$wk6$BvFqj2+Dl9}0YJPk&3%0{Vp?XW4^zzl&*6bL# zW}-72GE7@A+42Qj{H-{yFcgca>XoHn)UIVH(j*c3ufUw z+>RsQtEY|~_u0>%LRQNI0BYvC0KyGixBQ&#g@DaKKIgG%t24{*dszWfjCEbvw!##- zgGVNhPUc!NMcyuz@W}BXUo?Fxz!$You4au(-Tt*#6!ci_Tk7K9z#O%2P}*L*{;BrY zuBo4W)#)y}^tBdDS-VWDOLw~y$(`-B<}y87@a;PBR};pKTCI*yTeY^LV#B#B zz}n4BvaYP1fX>sjPchYZpZ34CztjF!`%CT5v_H~*U;8iGZ)m@&eMbBD+RteJPWzPh zgW4yw@6!I2_O05#U~m7b`L{5iP9myt^Han7q46?0I33V(1ht3&hQ3(YxGuQ*1&V&LrsQ_sU-b_~bz zTz#f!%zGu>HOsE;m?hkfUBS!jcdMiu1%1YJ>`S^aUACuGp2RIf$m}$I- zpD|wa7_@a-tb+aw93Z`HxkcTzi$(UJUcoBsP(<@S_`CgVv^(!4aN^Kx#G z4inXVy^Idm?gkxr(T&ckM=Yb_SO)k8ei-G#(Y?nO4+~#z*xhZ4$H~t;VadB+1Mf(27^B zOhM<=U?8*$B_}E`(dkbt4{m3o2#&WP-H}&Ex{BGg#=Pjq=;U&glt27q$hA(9+S7~6kAPL5* z8+wQYFM(8wpe^<(}z6E-|Qo4d@SY0a4Bf?o1f zD&)-9rd|<}oCgu3O^f235TwTF!o@@~mg>5?Kd11++c0}KYtq&@(9H_Yd3tna6vsyA zpF)Lb8pM3ET8=Z!ujg`12MMr8JGSm@zHl-jGjZ zX8VZyZg9L0UC}Teyu!Tqhu($Z?JkA~EesEw$8i7C7zQ85FvM2yhxcO`8N!ge8^h=x z42L&k*qBaZ{7~PEG3_hbm$ffyU(o&>zW?uOzoq?}_W#23|7q>VwNGl_U-$d9Z_wVO zEokr3=CwKP1+AdHQ+rl>QhQuGsy(C~&_=aEZLfB_c8j)EyGcuHarOVGf3JQ~{Y&*v z)jv@GtNNeSUseBu`t#~fsz0j!p!$94zg9n@{!8@(>igAe>es3-s};4ZUQnmicc@RR zPpFToN7M(^Np(aWP~WEN>P~gDs;a$ecjhaZzsvkh=6_`VIP>2!|0VOEGQXVp#mvuU zKArjD%nxL~C-a?|Z_j)v^LplenZ?YzGnX<>rkI(@d`;%L%u|^YnMX2*GWTc3GeepF z%$=D%neCaIGkuvv-~Z|Ra^K(deZKFH`hK_XKllAg-!Jz4Oy7_9{ZQZc^?j`G+xtG) z_YHm5`@XjCa-RdR_h(PgZ}AX_@{63 zPaj~X-LWPA^tylgM*s8;{^{%4>6Y00{nOX^r}z1%_xh*zu+y&Cb^mnDKV9`ti~gy~ zPCH`@{^^Q;`r3rj)wT0A8sE*v9k0^(E*f8<@nsq>vvK<+8egJuo<@(x3LCe%G&(e1 zq;ZZ$n~ht`G?r*A()c2cFR*coMdJk;XK9?F(PZQ10*!eZr)e~3{2DfHI#1&}X?&i> zchGo_jW<6><5?P?rSTaWpJwC6Gc-O$<7pb7r12CRZ+e2plQf>7@i>i-vr&7D#z$#9 zM&lziKFmh-D2-Dz9-;9tjfdEnIY{F}G`^k22WfnOjeYmicpr@iXxvZZBpWwO&^S)x z7>%Pe=Gd4Xp>deTAsX+cagdFvER6#+-a}(Qjr-WxyO+khX?z=vchPt!8WQ|gbYKcs#_{kZxa>bI!h zq<+16UA>~dqI#;WT54W>UVTPAr9P%ksc%>Jt2s5R-mTuI?ozj?nwnCT%s*znocY_# zUu6Cy^WQVSllhIzuVj8H^K+S>$oxp=-)6oy^Rdi_GvAz9%6whsYUZ`f<&2vtWo9!* z=3M4X=49qr=5XeL%tU55b5G{3%&nOnnN68YCYg!#{X^du`~ITukNbYV@3;Cs+xH*( zey;D+eV^+4{=Sd*eWdT3`(E#RZ{I@SD}9x|Qr}FNqLY7@2uK7Z0ulj0B4Ref1@rEV+B z%7J+EphfZ^JE!DEk3JoIN0YFwb;@7YZpq`B7-RdUF=2!}D#Vnz^FKv}kDu!Y) zl#qE9R1cxjkIMM^`w3?gr4F+w2=fzo`}+^*M_Az)>P$`Day-1(FQc={X~&#%%nPWF zK=oHeN6FZ{UG(NyJzu>z%XLw^XBCU};yYZ(Lko;q)IsTGzupi9Feq?x2GdiQ^5$H{ zMDDO_;oj^#ilOp&U*4Ou3Mgs8Cy+fn=h#*OC1ZFx_5`>nO7Z3lR^6uCGc$O6BV902 z!OZ?zV)bmO;VYvukmahQo{ydv6;|oAuJ==g2m2$+21^$EVcskwX`23aiaj=~%W^z? z^pc4pINSv4QS^Rx=cT;uf0^a>)B8_YuEh`~;H)`(L^ll-8J2*(?H3y&Bf64KKjEOV z2amvR3AKZ)9vb)%!=n-hMFs3O8T+GKhy!W@Kac}ooX>kD*C^{{Gd}mtyU;kTB+2W$E8pq$jCE|^l;Q30+_?BY)Cgi3fy7^b%hlR z-p6bpS40VkHfzu{8SA>`D!}=J;0s ziy;&Pt8(WX66x6ugLUwj40~3ThXPp79bBO`i5g@RAi1n+wU+&kQd@eb|Clq-VJQD% zT#GU;ljLMjXN-utinK}W4OtlgvocP@7cubbg|`E`$0|8#sG~=CfLR!b6_R`=7lt>B z@AJ{|OMqB~RXPpktJmlf7q9*h7_6SskFqQh^~#)qx~%^G797*xpS}^EL2>Ic&m6a% zX)A3wc@L!nd25AZ=%MI7S($^!G(xS=824>}FMu-p>?)#R`T$#?-Y)G|1kZpVCe`Z^co(I)m!T*6lJujqhF`?inP>d%k9y41tCkXVXK~?();5S;;VCM{p~Y z9#efqsw1ZB>2 zG{AIO?E~yub=3&t=;qxRHr;|@^DYcqc4FAN1H-oM7`AW2uwyHRovi=fE|#T#%O(uF zZ^p1^BZgaV!l1JPfZJ3Ix3j){cl2Sna|4FE*oyw!QW)-L4NdkYG3;aQ`}&!ye-CTm zH=tk`@5XQwOc;Et_D(|YX2Y5KCJyq?VFJ8|K6I1Zz0$JZ?!+vepmZV?X&0! z!1@7vkM^C20F?1z`A;Gs5s(N-1SA3y0f~S_Kq4R!kO)WwBm!?;1QH4@w|DPh$@aV1 zK+!Dh$z61Yd@rYpY}1V_kR$Pfa}`V zVy)jn-hV-RUVBQ~giQ~yT&y!tuy_mJ`btLiVQ zKdb&b^;7EiBj5ic>Nl&etM648)OS&~{{_`hpHok(k0aOrL3KhMQunF1Q>MSFCe>Kx zA2MG=oSnd1U#s8vpOs{yg)qkmdjSTbH@ylS>370uljm7c;Z=h>WM#tob5e{r~UVw!D)9Q@f17tCQjpY zOCs?kJ1L1%IPFTspTPTfB~Id(ovFkLc2W|@*(sTL9H$*UiO1L}m3Wk$l*BQdw)e&# z!N;~I9>y=*dJ{+4DV3OFr+DHBJ0%l`aoXCQIK)m$;vhTqBp$+POK;-s?4%?fWT$xI z0h~7XChljaMEpK{^X9|>_DeFpAHQr$OyZYKN@9YY5{YqkN+!l|x;dU0Wv8A*j-9#_ zBkYul594DS6GQlAV?1#$PB--=2H8nTWZ5Z^7{EzOCGKITM7$sG*An~ii`o<4i(l0E z-54{8x8bEsZ~QL&(wDdszx4Gc?qH|x#O>^qNZf|ghEzglr|!h9?9`LkgHu{b>}IFl z#4YTUO6**-1%k!>LzEY-Ok3#1@>A$;4)MN+dS1Q#^4qPCfC& zMt15=+=Npinb6p&H=(kVlE~l`PbB)-DW2GX6SDo&?4%@8>=cjp;z_y_N&M2CNTBEj zo<1f1cPHa#5hOs$KgOPTH%29nk9Wn{`v0?;Ct}*4X#W#2fWL(2|C{jte_#7i^#1z+ z^!@vY_95*W{Qr4m0+h8Gbo@I3@BgUwpf-+fe_P@CzfJ4WRCN0L@9JN{_y1G%*VNxe zo&V3NpH@GK9)I7eekVHoRn_;YE^7NpC*HO*?5-R!a%(I#EnJ4hyc;>;cetDNq zAQ6xVNCYGT5&?;TL_i`S5s(P{b4MTZQ_im+g zGP%V+ClK-g-z4Lk=-d;(*+2Jgq;n#9lYj2j{IjCcIiAS)=Xf8TmDC3Rtfc*OJVlS$ z-Alj1|M$;IkAF@kdg3XB0?yK@N1>C_oxqE!n*aZ$mHz*Kwkpg27qp+!ehgUvpU^(8 zeTVifs0jFaaZ`JQrKc;>d839Y`*Qr<4*VN015R}we{P#&;4`P6Y~Bf0uljQ!0prna2xdi+(tbBw@tA- z*+xA8w^9$lt<(c>EA;@}LOlStP!GT@)B|uc^#I&VJpeaT55UdT18@`d0Ng}905?$& zz)jQx@Mh`(cr*0?yqS6c-b_6JH&PG4jno71Ch7rr6ZHVRiFyEP)B{kX9)KG4092_5 zph`UeGt>hxLp=cd?qc`fM?C=hs0Uyl^#I&JJpeaQ55Nu7129cJ0Mpb1FilDSNW#Ep zQ`7@6MLhtKUx8P8sRv*$^#Dv#55Oe#08CO3z#dBe@1f-X1oZ$+Q1*XbQCO8qGO_Y8Izctq2%AK+(^5pXE;73? zU%jZ_kDdbGjy!{>w0`YY_1jP>a9({%-K71j_BGmb+Wp8e_+8ahA3>eKT{s_A_r9TW zBrhfrkO)WwBmxoviGV~vA|Mfv2uK9JDiB~!VmAc=5(om2<49qEo@bdqNKt@piUK4k z3eZbYfCNPW{G9+&r`Q`Q2#}&6fWHwyl7av|6a+|75WwFEp!XPiJH-HcDF%?D7(kq2 z07;4gbW;q#-v^+FVgS9X_5p}f44{`{0EzqAmr)2Hd4T;$5deP|fCNPVk`w`mQv{%g zA^_bK0Z5Iow^INhP62=(3IO<<03;{?kfH!U;vV)!^8b7Gu^;!cfxQ3Tx3M3|`R^s? zznh%@1UdgHa{jx?`R`e^0YEP~|EX2Zf0CU4I642THvm}e{3poykCXEsC+EMHoc|;_ z|Gnh=E9CqqRyqHvRnC7r#cq~-e-sd~$N>5NC^TRU;FFxluTcO0III6pXo}x+3N=F0AshU>=vXdO6-nR8wvGd56*40 zCq!=-exmJH*!q7;`-YhIt61ItHgx^_0#@z6jC%j?T8{^m-zgE02uK7Z0uljIYV)1~>r;*9g+bC18|z3{@&3#U(>J?fqsD;(QDbm-#o{q9KV zx&6;fzx-(F<&)=bfAZwxQ|Hf|o_g~3=U?jXjqPF=-uIMUV%M$MrSnFiWR;hHXmQ=r z=-4sOJ@)h?PvsBUhfY0psBrJogD1zPyq8X%K6dtmt#vh3%t{!8}`W&bLlfAybO{(o0;M-2bVe-Z(SfJ8tdAQ5=$BCu5KO2<-{ zFE17Rb9Le)J93ZPj#<*FbWW#|Jl(Y_x=}JK`l|XmeWmnHH;Yz<3hc7MRz?nZ_VKfbGGZ5j;X)kxfNSCD*C)vobxJ1#T?WR7Ojh(QPN$z zU=&SPw+oi7TLoO%v}Vk5L9aNLTfuwq-Y4ve=jyImcC8ZbQlBv$`;u-al;OJ65$JGipIQ$E8=??AcOj8t2l44H@RlsD;MyV zS)*uF4EDj2Rlz;u77LCsCJ$%`AD~^XxUoxG%g&VPOAN}n1 zOL^Oe&~p3z51g=EivdgcS#$V|ZW>_q5@=xiEDu~O?BY*225yr*1F=;JKLRIW{Xx1b zcC(CI2J{&RbOnx}3%)v^_e!o&*2`voKsRxRjK1tU%U(GT_BP8V{#r6B6~>kf0o=7$ z095{KgZc@&d40|+&Rb=}!6Sp;r#(ieX=@r3C43GS4Hu*bO>mPH17Bj{>++WEUi27T zK-P8)9RoxKZ<#Y4_JrQFW%!sG1N0hL4urMcO!|U_r!-949n_CPQq4LOc#h`|=(CP7 z4@%I{9+go5Us*KSjp7!UX-={SX$4d+(+9^54>zS7wYU1uIs++keIAAiF-dL) zb;gspd)yqcd&P4Gz`2a+@J);cb+QiVo&!;)p^hOz0$@Cqb(5)EwGGI<5s`GB0?kmz$qc*$4n!0irgD@BxreD(=)K{Jef(2n`tO?d7 z-N?RR4lmLr^}3WTU(cU1ppNtcwD7Y03@{CqNkb)oyY#Z<7WIM!K>)iSvDv#xJ3}zp zUwpwDU<$7G0pcl|?wQ8aG2NbEYMD)B3`(ZgF{4!=hIQtq*Kn_pz8cCkZOV{awmW=U ztfCI|D-;G%nQp}@<2Km*2XfWuIWjanksTh%4vp!<69;nR2S#(u|4+w07gN72v$wA& zy`}e~*n04F<&V4Hffr-32XQ=r<9-~2IEHWx;~2q_!!e3u497T*2^^C+_TxB!Ba7o+ z9QWb48OJ6Zn{jNxu@%QQ9NTfQ$iq$?yKvlsV>gaHIBvzEspV(d}l$|hb0f-VHe z#JpXfYlx!x3S`cqX>M6Q>uRQz$rjzv>TJM09?3k#eM5mj3ZXa)2F$?{n_(?*=xL@+ znMqf~+|G=_vI~n5R+DcdHdusg^0G{KFvwez)kKPbKM&x!Ek*qxS*4ir*-c!qiZ=8( zW=E4m*J3s%Q|-%hOKe12Nbmb~*`3##wNG=*o2^cN&zHQ6&FSAz3!U9$2 zpse(#F@;?4N-(_iSXna(E(k4L*(rUaKOOni- z0j*%P)Sq|RdTFIrrl50b@&e{IOC&9>hdGi>`7<=7i^@xM`V-58+nFeW<1P4skT9lQ z;c}KN$C$Rr9yBqF!fa=Z-v*wR;&%wvFncPvQtWH;%(}Pm`16)i@$eGkuvHohdc&8p zm8&$cTaW}})eSvFf)_!8nnBCSF#N1P1>0%bG3W6Fuz%o*`KBtQeEpcej&j5ElZ#f5 z7?gbT9dhPtQ?Cd~&Vz{2rbTg12vTEo;bI~gOLbk{pHukZZE$v)HEC-c=w=1yJUu!y zietkcY!Rbr5cA1uInFS@p35;Ev>Z?hXODJl-PwHMWO`n87+rPMT@ap-S|omnKy^Ol zPG8JvX9Nj8v2d%x2)?)_r-*!$9&I-4%nkgO;*?`!sza2kuAgdtPGcB@R9Ta86=Ki_ z5gK2Z>n1fcky8$PYz~8oSPL&Q2i=ce`9Vb%-?L$EI?PG;H7e))(V(_M?vV*Omvz7? zT_U{S$}r+5TTA^LgnVpax{Dy+l~aT$E%GG1R<$l5hGMo)RNpO%{t1FS%KZPXCEnQEHyh@eeJ`~%P3qx|~51EeBvNQvlXB17NKZ09MGtz5YL(9hzuZ|L;of zj^Tg#Pa+@@kO)WwBmxovhQQL-+ybZHwigp{`pL%?iS4^cV9G9kAX`g>$WkIib~zCu zTUt(p5OTSruX1v)dH5NowM@l&@^?M?y5%ZP^aXM0|BF=zNdKQD`bDh@kp6#TvLUn- z{zuMplzIT^|3@n%2~+|||6lt5R3XH2eqko?6aYl?|0kRL{|m9?1!?k01SA3y0f~S_ zKq7Dh2rTs{(y^}N$E)WMHRwK8)-RxdWogSUytsdV^(=d_b)GcR1hRfnK()RX=iFSO2n80}_*2KF|1bUjPHh3?`ai39UYmvha{a&7Rz`JeKEOj)K<2X+#pcq z|Jx2atjPTTHeCVb`oCQNN6D7-|E2%W8f`9@8+2*`_$JE#A0BG*|Bu9yN8aKFpL~3Y zfJ8tdAQ6xV@FKAEP%^!Ae{yO64g>_IrWQ9KAkb+6eU7!^&-!in(e^(}ZTPc(8-D)& zNe%1wVO^p+-3~{8)8_O5v3^$dbWV;L`^B5xJ{f4Is2pNu70=YIK5A|Mfv2uK7Z0uq550!!z5kqPkXtJUW}yz~TqOqpi& z@`snEw&TZqzB*e^0^sYuO^g34Z_P3X+cC5Lh9Fq*XB+Hg{S85)SNPX!^P9Gt5NTq( za*MRxO4~h4I`#;V{(re~dqCO$kG73u=`4cV0?PbKuJRuD}iGV~vA|Mfv2uK7t5Li024IzN%pRbl!2*4`N8~W0{ zc&Q67P2r_(-X(pPeHNPlATuEEVb^juJ8KlNzoCiOuzO;~&SLw_f@4If?+?ol5L$O% zRSD2JuYl?$mRle4>;WlsA9DR)uK%-b%4PpQwrMVfm{x7Xj{VN_Udc7e*ulOYfkOw9 zUxX_kbt%4rjRD0k_boy zBmxqFwLxI%qE;zx4m5 z|8LIBAiD=jLHhsm&Ho8e7(_tyyj@1-Tm@kd2N0pF4T_7bX|L#& zr2pUA{~v4e|BJC?acwLl`7IIwiGV~vA|MfXGa;~arVswUVNj31!=A%>>%-hwdeDCv z%>katt-OqtZt`zUEa#Q%f?lwT*j{^S<7Rxv@NhMcHwQiJc_jS%K6kd}b4N`(z?zWZ z!DrVC#vBYGx7Kj~B3oQscHvih>>@k$HFgdUt1md=7rm$u|1bT2>Ho9n=zu=!7}EcDbPN8yQ}9ZtUO~gc0h%({j8e+m4oeG>{(r?P z=dFTQt_bY^H$2|t|4+w~({CngO+Jf6Kq4R!kO)Ww))9fFhc>~XKXV5C0H0Y}%4JYG z@YrKiFwniS-`&!#+MDi$*UyudZ(?yBy98iL&!WKDEVK~R_blRQ<|P#P z$ozk~{xALi<$`?a|C^4(BIl$xnNi_FT^K0wsC8jnY0D_$|4&H&e;v(2`PC8uiGV~v zBJgHJVCgXxe*QDhET-VkcZc`nTiSIqf&}~b(@p`clkvT2D~o0DEcNTp8YK%Eu$B?I zmR_JuKqOzCzvf`taHiq-qDh$r=cZH8LgxR={C~OrFa3YH{x8@6OUvCJQ- zP5!^E|9>-Ds`8m60ulj)aQx@%g$pB@G6Gkzsq0RufK~e?$_T%y8(9cl54%5D(H!Y@66jJ z6c^aYjjSLg0CkToiuS|f6X+!sv1VWIya|9%4TALlrT;Jef9d~A|6lt5(*MUAKl(SK z+`(EO|9^jz|Nnd}`TULANb>U%0f~S_Kq4R!cuOI$bl@f|@aOZ@QwRmn&Ue^=%Pd#y zr6nDI=^7iWzQlqA^|k-ii{kZ_|N3iLER+lR&HCyKVzU7XG&rX28pU~p2>kB)Iug)b z6A^;wDFxA65%5JIr2jAdf9d~A|6lt5(*KwK|2q5sBSTI8e=e5Hy`^k6`LGfJiGV~v zA|MfHg}~AbmiJShx0rzE-jpQ2^eB=6n7_|<25eZZ@7xS;4rv1j3z+Uj&&--A?niSz zvz)EhI%Ze3F(#)TJ&n;N4=(+x4fAT->Y)G-+Xt{-`ZGl@U-2yF+^@78(2ZKhzt!EN z2lXk(MpA->zWcSVd%C|b5Sk{h^zZjS88suI9^;@&2Gl9~l?)s^2TK26`v21Zm;S%> z|E2#g{r~m$|A(9W|EFWgr(2mp@->NoL_i`S5s(N-1Xd%kH05^zsJ_aU_M6wZm+r3p z^ch1P?Zw$!O zr|?E&1ofN;Y7QX%f9d~A|6lt5(*KwKzx4mt+y5VF^8e4plIK=iH}YqRfJ8tdAQ6xV zNCY|}uyjA#`!7wP_kRk#|6hT>f7)Ey%Ub>~-Co-e;3NwIgt+dmS;)@Ql7806V(UJ1 z`e%#x+1gHmXI26QI<^P!Or-d~;JFo>`An;J@)Jl$7}Ue|D=gb(-FC``W5U%J+9Hth z7b>>Hb{s?kgH=NJ1IJ=DjrJwIWU<{7i`a{>WEPMhP)3e}-2YGR|0nnVll}kG(*KwK zzx4mt+yBos`TyBiGTYJ0k$;p3NCYGT5&?<8TNi<)C;H&m8^&T6JbHfbIqxxt7yG}} zz4@#OzZk9ivIVMm@ynNr_+_Q#)CiAFaE3lozPOxo}5gTwSY`dUo+9eSA z{j(?`pk0$|DgW@~r!5_u4d@Na?_#w9&FKy;6BHkarU;6*+?f;K9`Tx(wlFz+$%{uwy5&?;TL_i`S5$KG-(#Z{I=y&eiVrpq>3x0b3 zd1?aCy*jae=^p>n7t3t&k4gIxcY>;H27U#|bl^?zhs<*fmI)-mQ05oDcO5JN3m7d_Ut#T!_z7t`76 z=q58*+Y@Fv2@F|PY{ykh7inwG^-B7TRko%*cR=?ldI3FW@H4iIaa}{7F}+#K!1gas zV_L!MMZ6oITOB{1HXWN<%dBiPU)y<}-9WuRy_+|SCbHJh*`{fm*NRnU8{i-ij3_v= z+Hg%|ehsGCd|;KA8_}ShO=U2hK3IFudQTj=|KGaw{~sA^^8fo|$^OokkNm4dKq4R! zkO)Ww-oywjmA9ssUf2rP{?%70nZJA4<{peV(QBH}wR}V|l*-d&Vm0eilEO zaXMLTcnxd+bI9pOEDB z6jCTM zSLzEIu3a#S@YU^tWwRgwmP@P|vy8|9R!u5c-7#xxJO~ZYJG1PaEDTV8XLk9Womc-w zlJ5D71_Z+pvi^UDR@QV%=wRC~Vwufz2GdiQ^5$H{^c>x_uqI~b^M;v63x~WX*Z<}E zzg+*9>;H27ABhff{h#Gw3@qnYpi0n0be|{lKq4R!kO+L0A+Yqqb|mg& z{hzh=KZHa{&s};3FD*UU3(wv({k#B?hIn3O#f>i+9$bF5|DWIG&nv>Q&zsclkLC9B zb>0{C$6+|s@)BBa4S1}qU%;jW7g(PHJh7?I6^)8%V7EZ*E?9DrA}a3E3-uI`>;H27 zU#|bl^?$kkFW3L2|G(br|C3Grzg++SDzj1L?MehB0uljFg? zF#0X+myRXzhqGs?4PbXuYyPDH|Buy&*{7QR*rsnk;sf;^{!si+-TkxF-9Kwovde{? z$886#`zmH>4rP>iyMzXUHVQc_71UGe2dB&SwBe#W6t{W7D%$7{$Vvm4BhLyjQ4k8x zzNtU}D+4YHLe28Zf=k{myJo(E5>jWSRiNP&j7wN`U?mF{z9d>9LC3rW>HkarU;6*j z|Cj#1^#7&*zux};{wDuFA4}%f&ybSeED?|hNCYGT5`nL31eTuIiOc}kr4|6RAP!#{ z4ff$_R~)14&X^9W^D9)YpGT6OLmT=n?d(Cg;PBxp?E~1si!U(;KkGaA*_wl&^&Nc9 zj{EiA{>={i)7UEDf>$!imOg8up#X~*2zlJtrEeBR3l$#(Y?F0-?J>9HMqR=!b>W2E;*3%VRq#PmLAS49K+ zA(*UTRewKixnLr0GFwK%IrW?B?>|s;yu6C3TaJhK(%XLWA|Mfv2uK9pFa(wk zCJ+udetdDm(uDt0^(8F&hvm{+ugwXkP5)R3u065K~r-=>Ho|1f4TlI*Z<}Ezg+*9>;LQO z|BqychMWBV)Qi`tS<)rJ*?9p3hew zz}p47-(!y@7w$j${?|76!=8U^Ri+ZABj5ecAO_WI6XIZ1Um5>IV+iwsQ*aekk|{a>#CukZRl{Qr?A|Nl@ddFY?HDJE}EA|Mfv2uK7Z0{?dqSbB0dy!+YN z>ScKMSWsU&gx|Ynm+n(=LR-M&c)9yHwf9@zXPJ8ZVX>S!iFy5Uh5yAQ~v;LP${-0a+|7)gH0_QOt2XO4iF^OXW2Yc;4 z94tC;5XVC}-j3rz91q~QAIBh$AsoXvMsVbCjN)LQJ&faC95>_Ggkv*~EjYH~*oI>} zjvY95;@E}b796{A?7?v>4jspBIBv&r2aY>&+=b(9IPS)=7soyv{W#bT1_LegXkg`tEdbRF z&vw?Oh(TO49F2S)OI-MRziAa#uUw-z4|CNoBxTzvVc%;Qu8yHkJLWu$YsaWqb{Qp} ztW`DlVivF6+^T$btrA}&G}iXF@jw`FjKp~8z|j81tv!rY-qQu1s22e@TKTP>VVxPG z<67k^h7NW!6Jl$DRYp!DZUQF3ZgY{SEYKN~Le77X#ceJhGUKGw!%<<`lsSfym6%e6zedn4cV>po*w& zQU$yd61O0IB^ic44#Qf)7=RYt_{Q1#Vr;(=2+*p;nKs|LLjI(J!UHDVNDp3Rw#i-I8&O4Kfu zVb{%A*rSXZl)4t{tijZ1$LAKI){Vg*sy?E#9KVc2vOt71NI(Y+?XO$l}=Z#L}Y3{nvjso7w{Nc0S zn>cvtjU1uAHWHY%$HLvOGu&9%Zr$PE@#1$t`&M^>Ui!c11DAEofs z4iJW9%kQ4frhN-V#ORI2nw;2|^pfSE7Mj@!B@;!^RvC^}^!{Xgvw!3VZ3A3%qkxa` z#iU$hMia2Cf<&IE+Q*2D23M1nmgmi4-;fD#*JQE`9 z@xYqnHC~NZv_v3|pp*G@tKdu&S#<`H9IZZhlp%TTR8Cd62`mDdm^If*(?xzNa~qBT!8NL#Z`Yd0Vk_BO)&yq^+3SRdX@iK1^JO*2Xju{?VRAqDujEt7jY2} zl4PR#+!02S>nV_A&9UjoMA1d1HOGnxZ)f&vN7RUx2-~)Y*M|$&1NFymnmvQW9cTW3 zS8`V@xog8erv5bfhl&5F{7lymcl}=Mht|r)UgPgs*t?15%DZxLu{8_vg;qVNzI73c z$G;*^i|Cbg#7=*X@8t0Yd0}XAQy=ldE8vCBWC#s$5&U9`OCSMaeQ@QnINPm_x6*=3(|eHE|LUvN z7g=I|R5db<_V}Kgt+mU~=4p*JCs4N?2kqPkyiG@JbpDw z^tV&2GKJ-{I37NF$#k&8Bc;;m{T@2 zNt;I^MW&KYKjFy!|Jc!B&T~9>K%aGtdDM5n!p9C071JqTF9feLpidW#askA{@(%{o z;v8Z0Fw&G&hV47;qV0f+$MBh1WE>etHnSb9BDt=C@sd?yH9U+^x|_!$6BdM$u%8@J4@{U8zAS;9LDK#-zHLQ2yPN7 zpx7wXa|c&w4aQ)*je@(-T7<3W`^#NM?VbK(&LD#nk$%Rt$OACFS>#y_>WmR_@3Q`1 z*8j`;|Mji^AI=VqFX#U=|38hikIX;x{c`%#sqg6B-BV25r@YwhbtSt>l;hvtfnUhp zO1}8Lx#V)(y3yDUjajzxu|>i(e97sJ+OCC@yYS*+_9R#DL5xexA`%QP3OP2M@x{)@ zez>Q{?~z3D3z|F?EZL7;aSt)HtM>uzXl^Fmh}e2^FqqT6fE-kNNIW(R?vI~q)i7DBd;dy7X8r9;`&OIY*{wbMa*PA&{S zMA~l{^yCc{g$rZdV&mwUCJ;)9CS|QehBw$11Z<)@_;wNi23TEa8m9~7KZPayh9lT6 z93&*v(HSa|REkV_u&c!qYx$;;Ai>5LUVD%c?CNO{Ok|N%2%ysNK(?x$frr z1ePT^)qR^Rug;d1nBmCD-yQi&SSUqfx?*~%fzn|HfXGDGg7t$OF}cux9|_Aoa76et z5p7EBNDdMYF^Os|z`TrxcN8$-ub?GUNBK~Q1{cU~%X(&a%> z8LQqgN!+pv^lhiw#7uzo29H;j@-3a#pSjW2>;xh&Z$@^uf>au1y6g(Axh^lcwvCzvi7~lwW}FdY@ij(_NZPGomR~!y#ZS{Z*Ebt6 zp>*je7$SNqi0ef4nK7Db6yVy~nhLjr*Mn&}y*fP_PefK1ohL#5w3Lpd74XS|lpSAq z$0(_<3@95;JArHQ=U#Cd6hf0%OM?l^zU#^;L3qa&l^hAqIi`^KBER7w$>-={YWrQ^L$@{YvEln>w~)>m)kUv=KsoCmozXN#pq zK8GMerhW%VL@H+^w{mJ3FK!?HuNJPvNaA+qc8cX~H;^|(^RZfj>b*nkLf3K-Z4slh z{k^wt-qK1I_$Ml%r{dL6(apql5X&}`c~Bz97u9=-H7*J$1)L&Z)xw;( zk=Bb~H-WZ1LJFcIgK@jOf~GC6OAw^U#KOLNh{5j$MZ^NwtrY|>@9~A5ql;0SIalYN z^@3Q9SCjq3y?Nr^)=l!nFyuoaf}GZg)9gHp%+{Q-py&=9C$9u4F}CpTeME^CQ}hRoHYu(l*?AR2OIN0aT{2odw3iX!+Sy#MXg;fu-j9Y{N0ty%{zL@c zMMZkEXqruQ9Vet~f>Px7|Lb}rrf%%}s}1i=T}l2%&+YN|cVELx@}B?#3-{ekbLe9b zhN#L#h?Z+?4hczQN7)Ju_XW9dVo`Y;L+|=IpvOHscWRX|D4N8>lLH<(I)rr&{++Nz z;#C~^()?;al4BlOa|O9zyt?Twn$cfj6N>GidLMhF&7s6GZW19|l#{U@8uyNQ9|bbhZ_m z&!Z~y&Q2h=RE7mxf&?3_-g5^L>>gC*b-oK;ZW98GPf)l4XvwBR`n01eiEhwGG4z7e znyfx|J57BlP>UNBPPa_Vpb(;R=qxXo85p)O$E#RH0-;ewyUvnLj&+c@6V=RZG^5!d zu8@Vr%?W~0qK>j4G;@joy~doy$qPYxj4$XqqsQVF(1UJDEIFb9pyn_`8?LA~?J~=* z--BbubkOtIm@eDX2LINr9SOIFM%Y-jNHyKpvw%p%Y8BxJPW2V}u{dMoVRLKiNJx~f zZv2T(?F_@t6M1Bb7^V9E*lAY(|Lq&h^yc12dfpZPC*?@jdAu0y-$H5+6SC@TuBUBw zjiB1%d_G>fi>ww2$Usoxpa=SHn%#E*3xRbvp|uGS$!ir04WG(8GatVX6)JFiwqr*% z9NnPf(@H@iPgEywVMM+*1tK@xTbQpC)c_HiPutB)p~ML13x1AnfTeln4&(D?U2gH4zm<5YUN* z(QO3i0{}F-aBwPbf=SG;<)8T?(SS=-g0PJ*Jhzp>b~P254Ts zx_xRfb&@!CmhIKoIbJM89p1_~A*@^UC0g7}_2buHMg4e3ehiuCt7ZRthFPBh?kb#U z4nqXZ(D~8OVvR`%IuD`8fmuTD029Are^@3&GiXE0)^{TbWVpL38gy#86H^H1wXKeh z*s5jdz|iEPN+s>rFQW7&y34?6K8S+ESwva)mYUW~+V*1)k%2i6ZK_RQ>xS$c+@MaI zO@5Jx0{?6i$|JzgB-Cd+WRBzHvwRsE=2rHG0Qcg7sNZM3U-ibXwb@-e0Lo0^m6xwJL&kf4xMD^qq+I;Pr3sOeA1)-^3P&M(=Tfk{*V_OJWr<^2> z9vI{{OoP%{+yCz!vE)0}&2N`qED?|hNCYGT5`niA0!z1br(>zZhpXqYfnbB-(-?-D zGmAwNTYRw%u&^&+#lVP7vMO2gQr&cHwA`cmvNw&b?P$A1Y?H@cv&wmMu423C3swmmU*3 z-0HUDfWv*tr`v)v8YvDDLOwHj5NLwOIXVvq~7LeXv++0AGZ)V~tN} z&%?zywUj|74r_?ix}{79>rrq8g>P+AG#e(GW!WkKDr5+*YDykGd=?(S<&5A77|KnN zIIQyTU))IjY_7iqHi)p|AhxPk_bZx1(tM%t`llPc56$D@}JJt1*-XvXNTOKw&WEDChNg zYuP)k2NcHe@Zwf#r1PGx=*>DhDlrkj`H9P`vD&c~C-+B~Rp}#~iCRJ_CfwRQ%1jny zjG@IO_13wbkIWcCP(*+_x^nH9aVo;GoP5N)&Ky3$cAVZsSHD{&0R=b#cIF1^=X3o< za6;7iK!_K(SzTy`=Cf2gvW6hQ{Q4|9D@T!b{%xRx+(7;Rl3lOIGJmq+7gIl;{5Oe@ zD&N!fdh(XUXA&orneNYZEyZ5D;YdLHFIdnV79*&-xotu*f++rGyC?!De{v>p3)vY& zkfDj}$b>#Jge15FBa2(8dDHdR(0)TibwyCPQH8&iA;*a!zhfZMqCv=z7H~i7HfOVw z99_IQXO4iJ4v$pl{Weht!55v&7RAsApQEBbZNuyqmd4F%14iXq&bhsvi77PWMUGnp z2|v7;q83uuXF>Rmvzdst5S;neVPX#Fy9VxQTrjUy2#Mv9Mw(hV1(tsb=2t&KUKm>J zrS?_VO~wmiIqIEtMugd;ouIT+nnFAjiB|kx`Hh90I!YnGktiUq0ajpEyx*qlMX&<* z*h z(_3pgv|_jjI;aj$vw=om#T&H&UIK;u;j@zH(iy+n;^VLYd!Sx$J9Qy@Pl7e5>KNZ^ zhiFHgC#2d1=PhpCCPeel37{>5ic*(L@9fivuuv--M1-w4r&Kt;wq+TJH}ihso?yU)b?LVy7ol|i(9G74HEQfZ8v$tl?bQ zt&5u9-_yl~#FTb~9?W8EQDU|;=akAn*R)2=sBOp+ea_*V)LYMVku*~$1rZeW$;F$f z56^Wk7gzZ1HL8&uIter|WWX^MXFwqfrlXf1Nw4xR>b6%5%URm1C$@G%-^x}Aoqhr= z0XLvR{d}%J0G3$SNtD-76jKfSGB0Gvi8u`0)8Q?8Uxq(^05n10AT6e`tU8T{jWckAvzRFUU<){s)XC(49=2j!SA{k$*0| z8W!!~cb>&&xrmYxBtI-bjmYoi6w&yv&;%NZ)bt@S?*)b&(zIDwm~#pn~wWaQ_T zj)K~bbL$v11k?g7F+4*4fBZu+^y}G&)y0w*k9_kdeB_(GRjKC7hiRE(x zMZBxEvcQ4>?_W&$&dRKS$r1{BM@1sYNqlHV7acLRBxaa5h-I@!-inXKgeX*~6b464}`h z%M9UlKlx-!#B;v^2HV<8G3Cc? z>WQea8{im$a<(Al#uwh<_uamlxdF;Wzx$4J1D{~tfcg{l?Zc-0AiiS@yeR{ExI}W#>OsUut4FU;{OOv3mATfBxP~{t zzZppcg&oFkV#%=`?NK2oT+IICn|6YfoUGn=gGUkRDDIa8$?(>$eN=IH=iLmF6TBj2CKuOM$x1vszoef zFSOHab<#BHr64Gi)h$mkP_DiPP`D@HkVtvdC$HaiBSUqx7KKbA5!<{SvJH0=#yGs9 z6r{^U^~KW^TE7Q$2^A@^NlS#m*3NurHQ9>!VCzO}e!k}=XrqnR6#fcQdwgN%lZ@Jn zDNtL4OZlv<@FdCzW~vzNxFHULGq&*ZDN<3#0FD@^cQzketD8_^YsJWXPHO~|8`Mn` zAKi%4);jqj2>$58olg*F?#3p`BAhA49^7)p%kWVa@o#`fC#zGmm-MysfQkEIT5(b| zTO+znB_>dOeBP018~zwJfpU{1N>Xie83SV56IJ5`O}pDf=qSePt<{c*Z1GW{6?bup zkBEiPS;sa|yIFrlwG$h@G=znMDs6n>x#KjSq(I~7{x^tT?}OX1mOunc!5}vuA8^u~ zCMUtzXb{{n=KrTqv=x@eD|;8rMJYt>S;1ouDv4UPes%Ett31& zW)p4~)a;g2EmFVsG<#f&gnO}&$}#Vo)GwGH_m zE{dpyxZDkpG~*Rj&qh~{4Yw0Up*F5|P`ON0Uwxit=aY;UQA|Ag5cdiSr-l#Z3U1km z4mhWhZ>2GWXeDOq@QFj+APNmujW29@2Pvl4K!4ugf5YQ7OU4b|pqOgWg$x1PfrnNx zOLN!^A#ayTcEQ$b8Z>X!ZPa zq*^v1R?htlExtNhYIS40D2!^nre`D-DH3Got$q+;ef|XSPO-@#g(nw#&k}`AP*_Zj zMdv*+?^;kKq8W{RDvwx4C{au-O^a81ccL*T_XSyDV&PrSGFG^H9IPM+x{!K}KA-ak zJ~|>4)$;4?)C+NS5dQJ%*=I-+lYl?EY(-$vH;8!L^M{xk;>*IGTFrRIEYDO)hM|z(}%~07-T)fbJ?zTb4Bb1U4R?M zICGFA4N^p$#I(8)S9RnKZu2B4OsH!zNtiZMZuj?QF=knzXo$7eQ%kkn9^$=}|Q>=hPT|m&zb5CacfnNw+DW1?Sus8cvL6 z7zmQ9qxcJ1R~_4EE zzA2)UO&_Gq zKDgtS!Pu)C(3O zZ7a6rQ!hdM#;do#NNQsT@DmY!J~?R@a%=Sn{2a?|Jw=^id84=O45-lAKumv(Eo^>) z5vlqrh$O@+(XD$irjM@FxTzlGUGo1^U4@vM?Yo-(QtJJ^Pxibo{%ZFxcNMx0#%_b( zzp#6Zl!KPr;4d?a*~ihJN({X>hNMjZqV3;Ab!3!;e?RbPLx=_QUF=DY`YcH(eqfRwY*Y`h3Sdv;44ImVc^_JJLs)cCnvzX zphf3<{?JZ4z~3;JL@0>cBs-|y8(&Pn%m{Yf0>OBJ}XYltD^|Gh{P0t6qWXY!ay776 zkRIdJyF60;w}Kub>NEb-qC#}?nA~7PzFPVu z%pJ2t$&;=(XFAg`b!I4`lw&(U@Hbaken-xZq})Y76O+P@T7vGCH(Mb(2XTsC&Hq0h zQ#bYXrE|TnB`+raGX5>yKihRYc6nV_{i}EO6EE$~rIc{ZDMkPxozBO|T$EU_uOw(< z$>ny5<>ZSnqtMf}a&|h#hXwX(4<}pHiKC6a4XUK^>X|EX;-l99d4rM&TTKxXM3Gsk z&CR!rI`FE$NE%LX7KvtZ))h^_BooP)3les0;p7#C5q8l9VZ{t_Apzl~Kxd(8C1&lA z2^X6NJ`VVse3c79NJpz(SGq|(J(JtXp>x9{@FFDU&Q$0)d$z)vWaEvBN{h)Fr79x+k9BX(j!)WCybx|AvQ z>U#`mh$vYxgCLUnrY3xYHouRi@6BiZ$?RSev${duu#CC_gF zX+u?8R5A%oJ>fJJVyzohO=FAkcN1Zs2Vo;gjL_}Yr^klifMB-S+L|nM`(hJ`80MYz zvxpB6%D}t}2SNEBt-kOovB5qB;-gPRys<*DSxHPc@PZ()f3uK)^Q&Yb$%!1u3le*h z^8aK15L2DL_iuPEJ>2`15!tMF19F(;2H=J)KJ;kZS1DjyaDyV#lah zcG=WXLOjU7_eO)o5wLoT7OkAQcEKp3Qr9k6Hd{tBi>5VWma(4ZSZ)RHF|nj(7K>)N zV!HTEZ)dtJ+;W9B!^C!myG3gPgd~-v`t!zn!e@l_5r80Lj8~_wsEoE~kqdl;EPalr zh!lklReB%>w0~@}pY#;#?9W#ALPm$_66D*)T$IKaUV^+(0=9pQ|rc z5H7@R5eXNh!oLO4Ra#Kr)MMEem+G6#VH8d_`+RRQUuzq08I#o zcFHo`ToClK_>hdQm|DzWL7>JK2CwuIP{YmK6_|H9*FgE_SV6#eIaDZnNqB?O(dzV- zBtz`_4ut%}xuP9E2|m1-;%w*Th+7(hqNqoUb%+?QLgq6c&j#gUvYNiq!>D}KsxOj? zgxej&`=7))UYRL9UssCO44?=Yf}q))0~* z&RMA)8KTeceEJ|X8WG8V>A1`sq{PI+Y1+AX@fA>l-#!qaes~9x=s-8HL$g&RHZQlZ z$)d+h#;X?XPJI1tpo)kCSB6@jWg2oo! zP5T#LJ;i7pEiTDl2HP^Y*iogQSKXY#KluuIo}`I+ zWAH-!B$)KyDhDix$Yk}PA9{ZVhzQQ>_1Ul~hAZN^b!11rxv?V)G_KDyt9?#BUZY7T zOdoSfUyz0q)$J5@zm@(sr8 zlbfXN|9rE%!0s$|&lwVqV}1CMXMlaoob&&_^PTfQ=li~M?#wf`Zy5`YTQPm3khmq$ z)023@FcOJG4*%bY|Mj0Ne(9_KfospE-?#cTml*ANF*`Jn$o2h6BDXL5?b-W>-W+@ww?E6VtQPhrFwm1*dxTV#%sF7X#07_1Uv?Gw0_F@#zb5#)(tM=3bybB40I5 zpE4p}Hy*Sqrd>YxHQDgdcSRq4{P5)5*wplNtoH~8pICbHfXGV;Lpj^Hv9%wu_ zb9VNrnX?a0Oimu$^nrSXwtAni+Um_E)AL?++|pL>yAE1r%szAa=%yz=d-lZ1nX@k% zPtU#hpj|q6aCr!F$oH(=wjqZ@$0iR?P97SYoSP_2LlRA3_~v3}OEI*5Ga?3j+jx*9 zu#!!u_T=&4lTiuaQ?1V&+8TelXIuC?A>WF_)xp%B$?2YzU4+AlV=r8snmIZ7F<5kBXsQ(Y8-dZ7q=c_lyT?PifOL!lt)*W3yap zUmr1QK#dr)r%#)2&UGH)kGuew~;5+p9#kTUh*j}FpFzkr`2|o#? z#L%##(H|xc&m5VUo0>d6H9dK}Fn%<0+y00`wtl6pLK+XEs+SyBbcMD3ePoy4SZuG3 zk!L15tD(TOjgmDU*ycUo_RCw^Yp)zEZe?!0pi(j2t6RNYbgI5p^;_-nQZQe(y-QZ< zB521k=+*fXCqwlMhmg(v0RXjXT?FAKt!uP%>rNm>piuL~u+>@R55A^BDJFYX_G~Cc zVdmK3;|zG>mLitYQ3aXBzcu4z2uxK_om zmtdrgl2dkE!?S$@GjrcS$HBLK%MV<`EZIx8SG22(hJ{hon3=CS^QLEb0W9|=yX@fB zo_O9;*(}=PdCRtM8Z%`Z%mQ!>Sz+bP+Ofxc~(EqlSLmJHvuJs+R3jPsU@5BMgG zzTuhHl7;uoqHnsQ%0>}2a!uF9jTg%1GAip?RgdcatW_?atRZ8d z9k`HUe5lU}X`96&;0E-ejL|sHEH7^eX32B~j&o>wO+QdIt3ul01;Bk?eAaP&)I<&{ zLt2}Ug87NNL(_$ji)H+6qZ-S$>j!wr$CwVas(K5S8!A>!o956J=3Q$UUvf>~cB)V% zNd8n%E#k||__P@+zF9QNCK@jktuEx}(5)^76|-s^ixw0NHzA||(&d1Z%0{1q#u&?1 z*|}m=Y}cH(MFlHX2{NmSzSB*s=3EC5+7Kj^&GXUs%J#hFI))W&C{?JAQPrASJ3TBk6)o=h86fUlQ zMkPAAdNd^@y8fcD_M%@ZX&X9T!vh8LIay{6GMO{bRLG# zy3$>8lGY&ZND&3`(0ls@hAY`ky<*;U=S`u1Rr^ZVjpYnp^zMb#)5%m~uxC9eY}Mza z^)a>~Qjp!rP!CENKZS`7l|dM=4NKP;z2c7{GtyInD56vALwy3#Yn6i5Nz>XGWckM$ z3XoC96H~0RFyWg;Az9us9J5W>3XDZQhIq`+ zFljTZG~1|R4GDv75x8`iN;L_w^V}_}4U?<=n$U)|VnORVDkx1|+D`^L4J--`X-q4d zERDQ=Mu9lAa;8@Rv3j+j#hlM8NnL7cr!<|2wyCg|>=A8x!z_fuo17Ikl#E!D)LKR> zrTYK%&i9Nq_Ab-|kkLn0#5Vnr6|otA*hMj2LNWCcipkR`4$Yw`ybHxd0mb-16k~Ux zcz73z(R3Q+$20Fs=zpnyQU8MeIsNy+{r|oG>-w+g|F`}#`oGkFME{ijN&O${e_#K* z`rp<+qQ9lD>R+QT>r478dP)B({RRE3{)~QHe?osmKctW959;^m`}N)WEqYq-%l*&X zpXI)g`=i`vbHAPYce#I)`=#8^<^HeSzsUV??w{tqC-t+`xoAlIAy%j}_Yadv+v2C z&z{OYl|7n$S9U5pmL1OCm%TH4dv<3wlTBv+XXcBUKhFF?=09hCGxKjUznJ-S<|i^g zlKKA3_hh~!^KF@L%6ueqE%U+5)r7y(9r5nu$mA<(b&^xm2H zczF4y@bb6A%QuFXkBQ5H#P#s<(eU!O!pld(%ZJ5ff8ra$%h!jOuM0093NLSo%f7_5 z@bYGOc_X~6hnF>Rxg&uU260&lFCR>5Jw11PfXc5G<=)q+{2D6XPvvV=UKQo-SEziI z%4I48Dt%Gz@u+mEyiDa1m5wNPSE;N}S*G%RRK6n0+iWT?QMpLv0+p61Z!J+-q;j50 zlgh6a<*tiVeifB3Q~6#hUlQfc_fYvFl`l~FJeALha>oTK&r^Ah%Cl6S5#=q_M48-6j8sw~4avRw{Q< zxs%ErRNf*=O{X$PWtPeel|!QJO;b5YzplTkU)JBJ zTlz))Mg5$9Qh!pP(ch_0>JRG&^?UUL`W}6UKBOme|10%) zH@hpF&8D)6%%5kzkom*R?`D20^Xr*k&iq{Fr!qg9`GL$QGvAf@dzo*}d^Gc+%xdQS z89!6WEOaw;{5~VV2rvSS03*N%FanGKBk=Y{KoD##r2blhsK1sV>aQh;`fCZI{#r== zwFFUrEkV>@OAz(f5=8yAkos#0qW)TfsK1sV>aQh;`fDNe*AhhiwFFUrEkV>@OAz(f zLh7%D)L%;w_1B2{YefAuqW&6De~qZWM$}&;>aP*?*NFOSMEy0Q{u)t#ji|py)L$d& zuMzdvi27?p{WYTg8c~0ZsJ}+kUnAaP*?*NFOSMEy0Q{u)t#ji|py)L$d&uMzdvi27?p{WYTg z8c~0ZsJ}+kUnAaP*?*NFOSMEy0Q{u)t#ji|py)L$d&uMzdvi27?p{WYTg8c~0ZsJ}+kUnAaP*?*NFOS zMEy0Q{u)t#ji|py)L$d&uSrmUji|py)L$d&uMzdv`o#i(mZY+eN{!0iKCNd^6aN1P zbVrz{{1*QIKZA9EAJu5R^S^t>+VR!

    0hf~)&216Z*L37t!D%n z0Y-ok_=-W``g~71F?jXrTJVYI3-KH;5pZQy@)UlRr|_#h!msio{3^dG{3^c@ew7#A z^c_4=M-|+cM?<$oHUH(&Hr|G#Mw~dL+T-OMJ4co96+ty&q}mALNJJopVIg)*#AJxT z5XVj1RfMS_Pz`|-fsc@$c?d#;KnxF)7%W7LEF!cDF+*@?9v*(gI3^t75oc-{wi}4p zAqtkWt7+F-a;-}UW<%hQZy@+;*(nE0BE+j6`XHiIigvkN53$380;IrLg!8mfMJ5c> zK+F{W2;9;1+?ArWRQ8 zG7;!y8_vQ4ns25{79yC%yA=@`hPbUNqG?3z9b#mty+H-uorWY{nvOQZMO2FAmBJKmhIrT6c z(rEzdr_;~6a1BQjM3oTWBjTZf5A_GA6P(aRHAU}0wh$N61bz?)g`XkJ$E+Gvt2hE6 z!$=$4v5Hu&QDX)HSa`D*@6!|%7rr)%pe|AIjR3)AJPHvHLOk;bsY0|QfSDDcV}=P) zpo%_X8hslfc17Dkn4tg)h&pf+r=T105yZ8LNW)+r0fGdVIYO^N&md37OJB0lMALG- zQR6rQ$E>>K12^zSj78U6hI|oR2Vuf-9(4eUBgTB$td>Ohj0iBau8h{yFkKeW1c(O{ zN(d>Qz;_l=0~0SJgtLOWn<%f?6%oinDuzeGMc<|%nF|m`HOt zEuPfm9F4n%H%6xz*%WWq6nrKs4Ant1MXZ&GltcJv;Eis`nz|bLCP4D6%4pqN+pK*u zY~}(?975xS)*_V8qJA=J2t`DMXWAn5Mqe3$vI;_{*vhf$l*2`Gd!HW5uHI` zZ9`|s7o341Ao9L6BRl3S(p2C_ava`6OIpdLH9N&8wgt09kK zfRJ1vamal%E#e_z*U&r)c0_cEkWC%^y0kZXOHIb2b~VG~3bhajG=%_L0Y*l;Bci_|loVYn zRAvg)4ZG5auw}I`h-Za$yc}S1G;#pNL;Fz-??Z9$4ipdWMe)GxDBiIL#r?Zc+;+cAc{RAp~>zPire~8 z+$yO4E|I`*r-oujFN#|*!x8s-DfIvUtp1-vKJ5^@6kAtC~P zUjH$y0c?%~2>k%Q8n@sdMt~7u1Q-EEfDvE>7y(9r5nu!u0Y>2Mih%I3Cue}(1L9Zm z1?VMTfL`(i=-n$`CRc!7as}umSAbq}1?VMLfL?M1=-nwkxI+}=2+*sGUnvBjH!FV4 zh@ut%Abuq$fZhS|Yf2QM_rKWn?3z;QKEa|2OL2pud6L{#OzAZ|n0|6S$zCBESDf^n#w(-=Q1&UVSIL{`+!& zmHX4&=X1XgpZ|ZC`?cIJ;O6|p2rvSS03*N%FanGKBftnS0*nA7zzEz71d^kmwg*zl zytwowM{wDnN4K+mZ(UxV69UF8pz8@=pA*E15hXE?VDyytXU34}a_&Ox__by?uM} z+Ro(d_(ShY?!hIOO76xbJCM9hT$0IKamfrMcZo}Xa;LcTC3oO5G?2VST#|h{ZZee2 z;g5mAWEPiHDwz=%Ejffs|3EU0OR_&XC@#t5fVlJ}Q@HdEBoT7c)0ZN*|Gs`i{)77? z9za}@eZ69hpsxpIQtbba=DtPn|Nntq{@>Am6IuU%9_;_e5c&VT`gb7iUvU3*7y(9L3j|VqJ%ZAYhS$D4UH7L(=(;cYPkot)iQML9~h!*vOgVOlY`;4Z-B12gx6Gmc- ze?7baK7g2iPp{~Ux=DTjr}Y#1EY<_2^>O_n{eJx}cmnLwvse@8$^Av{Pja8%Ld5(s zBftnS0*nA7zz8q`i~u9R2rvSS03)zn2nZke1C#;q0A&E&PZOVl9|Ea9_J(Uq< zKl%PADFa}Vod1)Q0TBEDco*CMq9j*L1nTaO&S5;M9O0(68XUzc1kQ zfS*8)z^_BJz;2u=@Q-zKyM)R2Wds-jMt~7u1Q-EEfDvE>7y(9r5nu$iMu2EDEdlh= z5F!<^uM3ze;?8R0iyrOTf|q1{SR(p{~EFX0b>9C zo7g|x|H1eNi2bLC{r405Pf_%LlJfr#QvUy>i2ondKb+A2RR1I7{`*D!UxLSf7b5;Y zyfuRS4kN$_FanGKBftnS0*nA7zz8q`i~u9R2;2YyLxWo4K>e_o!2vC?H$1H-lhP7* zHO`$G?8h77kv8xFNZh?~)(w&YChp!iOem*miF@fxmZFa{A>09+!MTUdgc#_-Z*=^M z*#95YKa$XY2|M`Tik4?w$?)j|_tM_H5$+ z+Mu?lhxmW*fVO9l_`lfy*K(goz@vW%7ye-c7y(9r5nu!u0Y-okU<4QeMt~7u1ithL zl(m7xfxD(xk~`k*T&fz!9P1TaF9x3FHhy`+yINUrs#iygPUXIdtM`o;?t69V`OBvc zFO*JR7(4AvK6B{U`B!G=gW}Xl`^nSKxbCIVv9rtLXUr4~?Fhn)6PaKXtZfA1PlwHa~MZc(w3w z)h-`<`lNfl^5oHz=U#brwrCx_`ux+U{c}g3eEOw(&Ypf|?&8d`lP6By^YUvwXy)BV z@ZfiwRg0R5Yxw9_8o#x9_R-+A>G>n?3udR^y?pBV(zB%(i>DW@*QUl_@t!_*>dI5c z%!$h4x$))apSDMjjlN*o=4F4h`PpLsU(+?P7#NgGdYr!X;FFfP8R>h#;IfH`o4A1rrvts$i zrU*M@Blym+%C=7-c6s_%p1zgGxANj!`Ay%-Z+t5+zID=Z=WWBcDocTfyH_es$uTOX z@7vy}F&nt%yp3!=hFP{R2WG{v0^7q!YSpSbRl{+srfZEF=Ypzlcvdkeo0ezzu37aK zEZ4ORAK%5TQ4!a4Z9HY692EV)w(x-GOv|_wRLrVvELv5|6%W0D8yZ#HD;u6uF55*s zzhqYpyJRef-*?=iZBT9S8Y;IWzD18Wi$x0#lrAc;Z2PE|;hE)SdZf7=R1AbWdU&i7 zzNkQTkpLb+^F+%H3#||!2-F-my%7^>1ildlOB#^X@NgJW2{;$gq!7a4;YW;P0MRf5 z-!g1BKqW&N+tsvdExFbut6BmQzJW$J;xLV6AuPl4Jj*EBA5RKYst4DJr8cBhEpt>RuP{o21|Cy^u;$Iza`hPOF#{+6B5KjA;KjS z0NaMMuz=>9>5>I6Sn+N}NCc`_wV|ISRHxS7pfZ|H8^*A40d*8_nk56itoUUaf0`9~ z?~G`6)$x2cz*nzW5F;vKqYlHO=9Quof@gcf^!Zb^XA49LIC}|SF)Xv8qomW&0zaL8 z)`iNU38G5Sxe9&-KGYweP69PlQ}n43W5IpbXHxK zz#B0ZU2_@oMe86;-*Qn0pg3a8m(6NP=+Gi`)4DQRQ^Pd%MlVz+Nbv-|vxpj)=%kK| z)_b0b@`_zSKMGY0k1UJ6it08n95se#YBmB7u9#)Z3(S%^oEA@d)+(3LGK;=}yM{ML zrx-Dop=<%vzyki8{ty+0>Y$l0M4~BW3pT?W-HALTga?#Gfap`t7yZHv z7ID829btLU8qWuqP`)L{3oLYU(&Eiuf`ZkJstaWlUENP!Mq`GD(>J0s#wML1 zlb<%-VgTb^v^O+{8b$RaOD`;fSG1Re&WJwm!^(%l#fH!@xkA^y|{z=q)uFi`vx;lPlChAkZ`bTLDI}Mr+b# zbZw!I&{nd6;`>W@k)CJN`&Hv{;iv%9W0YWO8$D)3Sfe!hKQt;F21_suS%X$ZlH<)h!#^_gBnP0`(I_}1*E0If0Y z2&J$g78p|42a+yT#IB+eLYpC{nj9y_#;5aR)A@;MV`A))i6f7UjfedI@kHuzp7JpQ zi~u9R2rvSSfFuIfAM3>$!Amc#*;peW=7Gs22J_8Rs726kF&(QmZ!5L)TR$fBL%bZQbEB+}?)+x!2&_ zo1F+$q6(T89t4MnPpJi`^}53~d4Y!~4$ChSC@n*<|3CZx3-{!vU=;TMXa9fp|A#v~ z`~S25KLQat`Trkk;r}luQZL`|M2By{2rvSS03*N%FaiRB>qZjM0kgAfFT*LIi8eRy z*Dq~~#m&=OA`k$X0<0_24)l`y>NoTm@x zYah;Ud|2AMK30mqIph-%egMdlg)LO8BC3f$Q7@4jYJqY;g<0C_f&P^+lNWaTLq~$3 zjQEBk+E+_fFlub&v@kPYb>MmG9ia4 z{PVR;d-+-l|JoS=NCBS@Q}}O1s$;Q!kv+JUuD^Y{zow1+ZjSx+e1ENe1WJzl8~Fs3 zz6PHK&i~K(|Jnba^Z$#}6FC1ra<4Wr!m|HA=l>T65p?qZA8+CR_asvHG|g=I4@Q6y zU<4QeM&NCZ!1b2~5WoNW>*U1WdmdZ-Nb5(N{+?+qA+w)r7U^6&?4dWEs7J@!;S4lS z9CL=Gf0l>ren`=ur|;$K-@~py()`s=;>(B0`SbPf$!*muIU*n{zu5W5K}8}R09s=s z6F)rEMam)P3Xa_ps}poamxW`FaE6*V6;LjV-cGJ|n;gFanGKBcP1H z_31%40?f^=r$nH?BaXil1U@`;9mk)8R-5Dpza-uxa&K4iW+_ka<-_;nL;YiI|4TaJ zi?g0Py9vl1Oo-3nO!Dxcz^?HF%>SAHGyiA)&-|bHKlA@>=KteITKGSo|EE0V<1a7* zi~u9R2rvRb;QC}5UIH(^xb`Ae0D9#pa^UCd=ilWKksrWCApc6>`A**S^9_H_Ca?VF zyn&-e)0^E~_P2^AP$KHaNymk|sc%)5u*y+%Dix>Xzy;SwLiQWTBFOxo`9Jf2=Ksw9 zng28Y-){bYxP|{emPkFu(>O+e5nu!u0Y-okkVD}5<3rf@x2(12MK-`NN1oJ)d*Oa~ zzV_KXCDqFdcl?bNfyM$rtlfV3Yy`D%0JB&`j&_79gbDeO$j~#(%OV|MnF1M>Oc${N zqlRLrfovi}=Ksw9ng28YXa3LppZWiG^Z)4<{(mNsIwLpZ;ZHFFi~u9R2rvSSKpOEFPB}QQ$RzD3qq@Z zf^SAHGyiA)&-{P8`TtZ4|38&TooX|e;g=WzMt~7u1Q-EEKmvj54`&et zaN)w*1rY@x!>%oH6ko{v!=v~F@2?-lmk*EPyWmz$1IG!Ln-iYfjW~TVWi&1aI5-Kf z`GLD6T=BQf13)cYKrR%5^Z)Vre|-KQpZ~|_|MB^MeE#2dpZ_;L*~0(X|6gKq#~)z? z7y(9r5nu#r2wZ>vA5DK^wrN$ub4q3zfdx*)7|l zI)HHc?^Q_3w`7&e2)nmDaNxX!e1PVXZB_G2L3tSm@45M+Q}wK(Z(&paIny#O1r@Vu z8;e%e0&{L5?GfL5ampXQ9h7l`pE#zl>fyKn1onrg7jB$6h!Fpv=m)k4?^me%s1eUG z;R4bJVtvGzH{E$t9F)~%O0*nA7 zzz8q`Z({_mKXOax1aJoAUm^US!u>ZQ^(n|7Cjf+L_wr%dy?mHI7v2>~t7_f?NWXjoI3FGB4!^M{}BR!*TR_n ztl_3NXl;-lBUJAAW@B*MjZMpk!V#%!=?tu+359C_(@bdcR=Sk^z+Qx9xej znd=9rjv(@zQU;W)+KpRSeQVBv*x3r1|1U>2Uqq69 z8!`R$`?vD{*hIZKLtrcakG-s*)IO1ZAZ*|W5*(I{63$paOhv`P>4#Qj$#K(mwP=^@ zlE{D<_(s{BhkJ#Ab(rDdl2aDHSIk8msu-@j3=cn2BVK`T8MYhXefpSTSJSSwN9qKT7y&O?B9}tZE|;Zw0R5*{GXSgtJ5upDP9&|IhLN9RJVp{~Z6%@&962!Qe82)p&9fG{levhdQyl z;Nd;9f}zYu>fpdj`!v*Hpc}zreo(aMDWNXT3bv~w;rNEnhNlaSPK=FD=g08xa0~xG zkw~4`z8MeSnGs+F7y(9r5%`Kl;QFE4KbN18X;yc+)K55C`$gGX69x z^xhd9^E2U$Kys5(_!DQ#FQ#=R&3Egg3LjVfy?j+p~p71vyUGOZbX`BP5DW z1-=&!t~jj{3s!zQ{j7^D5IEUVR0*d}R`4tQBWn9tqDG>cVpj{>RxZ3b;6K6p|GfXt z`~STE&-?$|zW+bf!vD*OR5{+%h`+@MFanGKBftnS0-X`KzGDxT5l)_5J1CYBx@FME zX#qH|5C3cD_2t9!`ttSj`r@2QFlwlrB@jPGKz;3j`9JUf^Zq~Y|MUJo@Bj1u|90>H zPqy&?U5V7L&T|)jml0qD7y(9r5%>y6;QA}KrxSy(zrOZ5XnNd$_Ib*$m#^j5%NJ|; z^^o|#kza4K9{?f%!o+=XpEqhq=K7CM>f1RPbUbcQ#f5?SKl6X)|IGiH|1FpLw7&o!Z>0W5 zq5;nqN$bQ(eDy4V^^AfBG763woyoi7BWnR%xV_MI98TO04iK2HI`cR_ApR=CoNF5M zuC84=ur+evy!i6+slh=dwIK*uV>psd_XPR-Z{zB1hCPM z%xd*yeHAmn4aBK;xL_|oDC34jcm`ODSWz%N>5zdrWc-IK0Hr;|0zgIh7T`~K9*Dz+ z797{NakFmu3_AN8F#l)%&-|bHKl6X)|IGiloBxlu@c-8nsn_4$lQ?cYBftnS0*nA7 z@FhdwdSX8^4Zt5@94iNPAAK_@nQ*kPAS%GO&0yXZ`~P`*HD7;uqx2$mQUuE|_@HaO4!=3uP<>zUqK40Id&)0V9I|k}2rUFnR+HKD5 zYfd51ebax2G6vM#2QJxV2a6TtK!D>6igpQW4Pxbi1jAA#%l--)gL+1a&4Z0&d8?-j?z4!>_zmI5zd zJ4ZcVF@3nyOEPCeKH@-OBmZO=JWw*1Y~kb|Mi5*Ur^O?bplC0N8A?!I3UFGyHEJ~Z zBOu_w!`G~;u@sb-k=hXX0mQ-ZMc?uRcZ+0%O3M-=Vd5eJ9c+ID8461Vj-I#dz{45z zhCtGB({>eW3s_yi0rWVnzHGu}0eJ>}V|cjal*R8AbFqp8=gT(I7z__TQX^i0ZyB~5 z;C=d-VOP_xwd7ittg1+*h|}z=#m;F<|}=arg#2Qi6(SR*kAv95E~?oRF&N zr>jA=IBLvTRSR#19mMdQa#^^^1SQBNe66P9n<&IG+-IP}LOk>KJOqh^nCV$@9*1E< z6p(_Cg(%;~-HNv3T@DPh1m6~T#hA!<;a(2JM-b~Glo;MPCgr?v%@KMHdIotqUiy+< zv5>^mfwRnUbP%g9`M?dl5o6Icm$ANs)*jlb=!akSIn{{ zGKHGMY4N0{E{nT{H%6xz+3487f72hL!pp$FinN`mWYH+2O9$R)`dJrCdIBZtYUrB) z$+M7lv}Q!$Gen;Zo4J5q;~5npI`|n`)K5l@GiW&Ko@V~f{C`vDZS)q>d7*!0#Icpl zO3`sepES`kHjggQ*iqxTMvqU6HD;lX&{nI8M7HAlV&NHCYo zus3?lh_FU!^#4WlE@am&8{r|m=&z3Wa7~%%ov91(v3&HqhBXkw3Tlex+RK&;J0ylI^rv$e>pZ+?R$wlC3qy{V_GzfYKsRD6z&_Au zO%<`LsDv2b@Yym9pX-cHjEzs{$ENZVhnx6+y61ZmxhvW4%zSJ5!-MY}_^s5pBtNaa z4=?i1mk|PMkEK(Io}M?)6nZt;fKWqeTGg0U8FEukg_&pUgwf686jZsx)Y4Ge3Tq_A zZg#k(PPU8*8-`Z1Ht(h3Ih-q2M2Kx;3XH(mKxE#2CGdPlbos`dIP7ZE`HAUzSDRjc zVNeM0LrDlw65u#ze8-1c!6jJA$ygF9Lt2~TW*0N&+9n;BJ2K6Po_l5xQn2)b5Mej7 zmfKy}Y~)C9St7{$;ATlG0?5npqwfzI zDQHbSv_;d}800$7t>w}%L@o^jmZ^~pqmfHPMct|6Vc`m4F0k^xYgRoRgMsnh$7H}m z*2{{>hACzW3&hxMeCj64e2bAQuBA~*5Ms#Y{oHCQ)g;8uW;Ut~ldJuj(1x{QLF?vb zq|%eOnhbPUq;0l)og31?qRG<8>t_^*Ln~)`1rV!O3tG(iywZ3e6F;Ulort!nu$Jr* zZF<8jgu|Ph6|S!+Ni9n^ORdF*s8I#=5m-?5PAo!UzSqv~$J2wT944}0xPyuBPh|fj z^L6P919vBXqwk;h?eF>bcor(5G#;5ZeqiN~36;@uQ;|>M(PT%J%U3 zqdNsuZ=D8Iv6y6?N;H`=70s0%Komv_g(=3(GZ#t*R5Dt2tAS`6jEzJBuc-b^uiUXi z=+Ek)a#yP>PRr7YBteXJyJ+R6R`=gRb|4#9xuZ|%IABPPiX=M8q3kA(5K(w0*N^Me z_c6X|@{^DF^L`bp(A3#m#^rbeTX*uQK$K!@snKy|BhFx;WOlabbSfiORFMv^kLO5{ zrlCkm)loNN(sonAoVA-YHR)ZKS-kYfC8;fOq~B>O(3KI@wITM{ElXshIy1dKktLlu z0-aG;1K9_6>26&n;9UW1Gd^rV#^cCV#a_zx3k4e&)6A+(xSRT0vz?DB&D83pj8K|4 z?uXLIt%o(;ze|6X8@{{fj9T+!O}R;zBxewErY8#Z+(~}9TY-cq>2&+`R%(Lc%6$w? zYO!_Qls$_3*lYU*>?$=?@%Ye&w#wgf_S1NZ1u-6_2*zz}$?_X-2MiNHZVJO;Oc)RQs?S;2XQgNL& zZVowltm=x}#En#h(q*0~XGyl0d3|ZN_PUv>cvBonwYs4tiSe=ZeYXqMdTR)(wFQXX z7T07IJFWv=Ec>Fu3EQf0C!^Yi&c^O&oeZ?nqMKbiZv%=Zob z(ctG(pG(W)@Pa5Mm`nI2RMYL;tZ0*Gd z1q#sj~3NYSGyQ{eTp`uZ77iq>P)(74}UC08=lG9O@iqU5k8?Mmnwor_2Q?oYH#U^Xm zGWd4VrLGDhz2_h`ukL8&RC;r?$BnN)alcT7w=M{4is(Ot+*%ay+huT&ZeeV@w}qG$ z`mqW$l5smt5VdHGlq}Vj)H+IDvj0m`3CT#Cs0xj(y>=g2lM_%OwdTpr*JB64bZ5~D zc1K0?u*-*lVWWxV#GH?)tl)GqT1wQkPSd)P<0C6i+$)5?dI8&YF#u}5f7d1Urta6p zLbbOaQT?4*-+d36z#hdW$gShFM>6gjplqLSGuSD~KepA5O&U~0D>*4uGDcCw7+*2( z7K*X92Z|B9U9pjrZKOg{ooE}!&Kmt_;``CUPPU^-IL*UeZYS<6j4&@ z?&Du<^^_ktBN{S3v9dftJ!__rju%CsGAPRFN5`pFyrDbV@X1wsTr~WR2hecI4j%8> z-6gLyJB~rFB#C7Q)6&fKI}i6!tPicvj0vpYdLCG}pA0C4eROc$ibHrM;gKEiyHe67 zoI7JFmxv*TK~)&4;!lvO#YT!7%B3cfN}0%YBidX~Ggr5)&C}1Q4i(n!dsyhun+Kpn zF*~BtysM)X+CqstjZ?Df6Mu}_gzDCrOC-sq90`w#X=3H|Q5sK9i}9q!y_#hk&-b7c zw6RA{wGliz;fc0?d|k_n_Foe_1JWxq@*}vML8t@YG+l|aFf6-bq13aKhP!%GT69Q( z;KmseloTVX1&3Dd9uZowx(8a&WbT`1?1&MR&I@y6{!h_57S`VL5NYZl>R3m)Nnzpu zN8gckaHsT~6=Y^CiR6WyvO1`baB@@4PF6)p2RcWqNX{?gn*OM8C)WFhNw_aVxbe-S z$}C}vAyL7!Nt;V010p-_#xjr5Awh27Y@ScI7=@ds2ICa}-}9Y`++Ze1pBa39;GzCU z`m)-O;3fX~GC^Q{$GfPjzFNq1u)|90CDJ`f#av5ms>B&HI?l9XPW6>cgqo#Sn0m)xC# z#haerveYGOisY=!&FeUa*LNSIc}@=`r+~FwJyiz9juMfk zB(gXw>7eu~Q`=!uVYKgLQ)4Qn+~^y%sMBk=%+lm0fMT?vI&s*5;wP!BD}B@Q(T#DL!|TVMpmE@3h+3rs#-8x1Szw_`N_4PekCYxI z?5gFOB1b+B=@N&|i9>RnN)>y!3pkHUoS9OxJX@Tph?DT@V!2tiNLnrH500%5F+HE6 z7GrvK{&5;L_Ck$r`gB4?#XIj)*AZ(GRXj`GE=Q-rpx?#MF$(h3YUVKk@>&HTZ^M+K zW7knzn^NlJQieSW$K-m?qcloAUmv9;#~c+iC*K$4Ry$+|W$d!!n85I4Jsh8h^It{Y zzOucDvpnb&!1^&uF;!PZPvb1GZQ&T#E>=n2Ttsz%^8ck1-n%$su@ot$ zIh0xn?lk1aCZ0_Qbm1$iMq6d#92NE9)yvNaQNJ-Q43_dlTxwKTJI|?;06I=yq%CB- z@kx@^#aI}LVm`fc@o9ni+OC4Gl*d#>jXJ>?+w8YrAc?eaVr=cMcZ(LjDO%W6>(=hC zvf0tzxO8$KQJDmG-4!L-OU^#k%zaFICT}Ss5`u}}af15&tB_D^yB5oO%h?PS(Y0B@ zY_F*uGo;1t74gIumC51t2cHr$dFy`2L`{Rb(9D}3tg;2ZQbTOLAGh%HPIe-O-IXR+ zH?`wSQ$LkyRa8}`SD$!NsLJ{Us7gHji>DK9y4p5R)g_l@yYzr4gi~t|9H%krUaYvs z(Jv`o?=%dnm^dX`C#{6?BZx|5Ya1PD>f4AVX-Le`nMNcPZm(jYm3sO3%Gu|Imf&dLo$;wc zSIwy_ZPPkdciBoUphs1IY<2WG(Wv!tG)f(7=@GW0=1SV+Ix;Qu<@(D_fW=~D(E&RG z*!Ypv{tE)IHM6io@?4lsbDvoC?5aZwomg@>hyXD$vGR`d)E({y5HU2T%dre`$G2!j z$JcK?Cn|dFbyPGqxmB5@5*m^#BwNe@B-i1(YC>EXW9=ryQf6rrazj=ksupAG)>)wz zAG!-_aU+A1;v84KtEi}6hY?M2cHMNR&QztHZ-Ar%cN^HGwL@+K8cRb}=5i4|!+R|gLFJIURBcl3_pr5pWOd$uGb^JY-ERmn51 zoxs}1jBb0^lg)+Hu~*2M5h?bm(AQOLZN1+#&w``cGP!0Kg-EYG0FkO`yW~hKZJQ;> zf{ub|-)yxl)mSQ6e{d7Mh+z)9Ck~W#zlzHG(8|?$8e^V>th?BiW*gPKw57tG+v8%F zmrb~f8e*uZmT(yBqFFY5)52>N+xH#gG8{}{AmYwTqirv&K4*%yztMxX%R;E+S<+E2 zrA)yVT$j*OdAGb{>jW^AsT86eZ8deu$)6lM}c1mm0U2Ths zACOcBj0(1}y8JQ?m@^QpI&o4lrPAsU(<;WA&~@#lolNA7*x`xwN8d|!__VOYD(<9` z6LQ#E`H=ZoHWR50JR~|moRa61t%`^Y!k>s6n#WXcA@tjiDN8ABmK|l=_UtC>(1o0L z(t+4kTxoobc3k5Bxx@z&xgW|tJ@iESBLg2DIG*}&YJc)G$y3@w@9*?n$D7;tv#Ps7 zeb>Cg9;G#cSiN+M;aPSdlALy^^q8nXrdLm27Kp41L{zk^s|ivVgybeHk^wt0qF^F&)Kk(kp=+n<#M7g4K6JH8n)YO2H>{ay%)8byqRw2?x1Fj*r%Xu>yIsT* zef0F|vlX%%0iG>6?!`I!Gv-LF)XAjRFuIFR{*=5Zq*G3rq*;(gRH+k0A2_)(^*-^$ z)fqfd>0V0lUu`Ec3hN}%iXVFF6_Jf}QMKC9I~CU6Zwm;nJzcm>_Lw1Qb%{O6x|w>` zCB8aNpHvvxyV#XjTl8@k5~9+dT6y>qb$|k-FD=$i^J=wT)J@LO8c(hdERw!jLSN$u zPibWDCcZ5Oou>IzmkB}aP9jfZJBEs=tOdx-#tentabresb#Xzc!W;KO71YMN7*pi9 zovxi!Q=C=u5ZC$DG_Kbzxby8D}j;-F{7o{C|34 zCZT^U`@zg#WnLco?BJ&d_NIP2>Gyq3`>)!^dVVJH8s6UeXKJNKjQz8PJDTZgGi{3q zu`srJd?i6rH1X9~rn4QHQ%XFeqB{!at?dM>6O&M3Y!M_Uj;uZX0RiNj?*ouZhDW92 zE3{wAEXR^~Y^&F;=aVKVExRiWD@`zW=@%1+pZi)N%#|JpQ`S~QJ3>@TrdJcMiyN<9 zDD0Kr(^hDuf`ZgLNXvGoBsZ2sB?3WVY^CpO2-}wdf&BDRWmR295=YkU_ls(L=mAti zlB%n$!f%@i=%B}nj-avovBC_kyK_v;;XcmD9Lw4%8>NWKPaK|pO^nWS(6mkiQ1pw_ zYr|KClD>HmUyW6JsZpSlO38JN*s7$|O(bp3R;lbHEnD0P@znZ(D?(Ur>4n?F39*`6 zZ97uXZ7wN&Mu4mjrOISX+IY*#O~tM>>1-D^y~Ri;)i>fY@n~m061+;|-s4b@xOeSp zPNR=KymDY!Ja<*7rNZ<;dW&CabthWC>6Ju4xLiQ}RHPc$=0vM7wXXZ33fDYTLCGR@ z?Vn2EsBEol-)ImQSCus$IUC!|$eQQu61k40*Fd5gF{^tIyoLR|{0eZD?Aile4ocW$o zS8kGEv#v!XRv2I3wUQ;1@qRR_KE5=$n{9iA6RsK@=8Xi#oA0^zuHKmBBIz9`erF=wB?1>-jyM0`HN_I9NmvKps8t#ylAC@ z)1oL$tiH687AU+i1Qfa|r;>eA=_PZ66Z7}5@2Dx-unJy$YA(GDi* z<<)KAS20XcVT~`WBuNqOhOD|hN`4%OK4@&kU+EK1T6+{virq6+Iu!|ho8~ZEtd&LD zJ#l3H^ol0h{g#Jz%Oluz#X{By$_+az9Yn!c#g=mnE7uUoX7i*L4=Zik>z1%(6pcN> z>@f3)s?_1t zFYpf|zz8q`i~u9>m5IR0>6P7L4zTJK?o>%cECTSv`NTdwVfQM3)?E9X{rP#eUyjI11`R&P2m z8~HT9QXDqgtV3%TS8fr_y0#0=Ql~Lnu)J=jNkN^Y*2|SPh+{=@v^)5wn-)p0y~XYl z(IvB}hzo01S9B8blMr#Ibz52M+cCaFO6BWn)3gquuxQfR6sS0K#!z{=QD3S + + + + + + + + + + + + + + + tests + + + + + + src + + + + + + + + + + + + + + + diff --git a/integration/testdata/symfony_app/public/.htaccess b/integration/testdata/symfony_app/public/.htaccess new file mode 100644 index 00000000..2776637c --- /dev/null +++ b/integration/testdata/symfony_app/public/.htaccess @@ -0,0 +1,66 @@ +# Use the front controller as index file. It serves as a fallback solution when +# every other rewrite/redirect fails (e.g. in an aliased environment without +# mod_rewrite). Additionally, this reduces the matching process for the +# start page (path "/") because otherwise Apache will apply the rewriting rules +# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). +DirectoryIndex index.php + +# By default, Apache does not evaluate symbolic links if you did not enable this +# feature in your server configuration. Uncomment the following line if you +# install assets as symlinks or if you experience problems related to symlinks +# when compiling LESS/Sass/CoffeScript assets. +# Options +FollowSymlinks + +# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve +# to the front controller "/index.php" but be rewritten to "/index.php/index". + + Options -MultiViews + + + + RewriteEngine On + + # Determine the RewriteBase automatically and set it as environment variable. + # If you are using Apache aliases to do mass virtual hosting or installed the + # project in a subdirectory, the base path will be prepended to allow proper + # resolution of the index.php file and to redirect to the correct URI. It will + # work in environments without path prefix as well, providing a safe, one-size + # fits all solution. But as you do not need it in this case, you can comment + # the following 2 lines to eliminate the overhead. + RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$ + RewriteRule .* - [E=BASE:%1] + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} .+ + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + + # Redirect to URI without front controller to prevent duplicate content + # (with and without `/index.php`). Only do this redirect on the initial + # rewrite by Apache and not on subsequent cycles. Otherwise we would get an + # endless redirect loop (request -> rewrite to front controller -> + # redirect -> request -> ...). + # So in case you get a "too many redirects" error or you always get redirected + # to the start page because your Apache does not expose the REDIRECT_STATUS + # environment variable, you have 2 choices: + # - disable this feature by commenting the following 2 lines or + # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the + # following RewriteCond (best solution) + RewriteCond %{ENV:REDIRECT_STATUS} ="" + RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + # Rewrite all other queries to the front controller. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ %{ENV:BASE}/index.php [L] + + + + + # When mod_rewrite is not available, we instruct a temporary redirect of + # the start page to the front controller explicitly so that the website + # and the generated links can still be used. + RedirectMatch 307 ^/$ /index.php/ + # RedirectTemp cannot be used instead + + diff --git a/integration/testdata/symfony_app/public/apple-touch-icon.png b/integration/testdata/symfony_app/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..11f17e6d89ee3b416218ede42b66ec1dd81507f2 GIT binary patch literal 10784 zcmWkz1yB@S9ACP-8;%mCRJxlZq&uWLq>(-vq`SL2rBgtpyFoxeqy*{a+i!06c5ZIw z?c4YM|6jdG6(w0LbaHe60I=ksQflBm@c#=H8T{VQUr_-7bV(aYNfkLsNm?hDPnI_J z769;hHAmf3C+UV*Wb?)XM@wS)tRc-l5P;BEqyE6vEyPU(OhRz+#fCy7(6tDO@Uo$r zgFy@E(42^0`LEin#J@!7MQIxF{iRti`|9U?dUEox^w71Rz5h7rHH8Di!)HqPU1$sN ztAz>)EYrj(LkCB?VemxIEks(}-(%mbkcI%@48iNOzgxZNBV64l03L8!U}wM|-hK)0 zP+`&rXcK@f2>w0>T)Z0agI(hXA@G9~s8???M+cGtz~0MO0s>TG0mqkeB1ph;MbbJ6 zuv|!4feOUH0U57k8Q{e_0b|WTHCFh(Z$N&v7=#_MuNDrb+wx8p9@dQnc*N?&8*&1LK6zw4j@FCraey{r0D=DF18l-{&>&Gr&1hETg8cDEP_Q#L=TxEp~qlQR1!R z%|89}aA?3&EX&LAREH_| zDYc+{9kcKA{|g5ng{?E|0f_luutk$&BmlTpT<^SY03fONE>7$X959hqyaNDTe@G3= zlSvf6qXK|be&FkRaTLsc!s7?Yl3JU%F)9CI>dEBFw|P zi?x^2kbn7}?>ghgg<}XyEwq~AQ8wG@`kDEx7E1N^?kn!#q?Vp~S9m>5KdOB+Y( zkTVSvo9*dvYsGP!QR(n{5K;8ynw+9Cz(>Idj!{2`;C{0YijSAoQPhzvXFR5F#_vGY zMhgyk`;8frRIc32=#76j_}NsTAznwOn&~ecHC-;_M`mmSqa-K;_DJHc5;`4Y{5v@e zIXmbYl&x63SY#I0CR>r|DBfY@=Pqg^teQ40p*0>SUODk$WMH?IP+%zHmm*prgIaMi zzC5>u=pJH8-aCnm{7Th{irjhB$_RlxJvoPb4;2pe@CpJh_e{o#EMm#AVz#1%=}a3d zn;UD61Gf&ejbLi&wCS{2yFVxg`v<|7o|sr+Si!?k(^q76WIkkNq^)Ee8H%Myb7>hr zG&q;uQDj)9H}>Z6ulsf=cm z%1#B^JaN@R1(jxJ1yAjynx|Tv%9N^6QIFA6(7hQ}V_2w6ei*b!!>si?SqvTV_jeZm zbR-sCv=EM1?b1J(>NnmUD|#S3P4#=nv+KS?)< zHR;2Kz$VJpuxMLjS>s>ByXw8#vub+cazcD^w0i39lp~hInsX)KAaLW3*1^-E+7a5Z z=00^OGG}(=b%1s?dWC(kF(Z5Ba9MOka(KFUIzz+D$%V=jPiFs?&+KeG-t3QEx=q{6 zS;%%d-k5bq!k~50j9d|O8`Ix#s~zsoBqEm8pD0bMxqe!#+XN|#%`XTkE zI$cXd%S-D@YpGgp(cp;n$YD|2UWGzC3o}a~YpkWbCaY%9BgnW;nN_?tCK{r8P7dQ8D4|}JsqvCC@fr`P3fdg$T3abLw zoC|J}Qib?2{4|d=5_N~NFJ+E--eW0yY(fQ>(zLQgyRrc*7exKu`$4A|d58c$tP1#Jji<}NW)&}*ry2pHs1w@1` z?k5irM81o_=XvLa_muWPHidiW{TKZ+{81ir9|Z5mp5ktMx4q7Z|0y9E!}Y`M!F30c z2R0$tAJiBz@{5Ij6WYd%teQnmI!>ikd^DM{&q(d~k3wk<9mR@JulYW8NwS#7Yk%C^AI;kVNN((v5~7|>24cL$dTg(G)d z;rHz`-)HY;YNWcE)$Xkqwv+rmm>kRX6w>9^jrZjXO~+4b6x|D^l~CazRo*Le{6Ix; z9+DNREZtKWQ>fa|+9ofQ_&Y}{<(h9p&`8-<5AWzPf{1;)YJ9^KI{J5g7ivv64OVi zlX$YfHB{>`|7>$M>o;aS)|mRF@=Hfe^W4^J{XAAJc($ZO@=cI7S4u_l$e3g8rCz%k zkx7cV=BaJkg1%P3YmyYBYNzV*+S_`Ww%@*Tv_#TTZ-&ai4I{>AK37&*xQbSv<-y^5V^o*11#;5Okt(I0QAUOO+~DZ2K~2{0Vf zda9{v?O9=3UF_ZP^tr$erXmvjd76CO_4UnXZM$x1zbnVtzd;*uAlAOCcf9tyjkk& zv!n8-U~*u6U}7^Pp!Ev%2 zaoV~0Ij@BO-R%Y??Ub39<>n}f3eRV(d)+8LX4o038g^SrPUVV{xcyaZHM$wO__-fv zc-G}~3Ar&{V{BEZ5v~=M^>=#OhSuqSIN-p4F#AlzW`Rfad20i#~^~TjM_C zsR3P_Q*5;G+~?$%x$x~-*>TwgdKvndxEvZ93M}&ObMwih?Xt!)f~iq|trxE&*Q))^ zr(X{WQ#y~!XBc-;Q@yob6&Eh2RTXst!}P;6U6WqI|4JWgCfEE<+fF++hr4MqUOkFE zt6a?7n+=yuE8mFh`#wK%+=N^_!1x*QKvjussvs)`y!`*k?=DLM0Gcp4DRGU@t0#sw zZW@{`&q`PssJPPrTuMK#B^mh;B6+ruzQzbkiI_!DN6SNUx z^!U182>!SjN1A=4Wx^}U;p7v;&xDe~n~VbH2Z7$6BmBXTO;9nYg*S!+bl;q>tWJqRk*lI3X;v=S9G zFf?E`#jZR?sMzL>oCD8&?M>E3j{vGMGYlRO1PHg)zCbfkjceZRKwX_}u$U%1?*eKs zI&*w2UtEI)B8~tUFR+eA`*)U8K=~hF2`nRTg_OEdz}>PUYY2+TkYos1Nh^Avp0Qjd zT`a==Kshr4I*iEmj^>g2gn*Y>H_IYO`vWHOq&;nnKQn`L5i0IUDz9L@*!zSOvQ^QPr&7aK%Bl?IavZ% znWFKK+<0yZ|A0Y^rK_rQXac~)Pk3FJfjWMeiLmuM%I3_Bi0+`g-?-&cn(mpnqH#zQ z#~2Cr@gxTbL%986x@d$cmA{AE*w;zXS96jAJm-s57dCw0L29{frc7TjWD3Cmh+ls* z?ZkaHg=0-Z-YB!FCphTn#tXcj{e^jIGe1&}M{aRQg}8-5VVy;!ViwNbO02W%#?pY{ z6uEhgkZwQS>yV4^i0*Hfr7Fqc3~#preKbPY>bKrOo#S@mz%fa6$-1kyeBW9wS&S>` z0<#ntVSafQooS?8uPYbSYP!K^c3MPsW{X6Iw?;28NsH+7ZL|(BTGg_EJrFL0*`sQw zAxd5dP~e46!Ekl-X<;km3t{1$K5a2%;yihKJjn5^i)Nh$ER=Ii>g*%jA@zfOv?Ps; z9P@6>urxv;m_2Fqu}a_`e`Cf{@_(zWsv0p7{`#Ew6)1h}kwHukPXfbXxUi~f zfP`DL>IfUMlQ1c!!y*ZoXSe!;S5mY;M(*yK|3A*ozxPjF+{@Cese2dU* z2LYEc@PUksEIB8K4f!2sy6E#Q{f9h}oZ+FNgBFLyYF#)9RW+E4$MLdwnvs8d((`U2 z*?r4zhM?AOT*zOe_QdD_c(Ep{snWy4L)yjX?Qoh|O>IL9z28?$M#}g^i0lceZ2G^8 zCk?*YUIT4~{IKGO0uNLhIo@iX9o<3F9dzccC=!lTtAH)<{T$EF5)wfc8M?Z<1_Nkq zgZQ`4PY+&sB7WJI4VVly(S(JsLZUTpd5sdK9F$m{PfYo7DQVf+W9#%=*=aAGCo3u{ zA_?%Orl$7O3_Zx;XuqeM=nuzIDeO<>;c&u-;%cntmzIVpXS^G-2|$-9M{!bM@Wa*0 zWJMrJQQUHAx8CS*4jo(*uQ0-YZ7?!2&es`< zQd#I|N1>Yf5w+DUod9|y1Inq<>Vp> z@igH6P@v^ivTm&cGY6TEG1N0|6N`Lh2=K z0!yTYGf9Bkk0;F-ij64g@|tuq{jFpP`s-lE5I!X-F84!?P9+v`60>OkyD_8ljQ3XO zx=ofdgOLOloL|2||;EZEXp2&mD_#vnyV*tCC{mc%i+J=@;O9@zPZ z*cCi@3dCn+MU9S*)=x~br(rm@Qm|_e-lTHI{NwnkRQilB@Mq9uF7~~Z6y*mqQ`67k z*i@gvit#cvg~UZgMWq*24DW0Mx9&@ZvcqvS%n*EQTDkI%03=s5z+Ztcb9JT4cqj+0 zk00=~L0K=7M4Tf`UmmZLo=S=k7u8Eoh|6Y4bMD+YyYmHLZEbw1si|SAMKUIre`cx! zUY?;!N;1B_LYbMF<&~A_qED9u9;ZKJKJ`AOrlh7878XKOYS&Jf@}|m2x>>Eib8&O` zpLonk;s}R;VB<8o?eQ?<3c-&J1p4^)n_c&nI-g-4RNm>q84mM#-cww!4Ysg>Pgz8` zD75w zFdRR(+{*?fYHsS62ZT=SZvrw0cu_hLjzOZuRkY{78t-{p*Kv*{3ekK2Ko_d!Y8pE+ewtm++?)!qQniCp0|EyLkxG6FH= ziF!Clp)9r6pvMaXBjZdqzpM2`CU>*#!t0K!MScANMkS}+x58tJ&y#vJ*doeyWV*Ki&tf-)=;kTLcP^-!y4QbE}v`r`{SmmAj`8%ZoAKF zYKawJ+FbVJB@M)?AkV*fdmHv#M9hESj!sT$;i*VUA_za84Y1Wf(2q>{VKa@Lu>6RI zGuf*a0-jpkS680`9n>w#a7P)e$={r2?aOSZj$%OiE(o@1L(wZ%^1ui1-7}(vd|e|H+_Y z0lf=oq%=jqBfu2&{5yVgyfT0#WY359@BZF9lgB~t2Zh@E_wVn1cKaY$B&Vb}+Yr0d zEsgcwAHEq7h)@sRshui}1v6)LLXQ%<+{ z4HDGux?d?EABXC3vMLR7Ahw;hi=H0&)W`^0vis#9)sDO0S!e)_pa*MRMa2vSYvLi{ ztsG1W-r(I~(p$6dXJ9>5G?Qkadi-6Nn-$cP7sQqLrIUd=i$|$bD4mM%opf(+@1XXj zQ6()aOMyzj4Ry_9y4%NdwZ(x#&X!>V>~mkRl3sgqd@wZMP6jFM7TiRA_`bc8;quLo zpSO`D-#42E+Q;m{fX6aL#P`S0_6c#srH?*rVC^Hh$9o9>zqr)G-cp0G`4R;Z@0}Q4 zczWmSV_mxU<)icLC=yyLt)FOUxNVcWUiz9hWnwAi%9L`@A#Qn7vhOX&tv^6?n9Pur z!{rc#=H;jIL`9(-OFM|*;K>;oBkt2J@zoIx4Gq2vm710BE~`V%UnImPCMSQ7jEpcK zs#WF+@q?xp2PBh(hpfOS65e+JenFB)Ac3;dOk0^ zaIX>;edumA5{UJ&7we2ZMNCHO(nsVM6a-FXaw{mH(mBI#zsDsZkzH&3q&?v#yshB@ zJdGJWo341Ijs3r^rTe))v3Y`??5O?YKYm!-1i%+r$#@fvB_7Avn%m3?5=3C0XFSz; z2l)AQ=YB9Eni)LtAlT3L>i*c`d*@PFT|GEV6TrH56$8oQq_Sg4UAFB>ZbGIqKI zY31vP8-j!gc8P4)#dcS##VT!%FEKF|F)=ZS0CikA$SQO!ENGxs;Bx*Y#p88u4$`0M z)y~6d?-aGq@!R9I);P>+e{<7N^LmjwIgYrQTk+_pKb*SCI>)x#-$GNz0$hUJZg^1S@VkDGos-_0+jHsPznFo+A#nQMI&J?dv8_6m zU`j~M_sL6rbI|VF&2S}g@vV|t{zOlthDtbf&O^9K=Ks}iwP)G z9QrE;SpztL&k)RFPDsSI&uMp=Aja2cxJ)Y$BeaeD7Tz-B+OF)5Bq6i_UcB}8Z>B4w zK{1Nm#VaC`3(h~`|7&=7*fnjeWQ|$iW(}Wt`4HYI1G|K;z54vX8Ghjg6kwXvUc`sO zQ>13uuE?;7Y<_|$Vm4Fqf<&@;G$8$#?f2Q)*$}g`7T?l(gcN-;yaogmY($W#pM|O_ zDoj9bJAS;oh<2SMH5=dg#~C+Fu*F_j%Zal;jQN-1Do6Jt^XVUS;K-rSX~I@I`Q(J$ zB)V!(vUa0sI5Oh@WyXXtY;=4d9=`a$+fi9(Q(0VtDl1=S3VFHcqk$(JME?YV<>l2e zIKY4I1Fv(#u#pweCIiJ}#egW=*sx$x@~LdyrKV2L&ujE}o_?GqxNPPNeAQK59es1O zRLA{om1o~Y1^zb9#lc+(fTeO6)t2GA(Bsg=Jn%kU?9BS)!X1_U4@oljYJv8g^?`X)g;Aw6d*T>tHk4IG3NZ@0!!EhboUhN`NG zh4yr%=j9-Qa{8kCY_VMF>3pZQs;W5H+17E{#^DMp&V;HNv}|lKvvYHDeRYshQ8P@D zJmqmWOe%r-2nqlI9aNy`^S?L^ZEX^rhtO!+#J20%cv)(-tM}+{=(p#;k>3N1pfY+DGEDG7~bgz zo4!Uvxl~nIS5-A3Wpz(Vx;ZOu#h16Kz?)pybsTA{9swh@#_iW2S_(A>PA2IYSZ9S@ zUF+C*p!Guj)LYY=r8m$52W$qsbZ>X!6A;XlDd**T{@KPkKLwH5T2{`{sU73Fo{Jg6 zLO?0voBsOsYmMG0cP-RFet!N}930HRAV06S)mHbHZ6;bAs1Dp9GmxB`s%B$TQJ^^8 z>G?@sQITQApt_$5dM*MFfNCV+o8fAdBEW{19em#$tzr&>$?U9}{aOoK#L&I3NSgt> zmYP}+*j(SlsHZKWASxmD2Xo^0XMa0S8_&;O2Hf9)yE-&DSe{B0n)RbG?28~FF>zr> zhd|;x@!}`6C zQW#(iYH>X;+6W}jzbS@&L3*1YLmjWFbiC3Oj=8AOIP=M4$@-mc=ScCCiE63tProyo zLL}fej&ow9QV5<~5enV<)O|%fg4Z7z(R=m{BNkqp&8TPn(g1+`s_Q!cvaC!yisRk8 zcJjN^<79S&#Cliva>H{|b+gA${~=`l_j0`aS)K(Ev=?wv=V#hQfg{iBnAM`x@ zC6J-6B@s|EsM4zW6&V?Me$6!?u;I0z^9U}30dsTL7lI#Q5h&E3#eRNXrREE4tAsPC zGNjScHAf$*kO~W7R!kQI^BcyR_Xl9yQx4KDIy!oJeSN&Vy!H8p!+2V5@oKBshep8owTc?c#a(X8RGA-Mf-HvMi416iCfHixVk zf?iV4#Go;o12j9e9OH3a+^gP}4B{Bv@q}NaLGVh*%ZmdIguJry@N$FMTbEsEad9!N zhzK=Um~X#>{1XDg?AF=#fQEs=cwk80|5X!D%I1U-DF%o=;kqE z^O_;46JukN4h}VxI_h=ZGJb=Y_X%XnHsi;y~)aT1}q$~2~?5e%AsGR z-a^zro2-;YjQap`J||j3_XSN*K-lpr)*SQ%JMVn|CmD`ian1JU*ae-hmYUy1iWRAN zhNn=IDZVJp55>6t-CxIkw2-V7rCVh|=kW5=uoTd?IPLyOu=KhC^R`fT0%RFBGS5EV zP2b?4prF2PkHofji$*NjG=MKVmcj^<6LcH9N5#Y}>LtfsCoo1x>kkD2ED!}_F`&a}N`zqiu`UfxOi4)zIA}KGkAYuKS2#E7IX^&uOo#x3XH%9Wvt?3~&lGE1 zodVn?-**1hgY=oQpxQuG?n@>08q_|gy)XWJh#SNvX5urOESciQ>sLWX0foNb({(z= z5h3UVznk%;9D0>MQ{hkvB;Vhha{R486u;}-!UVxgLrcr@`q?@-#v+iDMyx`!#~kRS zM3-Rm{uyZ4ud)(3Xf=^Jbj8zTt0AQ%)z#RTXykM9RjaI6Hp}?cvnZOe+O+x11sdF0 zyNqz8e1@3rT*ev0`JL}7R#hOQ#QN0aq-AJms8VWa3p>G&J%5ZX3_&RXpa4QVOBLQQ z_g{1LKAyw&RIX{_Kg>e7xwy85NQ|Te6&OYk>-Z-g$@L~r+I6wVVJ<>XBT3BeG1Ay^ zEm7YUs9PaGM}pY6lA&JB3@(Ijmz%jna_kpe?|XUBN^63LD3L(~^Gi!+D~%RxTD`>M z9BRamAI)Ruh$+_dC#Yk|NJz@K&0MB+Zgas$Uy9Ua%{C|pB~n>wsQ^Er5IH9FygPirg1*W@ujE^0Go{7+o{MT4yCIZ+ zO$=LbKLYjlR9+oLt`?;aM-SLC8+vwDTm*sF8NPs=CBkuoIAYZnj_VS^?|%G~^2o3o zKM@)bLlQDFBFD!Si%UvCISdAv{>C)EXK*gAt_6dLK}w26`SYNSP|V`_K;oRFAz{B< z5BEQcc`&P&A3B!*Dc|Vw$eoLwQoHT`{!J+^3nqdG7ggJHZ(A!xy)V#Dd-p9A<7Umd+65lHjJ4-G6!-D;w`NeZ*Ariv(;{4wlN7Q?0S8^C zt=knN7$CH0AaI9|DEKO*1U`mFGRgfV`Dq zl^eKpL_`h{7U2O~-8Vl6KysDo zI8NuhKrZ$&VOLUAELIk|lOh^`qQ{Q#e)>6{l$gjmB_FE><_|_Qvl^|Vh2kv{TcBfJ zYPv!R?Wij+&u39DB}J}Im7E790(*FuVYfH8G88%;*8T}ciZG{v5GJS4Gj(7^lYuDxZoDz>LUpt zgv<70;nnR%)(KZ5W67!Y9QJP4a6u$1K2`-UEY1N{V4~%2kS=p2wHe{0N%WP1L)J8W z_9!_OTvz#licyG_xz8^|Z^THnXD0xR0T55{YHc`}4Awh>@eblt#*b7+yHCCUn4J zO=NuXp75~+e37@XC$@~_nQTa5`*6pLWbxl|#mjz&)DCU&+W5Z-7F`^OnW^V#U6?mC z$;kj@B)$y4(OunbN!LAj1@F+J{*&x>M`RE9OwboM1Id?`992n;dW(KLzqZ{+hLx*Z zuG9IXfz(^&Sy1@=S1dxDjvX(sn-IhJ)nkEf9SWyGJHCEBwg}*pLS~fj`-0tfV6C-K zSkm*YK|)CzfWl47im%NQ!XE^4LfoJg#C^(V`WM#&0rrX+LC%y~A!1bmA0a`O<*f>L z_Oo}waL;V6zb@oMp&jsTnEtl{#LxLZKU(yWC-)0syi_!lZMAN{6#I&nJ!%!H=TeA< f!5M*n+r|-FL<1!X8KKK0Y+4-K|Ip_DgLX_ZFS}O27 zD6VZ4Vy_V55P%DwO+Snf_;2^FO_X=lLt9ZPzz)z@c~ldI{Q@#slCUp96W9qfs%tQ*oXL6(4`+eocJ>~>XTi!Tx6`NE0#k>{2Oo} ztK9}W2EBZ;)|i=(L{i>6UU}sHFa>93DOU?()OGNh>)?K^U==8P)fsB(g!Z`H)Oe2K zAL8V3c}P=UQK;p237iK()-qO$m3q1_)5Uf>)l?g3abZDzzr3uhc^8WX1k|b(vZuwUYd`2nOcXxJ?f6`A^uQ+Js>k0*)1Z4Ms zn^LJ1IeVQ{e)veSS*BUf_2AsdWHfQT>0~mg)MIP0(fZmtg+pPwU~40@=~Q74tpCV* z?ho@%#bU9aI76NxIeHwFNF*?aMWwIcY>?`WCUqU3p`BrU7P-H#KQlGy-*EQ!{qC?| zBHyTwqR}XwX|T}E>o*E#8G_CNzUOjq9hiOEpwp*$E~o3w^mcAenG2uk(7mCIUZ>~% zB=me1mhaCn;Cq#;BX2o}t+|y3?+$Lc6{R^^&pjZF^ literal 0 HcmV?d00001 diff --git a/integration/testdata/symfony_app/public/index.php b/integration/testdata/symfony_app/public/index.php new file mode 100644 index 00000000..9982c218 --- /dev/null +++ b/integration/testdata/symfony_app/public/index.php @@ -0,0 +1,9 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use App\Utils\Validator; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; +use Symfony\Component\Stopwatch\Stopwatch; +use function Symfony\Component\String\u; + +/** + * A console command that creates users and stores them in the database. + * + * To use this command, open a terminal window, enter into your project + * directory and execute the following: + * + * $ php bin/console app:add-user + * + * To output detailed information, increase the command verbosity: + * + * $ php bin/console app:add-user -vv + * + * See https://symfony.com/doc/current/console.html + * + * We use the default services.yaml configuration, so command classes are registered as services. + * See https://symfony.com/doc/current/console/commands_as_services.html + * + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +#[AsCommand( + name: 'app:add-user', + description: 'Creates users and stores them in the database' +)] +class AddUserCommand extends Command +{ + private SymfonyStyle $io; + + public function __construct( + private EntityManagerInterface $entityManager, + private UserPasswordHasherInterface $passwordHasher, + private Validator $validator, + private UserRepository $users + ) { + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->setHelp($this->getCommandHelp()) + // commands can optionally define arguments and/or options (mandatory and optional) + // see https://symfony.com/doc/current/components/console/console_arguments.html + ->addArgument('username', InputArgument::OPTIONAL, 'The username of the new user') + ->addArgument('password', InputArgument::OPTIONAL, 'The plain password of the new user') + ->addArgument('email', InputArgument::OPTIONAL, 'The email of the new user') + ->addArgument('full-name', InputArgument::OPTIONAL, 'The full name of the new user') + ->addOption('admin', null, InputOption::VALUE_NONE, 'If set, the user is created as an administrator') + ; + } + + /** + * This optional method is the first one executed for a command after configure() + * and is useful to initialize properties based on the input arguments and options. + */ + protected function initialize(InputInterface $input, OutputInterface $output): void + { + // SymfonyStyle is an optional feature that Symfony provides so you can + // apply a consistent look to the commands of your application. + // See https://symfony.com/doc/current/console/style.html + $this->io = new SymfonyStyle($input, $output); + } + + /** + * This method is executed after initialize() and before execute(). Its purpose + * is to check if some of the options/arguments are missing and interactively + * ask the user for those values. + * + * This method is completely optional. If you are developing an internal console + * command, you probably should not implement this method because it requires + * quite a lot of work. However, if the command is meant to be used by external + * users, this method is a nice way to fall back and prevent errors. + */ + protected function interact(InputInterface $input, OutputInterface $output): void + { + if (null !== $input->getArgument('username') && null !== $input->getArgument('password') && null !== $input->getArgument('email') && null !== $input->getArgument('full-name')) { + return; + } + + $this->io->title('Add User Command Interactive Wizard'); + $this->io->text([ + 'If you prefer to not use this interactive wizard, provide the', + 'arguments required by this command as follows:', + '', + ' $ php bin/console app:add-user username password email@example.com', + '', + 'Now we\'ll ask you for the value of all the missing command arguments.', + ]); + + // Ask for the username if it's not defined + $username = $input->getArgument('username'); + if (null !== $username) { + $this->io->text(' > Username: '.$username); + } else { + $username = $this->io->ask('Username', null, [$this->validator, 'validateUsername']); + $input->setArgument('username', $username); + } + + // Ask for the password if it's not defined + /** @var string|null $password */ + $password = $input->getArgument('password'); + + if (null !== $password) { + $this->io->text(' > Password: '.u('*')->repeat(u($password)->length())); + } else { + $password = $this->io->askHidden('Password (your type will be hidden)', [$this->validator, 'validatePassword']); + $input->setArgument('password', $password); + } + + // Ask for the email if it's not defined + $email = $input->getArgument('email'); + if (null !== $email) { + $this->io->text(' > Email: '.$email); + } else { + $email = $this->io->ask('Email', null, [$this->validator, 'validateEmail']); + $input->setArgument('email', $email); + } + + // Ask for the full name if it's not defined + $fullName = $input->getArgument('full-name'); + if (null !== $fullName) { + $this->io->text(' > Full Name: '.$fullName); + } else { + $fullName = $this->io->ask('Full Name', null, [$this->validator, 'validateFullName']); + $input->setArgument('full-name', $fullName); + } + } + + /** + * This method is executed after interact() and initialize(). It usually + * contains the logic to execute to complete this command task. + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + $stopwatch = new Stopwatch(); + $stopwatch->start('add-user-command'); + + /** @var string $username */ + $username = $input->getArgument('username'); + + /** @var string $plainPassword */ + $plainPassword = $input->getArgument('password'); + + /** @var string $email */ + $email = $input->getArgument('email'); + + /** @var string $fullName */ + $fullName = $input->getArgument('full-name'); + + $isAdmin = $input->getOption('admin'); + + // make sure to validate the user data is correct + $this->validateUserData($username, $plainPassword, $email, $fullName); + + // create the user and hash its password + $user = new User(); + $user->setFullName($fullName); + $user->setUsername($username); + $user->setEmail($email); + $user->setRoles([$isAdmin ? 'ROLE_ADMIN' : 'ROLE_USER']); + + // See https://symfony.com/doc/5.4/security.html#registering-the-user-hashing-passwords + $hashedPassword = $this->passwordHasher->hashPassword($user, $plainPassword); + $user->setPassword($hashedPassword); + + $this->entityManager->persist($user); + $this->entityManager->flush(); + + $this->io->success(sprintf('%s was successfully created: %s (%s)', $isAdmin ? 'Administrator user' : 'User', $user->getUsername(), $user->getEmail())); + + $event = $stopwatch->stop('add-user-command'); + if ($output->isVerbose()) { + $this->io->comment(sprintf('New user database id: %d / Elapsed time: %.2f ms / Consumed memory: %.2f MB', $user->getId(), $event->getDuration(), $event->getMemory() / (1024 ** 2))); + } + + return Command::SUCCESS; + } + + private function validateUserData(string $username, string $plainPassword, string $email, string $fullName): void + { + // first check if a user with the same username already exists. + $existingUser = $this->users->findOneBy(['username' => $username]); + + if (null !== $existingUser) { + throw new RuntimeException(sprintf('There is already a user registered with the "%s" username.', $username)); + } + + // validate password and email if is not this input means interactive. + $this->validator->validatePassword($plainPassword); + $this->validator->validateEmail($email); + $this->validator->validateFullName($fullName); + + // check if a user with the same email already exists. + $existingEmail = $this->users->findOneBy(['email' => $email]); + + if (null !== $existingEmail) { + throw new RuntimeException(sprintf('There is already a user registered with the "%s" email.', $email)); + } + } + + /** + * The command help is usually included in the configure() method, but when + * it's too long, it's better to define a separate method to maintain the + * code readability. + */ + private function getCommandHelp(): string + { + return <<<'HELP' + The %command.name% command creates new users and saves them in the database: + + php %command.full_name% username password email + + By default the command creates regular users. To create administrator users, + add the --admin option: + + php %command.full_name% username password email --admin + + If you omit any of the three required arguments, the command will ask you to + provide the missing values: + + # command will ask you for the email + php %command.full_name% username password + + # command will ask you for the email and password + php %command.full_name% username + + # command will ask you for all arguments + php %command.full_name% + HELP; + } +} diff --git a/integration/testdata/symfony_app/src/Command/DeleteUserCommand.php b/integration/testdata/symfony_app/src/Command/DeleteUserCommand.php new file mode 100644 index 00000000..3da9f473 --- /dev/null +++ b/integration/testdata/symfony_app/src/Command/DeleteUserCommand.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 App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use App\Utils\Validator; +use Doctrine\ORM\EntityManagerInterface; +use Psr\Log\LoggerInterface; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; + +/** + * A console command that deletes users from the database. + * + * To use this command, open a terminal window, enter into your project + * directory and execute the following: + * + * $ php bin/console app:delete-user + * + * Check out the code of the src/Command/AddUserCommand.php file for + * the full explanation about Symfony commands. + * + * See https://symfony.com/doc/current/console.html + * + * @author Oleg Voronkovich + */ +#[AsCommand( + name: 'app:delete-user', + description: 'Deletes users from the database' +)] +class DeleteUserCommand extends Command +{ + private SymfonyStyle $io; + + public function __construct( + private EntityManagerInterface $entityManager, + private Validator $validator, + private UserRepository $users, + private LoggerInterface $logger + ) { + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->addArgument('username', InputArgument::REQUIRED, 'The username of an existing user') + ->setHelp(<<<'HELP' + The %command.name% command deletes users from the database: + + php %command.full_name% username + + If you omit the argument, the command will ask you to + provide the missing value: + + php %command.full_name% + HELP + ); + } + + protected function initialize(InputInterface $input, OutputInterface $output): void + { + // SymfonyStyle is an optional feature that Symfony provides so you can + // apply a consistent look to the commands of your application. + // See https://symfony.com/doc/current/console/style.html + $this->io = new SymfonyStyle($input, $output); + } + + protected function interact(InputInterface $input, OutputInterface $output): void + { + if (null !== $input->getArgument('username')) { + return; + } + + $this->io->title('Delete User Command Interactive Wizard'); + $this->io->text([ + 'If you prefer to not use this interactive wizard, provide the', + 'arguments required by this command as follows:', + '', + ' $ php bin/console app:delete-user username', + '', + 'Now we\'ll ask you for the value of all the missing command arguments.', + '', + ]); + + $username = $this->io->ask('Username', null, [$this->validator, 'validateUsername']); + $input->setArgument('username', $username); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + /** @var string|null $username */ + $username = $input->getArgument('username'); + $username = $this->validator->validateUsername($username); + + /** @var User|null $user */ + $user = $this->users->findOneByUsername($username); + + if (null === $user) { + throw new RuntimeException(sprintf('User with username "%s" not found.', $username)); + } + + // After an entity has been removed, its in-memory state is the same + // as before the removal, except for generated identifiers. + // See https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#removing-entities + $userId = $user->getId(); + + $this->entityManager->remove($user); + $this->entityManager->flush(); + + $userUsername = $user->getUsername(); + $userEmail = $user->getEmail(); + + $this->io->success(sprintf('User "%s" (ID: %d, email: %s) was successfully deleted.', $userUsername, $userId, $userEmail)); + + // Logging is helpful and important to keep a trace of what happened in the software runtime flow. + // See https://symfony.com/doc/current/logging.html + $this->logger->info('User "{username}" (ID: {id}, email: {email}) was successfully deleted.', ['username' => $userUsername, 'id' => $userId, 'email' => $userEmail]); + + return Command::SUCCESS; + } +} diff --git a/integration/testdata/symfony_app/src/Command/ListUsersCommand.php b/integration/testdata/symfony_app/src/Command/ListUsersCommand.php new file mode 100644 index 00000000..908937a9 --- /dev/null +++ b/integration/testdata/symfony_app/src/Command/ListUsersCommand.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 App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\BufferedOutput; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mime\Email; + +/** + * A console command that lists all the existing users. + * + * To use this command, open a terminal window, enter into your project directory + * and execute the following: + * + * $ php bin/console app:list-users + * + * Check out the code of the src/Command/AddUserCommand.php file for + * the full explanation about Symfony commands. + * + * See https://symfony.com/doc/current/console.html + * + * @author Javier Eguiluz + */ +#[AsCommand( + name: 'app:list-users', + description: 'Lists all the existing users', + aliases: ['app:users'] +)] +class ListUsersCommand extends Command +{ + public function __construct( + private MailerInterface $mailer, + private string $emailSender, + private UserRepository $users + ) { + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->setHelp(<<<'HELP' + The %command.name% command lists all the users registered in the application: + + php %command.full_name% + + By default the command only displays the 50 most recent users. Set the number of + results to display with the --max-results option: + + php %command.full_name% --max-results=2000 + + In addition to displaying the user list, you can also send this information to + the email address specified in the --send-to option: + + php %command.full_name% --send-to=fabien@symfony.com + HELP + ) + // commands can optionally define arguments and/or options (mandatory and optional) + // see https://symfony.com/doc/current/components/console/console_arguments.html + ->addOption('max-results', null, InputOption::VALUE_OPTIONAL, 'Limits the number of users listed', 50) + ->addOption('send-to', null, InputOption::VALUE_OPTIONAL, 'If set, the result is sent to the given email address') + ; + } + + /** + * This method is executed after initialize(). It usually contains the logic + * to execute to complete this command task. + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + /** @var int|null $maxResults */ + $maxResults = $input->getOption('max-results'); + + // Use ->findBy() instead of ->findAll() to allow result sorting and limiting + $allUsers = $this->users->findBy([], ['id' => 'DESC'], $maxResults); + + $createUserArray = static function (User $user) { + return [ + $user->getId(), + $user->getFullName(), + $user->getUsername(), + $user->getEmail(), + implode(', ', $user->getRoles()), + ]; + }; + + // Doctrine query returns an array of objects, and we need an array of plain arrays + /** @var callable $createUserArray */ + $usersAsPlainArrays = array_map($createUserArray, $allUsers); + + // In your console commands you should always use the regular output type, + // which outputs contents directly in the console window. However, this + // command uses the BufferedOutput type instead, to be able to get the output + // contents before displaying them. This is needed because the command allows + // to send the list of users via email with the '--send-to' option + $bufferedOutput = new BufferedOutput(); + $io = new SymfonyStyle($input, $bufferedOutput); + $io->table( + ['ID', 'Full Name', 'Username', 'Email', 'Roles'], + $usersAsPlainArrays + ); + + // instead of just displaying the table of users, store its contents in a variable + $usersAsATable = $bufferedOutput->fetch(); + $output->write($usersAsATable); + + /** @var string $email */ + $email = $input->getOption('send-to'); + + if (null !== $email) { + $this->sendReport($usersAsATable, $email); + } + + return Command::SUCCESS; + } + + /** + * Sends the given $contents to the $recipient email address. + */ + private function sendReport(string $contents, string $recipient): void + { + $email = (new Email()) + ->from($this->emailSender) + ->to($recipient) + ->subject(sprintf('app:list-users report (%s)', date('Y-m-d H:i:s'))) + ->text($contents); + + $this->mailer->send($email); + } +} diff --git a/integration/testdata/symfony_app/src/Controller/Admin/BlogController.php b/integration/testdata/symfony_app/src/Controller/Admin/BlogController.php new file mode 100644 index 00000000..3599f801 --- /dev/null +++ b/integration/testdata/symfony_app/src/Controller/Admin/BlogController.php @@ -0,0 +1,183 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller\Admin; + +use App\Entity\Post; +use App\Entity\User; +use App\Form\PostType; +use App\Repository\PostRepository; +use App\Security\PostVoter; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\SubmitButton; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Security\Http\Attribute\CurrentUser; +use Symfony\Component\Security\Http\Attribute\IsGranted; + +/** + * Controller used to manage blog contents in the backend. + * + * Please note that the application backend is developed manually for learning + * purposes. However, in your real Symfony application you should use any of the + * existing bundles that let you generate ready-to-use backends without effort. + * See https://symfony.com/bundles + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +#[Route('/admin/post')] +#[IsGranted('ROLE_ADMIN')] +class BlogController extends AbstractController +{ + /** + * Lists all Post entities. + * + * This controller responds to two different routes with the same URL: + * * 'admin_post_index' is the route with a name that follows the same + * structure as the rest of the controllers of this class. + * * 'admin_index' is a nice shortcut to the backend homepage. This allows + * to create simpler links in the templates. Moreover, in the future we + * could move this annotation to any other controller while maintaining + * the route name and therefore, without breaking any existing link. + */ + #[Route('/', methods: ['GET'], name: 'admin_index')] + #[Route('/', methods: ['GET'], name: 'admin_post_index')] + public function index( + #[CurrentUser] User $user, + PostRepository $posts, + ): Response { + $authorPosts = $posts->findBy(['author' => $user], ['publishedAt' => 'DESC']); + + return $this->render('admin/blog/index.html.twig', ['posts' => $authorPosts]); + } + + /** + * Creates a new Post entity. + * + * NOTE: the Method annotation is optional, but it's a recommended practice + * to constraint the HTTP methods each controller responds to (by default + * it responds to all methods). + */ + #[Route('/new', methods: ['GET', 'POST'], name: 'admin_post_new')] + public function new( + #[CurrentUser] User $user, + Request $request, + EntityManagerInterface $entityManager, + ): Response { + $post = new Post(); + $post->setAuthor($user); + + // See https://symfony.com/doc/current/form/multiple_buttons.html + $form = $this->createForm(PostType::class, $post) + ->add('saveAndCreateNew', SubmitType::class) + ; + + $form->handleRequest($request); + + // the isSubmitted() method is completely optional because the other + // isValid() method already checks whether the form is submitted. + // However, we explicitly add it to improve code readability. + // See https://symfony.com/doc/current/forms.html#processing-forms + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->persist($post); + $entityManager->flush(); + + // Flash messages are used to notify the user about the result of the + // actions. They are deleted automatically from the session as soon + // as they are accessed. + // See https://symfony.com/doc/current/controller.html#flash-messages + $this->addFlash('success', 'post.created_successfully'); + + /** @var SubmitButton $submit */ + $submit = $form->get('saveAndCreateNew'); + + if ($submit->isClicked()) { + return $this->redirectToRoute('admin_post_new'); + } + + return $this->redirectToRoute('admin_post_index'); + } + + return $this->render('admin/blog/new.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * Finds and displays a Post entity. + */ + #[Route('/{id<\d+>}', methods: ['GET'], name: 'admin_post_show')] + public function show(Post $post): Response + { + // This security check can also be performed + // using a PHP attribute: #[IsGranted('show', subject: 'post', message: 'Posts can only be shown to their authors.')] + $this->denyAccessUnlessGranted(PostVoter::SHOW, $post, 'Posts can only be shown to their authors.'); + + return $this->render('admin/blog/show.html.twig', [ + 'post' => $post, + ]); + } + + /** + * Displays a form to edit an existing Post entity. + */ + #[Route('/{id<\d+>}/edit', methods: ['GET', 'POST'], name: 'admin_post_edit')] + #[IsGranted('edit', subject: 'post', message: 'Posts can only be edited by their authors.')] + public function edit(Request $request, Post $post, EntityManagerInterface $entityManager): Response + { + $form = $this->createForm(PostType::class, $post); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + $this->addFlash('success', 'post.updated_successfully'); + + return $this->redirectToRoute('admin_post_edit', ['id' => $post->getId()]); + } + + return $this->render('admin/blog/edit.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * Deletes a Post entity. + */ + #[Route('/{id}/delete', methods: ['POST'], name: 'admin_post_delete')] + #[IsGranted('delete', subject: 'post')] + public function delete(Request $request, Post $post, EntityManagerInterface $entityManager): Response + { + /** @var string|null $token */ + $token = $request->request->get('token'); + + if (!$this->isCsrfTokenValid('delete', $token)) { + return $this->redirectToRoute('admin_post_index'); + } + + // Delete the tags associated with this blog post. This is done automatically + // by Doctrine, except for SQLite (the database used in this application) + // because foreign key support is not enabled by default in SQLite + $post->getTags()->clear(); + + $entityManager->remove($post); + $entityManager->flush(); + + $this->addFlash('success', 'post.deleted_successfully'); + + return $this->redirectToRoute('admin_post_index'); + } +} diff --git a/integration/testdata/symfony_app/src/Controller/BlogController.php b/integration/testdata/symfony_app/src/Controller/BlogController.php new file mode 100644 index 00000000..8b8c8979 --- /dev/null +++ b/integration/testdata/symfony_app/src/Controller/BlogController.php @@ -0,0 +1,191 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +use App\Entity\Comment; +use App\Entity\Post; +use App\Entity\Tag; +use App\Entity\User; +use App\Event\CommentCreatedEvent; +use App\Form\CommentType; +use App\Repository\PostRepository; +use App\Repository\TagRepository; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Attribute\Cache; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Security\Http\Attribute\CurrentUser; +use Symfony\Component\Security\Http\Attribute\IsGranted; + +/** + * Controller used to manage blog contents in the public part of the site. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +#[Route('/blog')] +class BlogController extends AbstractController +{ + /** + * NOTE: For standard formats, Symfony will also automatically choose the best + * Content-Type header for the response. + * + * See https://symfony.com/doc/current/routing.html#special-parameters + */ + #[Route('/', defaults: ['page' => '1', '_format' => 'html'], methods: ['GET'], name: 'blog_index')] + #[Route('/rss.xml', defaults: ['page' => '1', '_format' => 'xml'], methods: ['GET'], name: 'blog_rss')] + #[Route('/page/{page<[1-9]\d*>}', defaults: ['_format' => 'html'], methods: ['GET'], name: 'blog_index_paginated')] + #[Cache(smaxage: 10)] + public function index(Request $request, int $page, string $_format, PostRepository $posts, TagRepository $tags): Response + { + $tag = null; + if ($request->query->has('tag')) { + /** @var Tag $tag */ + $tag = $tags->findOneBy(['name' => $request->query->get('tag')]); + } + $latestPosts = $posts->findLatest($page, $tag); + + // Every template name also has two extensions that specify the format and + // engine for that template. + // See https://symfony.com/doc/current/templates.html#template-naming + return $this->render('blog/index.'.$_format.'.twig', [ + 'paginator' => $latestPosts, + 'tagName' => $tag?->getName(), + ]); + } + + /** + * NOTE: The $post controller argument is automatically injected by Symfony + * after performing a database query looking for a Post with the 'slug' + * value given in the route. + * + * See https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html + */ + #[Route('/posts/{slug}', methods: ['GET'], name: 'blog_post')] + public function postShow(Post $post): Response + { + // Symfony's 'dump()' function is an improved version of PHP's 'var_dump()' but + // it's not available in the 'prod' environment to prevent leaking sensitive information. + // It can be used both in PHP files and Twig templates, but it requires to + // have enabled the DebugBundle. Uncomment the following line to see it in action: + // + // dump($post, $this->getUser(), new \DateTime()); + // + // The result will be displayed either in the Symfony Profiler or in the stream output. + // See https://symfony.com/doc/current/profiler.html + // See https://symfony.com/doc/current/templates.html#the-dump-twig-utilities + // + // You can also leverage Symfony's 'dd()' function that dumps and + // stops the execution + + return $this->render('blog/post_show.html.twig', ['post' => $post]); + } + + /** + * NOTE: The ParamConverter mapping is required because the route parameter + * (postSlug) doesn't match any of the Doctrine entity properties (slug). + * + * See https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#doctrine-converter + */ + #[Route('/comment/{postSlug}/new', methods: ['POST'], name: 'comment_new')] + #[IsGranted('IS_AUTHENTICATED')] + public function commentNew( + #[CurrentUser] User $user, + Request $request, + #[MapEntity(mapping: ['postSlug' => 'slug'])] Post $post, + EventDispatcherInterface $eventDispatcher, + EntityManagerInterface $entityManager, + ): Response { + $comment = new Comment(); + $comment->setAuthor($user); + $post->addComment($comment); + + $form = $this->createForm(CommentType::class, $comment); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->persist($comment); + $entityManager->flush(); + + // When an event is dispatched, Symfony notifies it to all the listeners + // and subscribers registered to it. Listeners can modify the information + // passed in the event and they can even modify the execution flow, so + // there's no guarantee that the rest of this controller will be executed. + // See https://symfony.com/doc/current/components/event_dispatcher.html + $eventDispatcher->dispatch(new CommentCreatedEvent($comment)); + + return $this->redirectToRoute('blog_post', ['slug' => $post->getSlug()]); + } + + return $this->render('blog/comment_form_error.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * This controller is called directly via the render() function in the + * blog/post_show.html.twig template. That's why it's not needed to define + * a route name for it. + * + * The "id" of the Post is passed in and then turned into a Post object + * automatically by the ParamConverter. + */ + public function commentForm(Post $post): Response + { + $form = $this->createForm(CommentType::class); + + return $this->render('blog/_comment_form.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + #[Route('/search', methods: ['GET'], name: 'blog_search')] + public function search(Request $request, PostRepository $posts): Response + { + $query = (string) $request->query->get('q', ''); + $limit = (int) $request->query->get('l', 10); + + if (!$request->isXmlHttpRequest()) { + return $this->render('blog/search.html.twig', ['query' => $query]); + } + + $foundPosts = $posts->findBySearchQuery($query, $limit); + + $results = []; + foreach ($foundPosts as $post) { + /** @var string $author */ + $author = $post->getAuthor() ? $post->getAuthor()->getFullName() : ''; + + /** @var string $title */ + $title = $post->getTitle(); + + /** @var string $summary */ + $summary = $post->getSummary(); + + $results[] = [ + 'title' => htmlspecialchars($title, \ENT_COMPAT | \ENT_HTML5), + 'date' => $post->getPublishedAt()->format('M d, Y'), + 'author' => htmlspecialchars($author, \ENT_COMPAT | \ENT_HTML5), + 'summary' => htmlspecialchars($summary, \ENT_COMPAT | \ENT_HTML5), + 'url' => $this->generateUrl('blog_post', ['slug' => $post->getSlug()]), + ]; + } + + return $this->json($results); + } +} diff --git a/integration/testdata/symfony_app/src/Controller/SecurityController.php b/integration/testdata/symfony_app/src/Controller/SecurityController.php new file mode 100644 index 00000000..a943e6a4 --- /dev/null +++ b/integration/testdata/symfony_app/src/Controller/SecurityController.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +use App\Entity\User; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Security\Http\Attribute\CurrentUser; +use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; +use Symfony\Component\Security\Http\Util\TargetPathTrait; + +/** + * Controller used to manage the application security. + * See https://symfony.com/doc/current/security/form_login_setup.html. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class SecurityController extends AbstractController +{ + use TargetPathTrait; + + /* + * The $user argument type (?User) must be nullable because the login page + * must be accessible to anonymous visitors too. + */ + #[Route('/login', name: 'security_login')] + public function login( + #[CurrentUser] ?User $user, + Request $request, + AuthenticationUtils $helper, + ): Response { + // if user is already logged in, don't display the login page again + if ($user) { + return $this->redirectToRoute('blog_index'); + } + + // this statement solves an edge-case: if you change the locale in the login + // page, after a successful login you are redirected to a page in the previous + // locale. This code regenerates the referrer URL whenever the login page is + // browsed, to ensure that its locale is always the current one. + $this->saveTargetPath($request->getSession(), 'main', $this->generateUrl('admin_index')); + + return $this->render('security/login.html.twig', [ + // last username entered by the user (if any) + 'last_username' => $helper->getLastUsername(), + // last authentication error (if any) + 'error' => $helper->getLastAuthenticationError(), + ]); + } + + /** + * This is the route the user can use to logout. + * + * But, this will never be executed. Symfony will intercept this first + * and handle the logout automatically. See logout in config/packages/security.yaml + */ + #[Route('/logout', name: 'security_logout')] + public function logout(): void + { + throw new \Exception('This should never be reached!'); + } +} diff --git a/integration/testdata/symfony_app/src/Controller/UserController.php b/integration/testdata/symfony_app/src/Controller/UserController.php new file mode 100644 index 00000000..17510b38 --- /dev/null +++ b/integration/testdata/symfony_app/src/Controller/UserController.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +use App\Entity\User; +use App\Form\Type\ChangePasswordType; +use App\Form\UserType; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Security\Http\Attribute\CurrentUser; +use Symfony\Component\Security\Http\Attribute\IsGranted; + +/** + * Controller used to manage current user. The #[CurrentUser] attribute + * tells Symfony to inject the currently logged user into the given argument. + * It can only be used in controllers and it's an alternative to the + * $this->getUser() method, which still works inside controllers. + * + * @author Romain Monteil + */ +#[Route('/profile'), IsGranted('ROLE_USER')] +class UserController extends AbstractController +{ + #[Route('/edit', methods: ['GET', 'POST'], name: 'user_edit')] + public function edit( + #[CurrentUser] User $user, + Request $request, + EntityManagerInterface $entityManager, + ): Response { + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + + $this->addFlash('success', 'user.updated_successfully'); + + return $this->redirectToRoute('user_edit'); + } + + return $this->render('user/edit.html.twig', [ + 'user' => $user, + 'form' => $form->createView(), + ]); + } + + #[Route('/change-password', methods: ['GET', 'POST'], name: 'user_change_password')] + public function changePassword( + #[CurrentUser] User $user, + Request $request, + UserPasswordHasherInterface $passwordHasher, + EntityManagerInterface $entityManager, + ): Response { + $form = $this->createForm(ChangePasswordType::class); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + /** @var string $plainPassword */ + $plainPassword = $form->get('newPassword')->getData(); + + $user->setPassword($passwordHasher->hashPassword($user, $plainPassword)); + $entityManager->flush(); + + return $this->redirectToRoute('security_logout'); + } + + return $this->render('user/change_password.html.twig', [ + 'form' => $form->createView(), + ]); + } +} diff --git a/integration/testdata/symfony_app/src/DataFixtures/AppFixtures.php b/integration/testdata/symfony_app/src/DataFixtures/AppFixtures.php new file mode 100644 index 00000000..5001a169 --- /dev/null +++ b/integration/testdata/symfony_app/src/DataFixtures/AppFixtures.php @@ -0,0 +1,262 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\DataFixtures; + +use App\Entity\Comment; +use App\Entity\Post; +use App\Entity\Tag; +use App\Entity\User; +use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Persistence\ObjectManager; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; +use Symfony\Component\String\AbstractUnicodeString; +use Symfony\Component\String\Slugger\SluggerInterface; +use function Symfony\Component\String\u; + +class AppFixtures extends Fixture +{ + public function __construct( + private UserPasswordHasherInterface $passwordHasher, + private SluggerInterface $slugger + ) { + } + + public function load(ObjectManager $manager): void + { + $this->loadUsers($manager); + $this->loadTags($manager); + $this->loadPosts($manager); + } + + private function loadUsers(ObjectManager $manager): void + { + foreach ($this->getUserData() as [$fullname, $username, $password, $email, $roles]) { + $user = new User(); + $user->setFullName($fullname); + $user->setUsername($username); + $user->setPassword($this->passwordHasher->hashPassword($user, $password)); + $user->setEmail($email); + $user->setRoles($roles); + + $manager->persist($user); + $this->addReference($username, $user); + } + + $manager->flush(); + } + + private function loadTags(ObjectManager $manager): void + { + foreach ($this->getTagData() as $name) { + $tag = new Tag($name); + + $manager->persist($tag); + $this->addReference('tag-'.$name, $tag); + } + + $manager->flush(); + } + + private function loadPosts(ObjectManager $manager): void + { + /** @var User $author */ + /** @var array $tags */ + foreach ($this->getPostData() as [$title, $slug, $summary, $content, $publishedAt, $author, $tags]) { + $post = new Post(); + $post->setTitle($title); + $post->setSlug($slug); + $post->setSummary($summary); + $post->setContent($content); + $post->setPublishedAt($publishedAt); + $post->setAuthor($author); + $post->addTag(...$tags); + + foreach (range(1, 5) as $i) { + /** @var User $commentAuthor */ + $commentAuthor = $this->getReference('john_user'); + + $comment = new Comment(); + $comment->setAuthor($commentAuthor); + $comment->setContent($this->getRandomText(random_int(255, 512))); + $comment->setPublishedAt(new \DateTime('now + '.$i.'seconds')); + + $post->addComment($comment); + } + + $manager->persist($post); + } + + $manager->flush(); + } + + /** + * @return array}> + */ + private function getUserData(): array + { + return [ + // $userData = [$fullname, $username, $password, $email, $roles]; + ['Jane Doe', 'jane_admin', 'kitten', 'jane_admin@symfony.com', ['ROLE_ADMIN']], + ['Tom Doe', 'tom_admin', 'kitten', 'tom_admin@symfony.com', ['ROLE_ADMIN']], + ['John Doe', 'john_user', 'kitten', 'john_user@symfony.com', ['ROLE_USER']], + ]; + } + + /** + * @return string[] + */ + private function getTagData(): array + { + return [ + 'lorem', + 'ipsum', + 'consectetur', + 'adipiscing', + 'incididunt', + 'labore', + 'voluptate', + 'dolore', + 'pariatur', + ]; + } + + /** + * @throws \Exception + * + * @return array}> + */ + private function getPostData(): array + { + $posts = []; + foreach ($this->getPhrases() as $i => $title) { + // $postData = [$title, $slug, $summary, $content, $publishedAt, $author, $tags, $comments]; + $posts[] = [ + $title, + $this->slugger->slug($title)->lower(), + $this->getRandomText(), + $this->getPostContent(), + new \DateTime('now - '.$i.'days'), + // Ensure that the first post is written by Jane Doe to simplify tests + $this->getReference(['jane_admin', 'tom_admin'][0 === $i ? 0 : random_int(0, 1)]), + $this->getRandomTags(), + ]; + } + + return $posts; + } + + /** + * @return string[] + */ + private function getPhrases(): array + { + return [ + 'Lorem ipsum dolor sit amet consectetur adipiscing elit', + 'Pellentesque vitae velit ex', + 'Mauris dapibus risus quis suscipit vulputate', + 'Eros diam egestas libero eu vulputate risus', + 'In hac habitasse platea dictumst', + 'Morbi tempus commodo mattis', + 'Ut suscipit posuere justo at vulputate', + 'Ut eleifend mauris et risus ultrices egestas', + 'Aliquam sodales odio id eleifend tristique', + 'Urna nisl sollicitudin id varius orci quam id turpis', + 'Nulla porta lobortis ligula vel egestas', + 'Curabitur aliquam euismod dolor non ornare', + 'Sed varius a risus eget aliquam', + 'Nunc viverra elit ac laoreet suscipit', + 'Pellentesque et sapien pulvinar consectetur', + 'Ubi est barbatus nix', + 'Abnobas sunt hilotaes de placidus vita', + 'Ubi est audax amicitia', + 'Eposs sunt solems de superbus fortis', + 'Vae humani generis', + 'Diatrias tolerare tanquam noster caesium', + 'Teres talis saepe tractare de camerarius flavum sensorem', + 'Silva de secundus galatae demitto quadra', + 'Sunt accentores vitare salvus flavum parses', + 'Potus sensim ad ferox abnoba', + 'Sunt seculaes transferre talis camerarius fluctuies', + 'Era brevis ratione est', + 'Sunt torquises imitari velox mirabilis medicinaes', + 'Mineralis persuadere omnes finises desiderium', + 'Bassus fatalis classiss virtualiter transferre de flavum', + ]; + } + + private function getRandomText(int $maxLength = 255): string + { + $phrases = $this->getPhrases(); + shuffle($phrases); + + do { + $text = u('. ')->join($phrases)->append('.'); + array_pop($phrases); + } while ($text->length() > $maxLength); + + return $text; + } + + private function getPostContent(): string + { + return <<<'MARKDOWN' + Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor + incididunt ut labore et **dolore magna aliqua**: Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum. + + * Ut enim ad minim veniam + * Quis nostrud exercitation *ullamco laboris* + * Nisi ut aliquip ex ea commodo consequat + + Praesent id fermentum lorem. Ut est lorem, fringilla at accumsan nec, euismod at + nunc. Aenean mattis sollicitudin mattis. Nullam pulvinar vestibulum bibendum. + Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos + himenaeos. Fusce nulla purus, gravida ac interdum ut, blandit eget ex. Duis a + luctus dolor. + + Integer auctor massa maximus nulla scelerisque accumsan. *Aliquam ac malesuada* + ex. Pellentesque tortor magna, vulputate eu vulputate ut, venenatis ac lectus. + Praesent ut lacinia sem. Mauris a lectus eget felis mollis feugiat. Quisque + efficitur, mi ut semper pulvinar, urna urna blandit massa, eget tincidunt augue + nulla vitae est. + + Ut posuere aliquet tincidunt. Aliquam erat volutpat. **Class aptent taciti** + sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi + arcu orci, gravida eget aliquam eu, suscipit et ante. Morbi vulputate metus vel + ipsum finibus, ut dapibus massa feugiat. Vestibulum vel lobortis libero. Sed + tincidunt tellus et viverra scelerisque. Pellentesque tincidunt cursus felis. + Sed in egestas erat. + + Aliquam pulvinar interdum massa, vel ullamcorper ante consectetur eu. Vestibulum + lacinia ac enim vel placerat. Integer pulvinar magna nec dui malesuada, nec + congue nisl dictum. Donec mollis nisl tortor, at congue erat consequat a. Nam + tempus elit porta, blandit elit vel, viverra lorem. Sed sit amet tellus + tincidunt, faucibus nisl in, aliquet libero. + MARKDOWN; + } + + /** + * @throws \Exception + * + * @return array + */ + private function getRandomTags(): array + { + $tagNames = $this->getTagData(); + shuffle($tagNames); + $selectedTags = \array_slice($tagNames, 0, random_int(2, 4)); + + return array_map(function ($tagName) { return $this->getReference('tag-'.$tagName); }, $selectedTags); + } +} diff --git a/integration/testdata/symfony_app/src/Entity/Comment.php b/integration/testdata/symfony_app/src/Entity/Comment.php new file mode 100644 index 00000000..2ac275b8 --- /dev/null +++ b/integration/testdata/symfony_app/src/Entity/Comment.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use Doctrine\DBAL\Types\Types; +use Doctrine\ORM\Mapping as ORM; +use function Symfony\Component\String\u; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * Defines the properties of the Comment entity to represent the blog comments. + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class. + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +#[ORM\Entity] +#[ORM\Table(name: 'symfony_demo_comment')] +class Comment +{ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: Types::INTEGER)] + private ?int $id = null; + + #[ORM\ManyToOne(targetEntity: Post::class, inversedBy: 'comments')] + #[ORM\JoinColumn(nullable: false)] + private ?Post $post = null; + + #[ORM\Column(type: Types::TEXT)] + #[Assert\NotBlank(message: 'comment.blank')] + #[Assert\Length(min: 5, minMessage: 'comment.too_short', max: 10000, maxMessage: 'comment.too_long')] + private ?string $content = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private \DateTime $publishedAt; + + #[ORM\ManyToOne(targetEntity: User::class)] + #[ORM\JoinColumn(nullable: false)] + private ?User $author = null; + + public function __construct() + { + $this->publishedAt = new \DateTime(); + } + + #[Assert\IsTrue(message: 'comment.is_spam')] + public function isLegitComment(): bool + { + $containsInvalidCharacters = null !== u($this->content)->indexOf('@'); + + return !$containsInvalidCharacters; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(string $content): void + { + $this->content = $content; + } + + public function getPublishedAt(): \DateTime + { + return $this->publishedAt; + } + + public function setPublishedAt(\DateTime $publishedAt): void + { + $this->publishedAt = $publishedAt; + } + + public function getAuthor(): ?User + { + return $this->author; + } + + public function setAuthor(User $author): void + { + $this->author = $author; + } + + public function getPost(): ?Post + { + return $this->post; + } + + public function setPost(Post $post): void + { + $this->post = $post; + } +} diff --git a/integration/testdata/symfony_app/src/Entity/Post.php b/integration/testdata/symfony_app/src/Entity/Post.php new file mode 100644 index 00000000..8d191369 --- /dev/null +++ b/integration/testdata/symfony_app/src/Entity/Post.php @@ -0,0 +1,198 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use App\Repository\PostRepository; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; +use Doctrine\ORM\Mapping as ORM; +use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * Defines the properties of the Post entity to represent the blog posts. + * + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +#[ORM\Entity(repositoryClass: PostRepository::class)] +#[ORM\Table(name: 'symfony_demo_post')] +#[UniqueEntity(fields: ['slug'], errorPath: 'title', message: 'post.slug_unique')] +class Post +{ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: Types::INTEGER)] + private ?int $id = null; + + #[ORM\Column(type: Types::STRING)] + #[Assert\NotBlank] + private ?string $title = null; + + #[ORM\Column(type: Types::STRING)] + private ?string $slug = null; + + #[ORM\Column(type: Types::STRING)] + #[Assert\NotBlank(message: 'post.blank_summary')] + #[Assert\Length(max: 255)] + private ?string $summary = null; + + #[ORM\Column(type: Types::TEXT)] + #[Assert\NotBlank(message: 'post.blank_content')] + #[Assert\Length(min: 10, minMessage: 'post.too_short_content')] + private ?string $content = null; + + #[ORM\Column(type: Types::DATETIME_MUTABLE)] + private \DateTime $publishedAt; + + #[ORM\ManyToOne(targetEntity: User::class)] + #[ORM\JoinColumn(nullable: false)] + private ?User $author = null; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: Comment::class, mappedBy: 'post', orphanRemoval: true, cascade: ['persist'])] + #[ORM\OrderBy(['publishedAt' => 'DESC'])] + private Collection $comments; + + /** + * @var Collection + */ + #[ORM\ManyToMany(targetEntity: Tag::class, cascade: ['persist'])] + #[ORM\JoinTable(name: 'symfony_demo_post_tag')] + #[ORM\OrderBy(['name' => 'ASC'])] + #[Assert\Count(max: 4, maxMessage: 'post.too_many_tags')] + private Collection $tags; + + public function __construct() + { + $this->publishedAt = new \DateTime(); + $this->comments = new ArrayCollection(); + $this->tags = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setTitle(?string $title): void + { + $this->title = $title; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function setSlug(string $slug): void + { + $this->slug = $slug; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(?string $content): void + { + $this->content = $content; + } + + public function getPublishedAt(): \DateTime + { + return $this->publishedAt; + } + + public function setPublishedAt(\DateTime $publishedAt): void + { + $this->publishedAt = $publishedAt; + } + + public function getAuthor(): ?User + { + return $this->author; + } + + public function setAuthor(User $author): void + { + $this->author = $author; + } + + /** + * @return Collection + */ + public function getComments(): Collection + { + return $this->comments; + } + + public function addComment(Comment $comment): void + { + $comment->setPost($this); + if (!$this->comments->contains($comment)) { + $this->comments->add($comment); + } + } + + public function removeComment(Comment $comment): void + { + $this->comments->removeElement($comment); + } + + public function getSummary(): ?string + { + return $this->summary; + } + + public function setSummary(?string $summary): void + { + $this->summary = $summary; + } + + public function addTag(Tag ...$tags): void + { + foreach ($tags as $tag) { + if (!$this->tags->contains($tag)) { + $this->tags->add($tag); + } + } + } + + public function removeTag(Tag $tag): void + { + $this->tags->removeElement($tag); + } + + /** + * @return Collection + */ + public function getTags(): Collection + { + return $this->tags; + } +} diff --git a/integration/testdata/symfony_app/src/Entity/Tag.php b/integration/testdata/symfony_app/src/Entity/Tag.php new file mode 100644 index 00000000..511edab6 --- /dev/null +++ b/integration/testdata/symfony_app/src/Entity/Tag.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 App\Entity; + +use Doctrine\DBAL\Types\Types; +use Doctrine\ORM\Mapping as ORM; + +/** + * Defines the properties of the Tag entity to represent the post tags. + * + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * @author Yonel Ceruto + */ +#[ORM\Entity] +#[ORM\Table(name: 'symfony_demo_tag')] +class Tag implements \JsonSerializable +{ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: Types::INTEGER)] + private ?int $id = null; + + #[ORM\Column(type: Types::STRING, unique: true)] + private readonly string $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize(): string + { + // This entity implements JsonSerializable (http://php.net/manual/en/class.jsonserializable.php) + // so this method is used to customize its JSON representation when json_encode() + // is called, for example in tags|json_encode (templates/form/fields.html.twig) + + return $this->name; + } + + public function __toString(): string + { + return $this->name; + } +} diff --git a/integration/testdata/symfony_app/src/Entity/User.php b/integration/testdata/symfony_app/src/Entity/User.php new file mode 100644 index 00000000..52219df6 --- /dev/null +++ b/integration/testdata/symfony_app/src/Entity/User.php @@ -0,0 +1,177 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use App\Repository\UserRepository; +use Doctrine\DBAL\Types\Types; +use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; +use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * Defines the properties of the User entity to represent the application users. + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class. + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +#[ORM\Entity(repositoryClass: UserRepository::class)] +#[ORM\Table(name: 'symfony_demo_user')] +class User implements UserInterface, PasswordAuthenticatedUserInterface +{ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: Types::INTEGER)] + private ?int $id = null; + + #[ORM\Column(type: Types::STRING)] + #[Assert\NotBlank] + private ?string $fullName = null; + + #[ORM\Column(type: Types::STRING, unique: true)] + #[Assert\NotBlank] + #[Assert\Length(min: 2, max: 50)] + private ?string $username = null; + + #[ORM\Column(type: Types::STRING, unique: true)] + #[Assert\Email] + private ?string $email = null; + + #[ORM\Column(type: Types::STRING)] + private ?string $password = null; + + /** + * @var string[] + */ + #[ORM\Column(type: Types::JSON)] + private array $roles = []; + + public function getId(): ?int + { + return $this->id; + } + + public function setFullName(string $fullName): void + { + $this->fullName = $fullName; + } + + public function getFullName(): ?string + { + return $this->fullName; + } + + public function getUserIdentifier(): string + { + return (string) $this->username; + } + + public function getUsername(): string + { + return $this->getUserIdentifier(); + } + + public function setUsername(string $username): void + { + $this->username = $username; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(string $email): void + { + $this->email = $email; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function setPassword(string $password): void + { + $this->password = $password; + } + + /** + * Returns the roles or permissions granted to the user for security. + */ + public function getRoles(): array + { + $roles = $this->roles; + + // guarantees that a user always has at least one role for security + if (empty($roles)) { + $roles[] = 'ROLE_USER'; + } + + return array_unique($roles); + } + + /** + * @param string[] $roles + */ + public function setRoles(array $roles): void + { + $this->roles = $roles; + } + + /** + * Returns the salt that was originally used to encode the password. + * + * {@inheritdoc} + */ + public function getSalt(): ?string + { + // We're using bcrypt in security.yaml to encode the password, so + // the salt value is built-in and you don't have to generate one + // See https://en.wikipedia.org/wiki/Bcrypt + + return null; + } + + /** + * Removes sensitive data from the user. + * + * {@inheritdoc} + */ + public function eraseCredentials(): void + { + // if you had a plainPassword property, you'd nullify it here + // $this->plainPassword = null; + } + + /** + * @return array{int|null, string|null, string|null} + */ + public function __serialize(): array + { + // add $this->salt too if you don't use Bcrypt or Argon2i + return [$this->id, $this->username, $this->password]; + } + + /** + * @param array{int|null, string, string} $data + */ + public function __unserialize(array $data): void + { + // add $this->salt too if you don't use Bcrypt or Argon2i + [$this->id, $this->username, $this->password] = $data; + } +} diff --git a/integration/testdata/symfony_app/src/Event/CommentCreatedEvent.php b/integration/testdata/symfony_app/src/Event/CommentCreatedEvent.php new file mode 100644 index 00000000..39577a2b --- /dev/null +++ b/integration/testdata/symfony_app/src/Event/CommentCreatedEvent.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 App\Event; + +use App\Entity\Comment; +use Symfony\Contracts\EventDispatcher\Event; + +class CommentCreatedEvent extends Event +{ + public function __construct( + protected Comment $comment + ) { + } + + public function getComment(): Comment + { + return $this->comment; + } +} diff --git a/integration/testdata/symfony_app/src/EventSubscriber/CheckRequirementsSubscriber.php b/integration/testdata/symfony_app/src/EventSubscriber/CheckRequirementsSubscriber.php new file mode 100644 index 00000000..fb485bf7 --- /dev/null +++ b/integration/testdata/symfony_app/src/EventSubscriber/CheckRequirementsSubscriber.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 App\EventSubscriber; + +use Doctrine\DBAL\Exception\DriverException; +use Doctrine\DBAL\Platforms\SqlitePlatform; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\ConsoleEvents; +use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * This application uses by default an SQLite database to store its information. + * That's why the 'sqlite3' extension must be enabled in PHP. This event + * subscriber listens to console events and in case of an exception caused by + * a disabled 'sqlite3' extension, it displays a meaningful error message. + * + * @author Javier Eguiluz + */ +class CheckRequirementsSubscriber implements EventSubscriberInterface +{ + public function __construct( + private EntityManagerInterface $entityManager + ) { + } + + // Event Subscribers must define this method to declare the events they + // listen to. You can listen to several events, execute more than one method + // for each event and set the priority of each event too. + // See https://symfony.com/doc/current/event_dispatcher.html#creating-an-event-subscriber + public static function getSubscribedEvents(): array + { + return [ + // Errors are one of the events defined by the Console. See the + // rest here: https://symfony.com/doc/current/components/console/events.html + ConsoleEvents::ERROR => 'handleConsoleError', + // See: https://symfony.com/doc/current/components/http_kernel.html#component-http-kernel-event-table + KernelEvents::EXCEPTION => 'handleKernelException', + ]; + } + + /** + * This method checks if there has been an error in a command related to + * the database and then, it checks if the 'sqlite3' PHP extension is enabled + * or not to display a better error message. + */ + public function handleConsoleError(ConsoleErrorEvent $event): void + { + $commandNames = ['doctrine:fixtures:load', 'doctrine:database:create', 'doctrine:schema:create', 'doctrine:database:drop']; + + if ($event->getCommand() && \in_array($event->getCommand()->getName(), $commandNames, true)) { + if ($this->isSQLitePlatform() && !\extension_loaded('sqlite3')) { + $io = new SymfonyStyle($event->getInput(), $event->getOutput()); + $io->error('This command requires to have the "sqlite3" PHP extension enabled because, by default, the Symfony Demo application uses SQLite to store its information.'); + } + } + } + + /** + * This method checks if the triggered exception is related to the database + * and then, it checks if the required 'sqlite3' PHP extension is enabled. + */ + public function handleKernelException(ExceptionEvent $event): void + { + $exception = $event->getThrowable(); + // Since any exception thrown during a Twig template rendering is wrapped + // in a Twig_Error_Runtime, we must get the original exception. + $previousException = $exception->getPrevious(); + + // Driver exception may happen in controller or in twig template rendering + $isDriverException = ($exception instanceof DriverException || $previousException instanceof DriverException); + + // Check if SQLite is enabled + if ($isDriverException && $this->isSQLitePlatform() && !\extension_loaded('sqlite3')) { + $event->setThrowable(new \Exception('PHP extension "sqlite3" must be enabled because, by default, the Symfony Demo application uses SQLite to store its information.')); + } + } + + /** + * Checks if the application is using SQLite as its database. + */ + private function isSQLitePlatform(): bool + { + $databasePlatform = $this->entityManager->getConnection()->getDatabasePlatform(); + + return $databasePlatform instanceof SqlitePlatform; + } +} diff --git a/integration/testdata/symfony_app/src/EventSubscriber/CommentNotificationSubscriber.php b/integration/testdata/symfony_app/src/EventSubscriber/CommentNotificationSubscriber.php new file mode 100644 index 00000000..5e2a981a --- /dev/null +++ b/integration/testdata/symfony_app/src/EventSubscriber/CommentNotificationSubscriber.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use App\Entity\Post; +use App\Entity\User; +use App\Event\CommentCreatedEvent; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mime\Email; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * Notifies post's author about new comments. + * + * @author Oleg Voronkovich + */ +class CommentNotificationSubscriber implements EventSubscriberInterface +{ + public function __construct( + private MailerInterface $mailer, + private UrlGeneratorInterface $urlGenerator, + private TranslatorInterface $translator, + private string $sender + ) { + } + + public static function getSubscribedEvents(): array + { + return [ + CommentCreatedEvent::class => 'onCommentCreated', + ]; + } + + public function onCommentCreated(CommentCreatedEvent $event): void + { + $comment = $event->getComment(); + + /** @var Post $post */ + $post = $comment->getPost(); + + /** @var User $author */ + $author = $post->getAuthor(); + + /** @var string $emailAddress */ + $emailAddress = $author->getEmail(); + + $linkToPost = $this->urlGenerator->generate('blog_post', [ + 'slug' => $post->getSlug(), + '_fragment' => 'comment_'.$comment->getId(), + ], UrlGeneratorInterface::ABSOLUTE_URL); + + $subject = $this->translator->trans('notification.comment_created'); + $body = $this->translator->trans('notification.comment_created.description', [ + 'title' => $post->getTitle(), + 'link' => $linkToPost, + ]); + + // See https://symfony.com/doc/current/mailer.html + $email = (new Email()) + ->from($this->sender) + ->to($emailAddress) + ->subject($subject) + ->html($body) + ; + + // In config/packages/dev/mailer.yaml the delivery of messages is disabled. + // That's why in the development environment you won't actually receive any email. + // However, you can inspect the contents of those unsent emails using the debug toolbar. + $this->mailer->send($email); + } +} diff --git a/integration/testdata/symfony_app/src/EventSubscriber/ControllerSubscriber.php b/integration/testdata/symfony_app/src/EventSubscriber/ControllerSubscriber.php new file mode 100644 index 00000000..d72fb3cb --- /dev/null +++ b/integration/testdata/symfony_app/src/EventSubscriber/ControllerSubscriber.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 App\EventSubscriber; + +use App\Twig\SourceCodeExtension; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\ControllerEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * Defines the method that 'listens' to the 'kernel.controller' event, which is + * triggered whenever a controller is executed in the application. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class ControllerSubscriber implements EventSubscriberInterface +{ + public function __construct( + private SourceCodeExtension $twigExtension + ) { + } + + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::CONTROLLER => 'registerCurrentController', + ]; + } + + public function registerCurrentController(ControllerEvent $event): void + { + // this check is needed because in Symfony a request can perform any + // number of sub-requests. See + // https://symfony.com/doc/current/components/http_kernel.html#sub-requests + if ($event->isMainRequest()) { + $this->twigExtension->setController($event->getController()); + } + } +} diff --git a/integration/testdata/symfony_app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php b/integration/testdata/symfony_app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php new file mode 100644 index 00000000..ed1c9dc5 --- /dev/null +++ b/integration/testdata/symfony_app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use function Symfony\Component\String\u; + +/** + * When visiting the homepage, this listener redirects the user to the most + * appropriate localized version according to the browser settings. + * + * See https://symfony.com/doc/current/components/http_kernel.html#the-kernel-request-event + * + * @author Oleg Voronkovich + */ +class RedirectToPreferredLocaleSubscriber implements EventSubscriberInterface +{ + /** + * @var string[] + */ + private array $locales; + private string $defaultLocale; + + public function __construct( + private UrlGeneratorInterface $urlGenerator, + string $locales, + ?string $defaultLocale = null + ) { + $this->locales = explode('|', trim($locales)); + if (empty($this->locales)) { + throw new \UnexpectedValueException('The list of supported locales must not be empty.'); + } + + $this->defaultLocale = $defaultLocale ?: $this->locales[0]; + + if (!\in_array($this->defaultLocale, $this->locales, true)) { + throw new \UnexpectedValueException(sprintf('The default locale ("%s") must be one of "%s".', $this->defaultLocale, $locales)); + } + + // Add the default locale at the first position of the array, + // because Symfony\HttpFoundation\Request::getPreferredLanguage + // returns the first element when no an appropriate language is found + array_unshift($this->locales, $this->defaultLocale); + $this->locales = array_unique($this->locales); + } + + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::REQUEST => 'onKernelRequest', + ]; + } + + public function onKernelRequest(RequestEvent $event): void + { + $request = $event->getRequest(); + + // Ignore sub-requests and all URLs but the homepage + if (!$event->isMainRequest() || '/' !== $request->getPathInfo()) { + return; + } + // Ignore requests from referrers with the same HTTP host in order to prevent + // changing language for users who possibly already selected it for this application. + $referrer = $request->headers->get('referer'); + if (null !== $referrer && u($referrer)->ignoreCase()->startsWith($request->getSchemeAndHttpHost())) { + return; + } + + $preferredLanguage = $request->getPreferredLanguage($this->locales); + + if ($preferredLanguage !== $this->defaultLocale) { + $response = new RedirectResponse($this->urlGenerator->generate('homepage', ['_locale' => $preferredLanguage])); + $event->setResponse($response); + } + } +} diff --git a/integration/testdata/symfony_app/src/Form/CommentType.php b/integration/testdata/symfony_app/src/Form/CommentType.php new file mode 100644 index 00000000..38ad43c7 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/CommentType.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 App\Form; + +use App\Entity\Comment; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Defines the form used to create and manipulate blog comments. Although in this + * case the form is trivial and we could build it inside the controller, a good + * practice is to always define your forms as classes. + * + * See https://symfony.com/doc/current/forms.html#creating-form-classes + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class CommentType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('content', null, ['required' => false]); + + $builder + ->add('content', TextareaType::class, [ + 'help' => 'help.comment_content', + ]) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Comment::class, + ]); + } +} diff --git a/integration/testdata/symfony_app/src/Form/DataTransformer/TagArrayToStringTransformer.php b/integration/testdata/symfony_app/src/Form/DataTransformer/TagArrayToStringTransformer.php new file mode 100644 index 00000000..14f0a508 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/DataTransformer/TagArrayToStringTransformer.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\DataTransformer; + +use App\Entity\Tag; +use App\Repository\TagRepository; +use Symfony\Component\Form\DataTransformerInterface; +use function Symfony\Component\String\u; + +/** + * This data transformer is used to translate the array of tags into a comma separated format + * that can be displayed and managed by Bootstrap-tagsinput js plugin (and back on submit). + * + * See https://symfony.com/doc/current/form/data_transformers.html + * + * @author Yonel Ceruto + * @author Jonathan Boyer + * + * @template-implements DataTransformerInterface + */ +class TagArrayToStringTransformer implements DataTransformerInterface +{ + public function __construct( + private TagRepository $tags + ) { + } + + /** + * {@inheritdoc} + * + * @phpstan-param array|null $tags + */ + public function transform($tags): string + { + // The value received is an array of Tag objects generated with + // Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer::transform() + // The value returned is a string that concatenates the string representation of those objects + + return implode(',', $tags); + } + + /** + * {@inheritdoc} + * + * @phpstan-param string|null $string + * + * @phpstan-return array + */ + public function reverseTransform($string): array + { + if (null === $string || u($string)->isEmpty()) { + return []; + } + + $names = array_filter(array_unique($this->trim(u($string)->split(',')))); + + // Get the current tags and find the new ones that should be created. + /** @var Tag[] $tags */ + $tags = $this->tags->findBy([ + 'name' => $names, + ]); + $newNames = array_diff($names, $tags); + foreach ($newNames as $name) { + $tags[] = new Tag($name); + + // There's no need to persist these new tags because Doctrine does that automatically + // thanks to the cascade={"persist"} option in the App\Entity\Post::$tags property. + } + + // Return an array of tags to transform them back into a Doctrine Collection. + // See Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer::reverseTransform() + return $tags; + } + + /** + * @param string[] $strings + * + * @return string[] + */ + private function trim(array $strings): array + { + $result = []; + + foreach ($strings as $string) { + $result[] = trim($string); + } + + return $result; + } +} diff --git a/integration/testdata/symfony_app/src/Form/PostType.php b/integration/testdata/symfony_app/src/Form/PostType.php new file mode 100644 index 00000000..b0c398b5 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/PostType.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form; + +use App\Entity\Post; +use App\Form\Type\DateTimePickerType; +use App\Form\Type\TagsInputType; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormEvent; +use Symfony\Component\Form\FormEvents; +use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\String\Slugger\SluggerInterface; + +/** + * Defines the form used to create and manipulate blog posts. + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class PostType extends AbstractType +{ + // Form types are services, so you can inject other services in them if needed + public function __construct( + private SluggerInterface $slugger + ) { + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // For the full reference of options defined by each form field type + // see https://symfony.com/doc/current/reference/forms/types.html + + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('title', null, ['required' => false, ...]); + + $builder + ->add('title', null, [ + 'attr' => ['autofocus' => true], + 'label' => 'label.title', + ]) + ->add('summary', TextareaType::class, [ + 'help' => 'help.post_summary', + 'label' => 'label.summary', + ]) + ->add('content', null, [ + 'attr' => ['rows' => 20], + 'help' => 'help.post_content', + 'label' => 'label.content', + ]) + ->add('publishedAt', DateTimePickerType::class, [ + 'label' => 'label.published_at', + 'help' => 'help.post_publication', + ]) + ->add('tags', TagsInputType::class, [ + 'label' => 'label.tags', + 'required' => false, + ]) + // form events let you modify information or fields at different steps + // of the form handling process. + // See https://symfony.com/doc/current/form/events.html + ->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) { + /** @var Post */ + $post = $event->getData(); + if (null === $post->getSlug() && null !== $post->getTitle()) { + $post->setSlug($this->slugger->slug($post->getTitle())->lower()); + } + }) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Post::class, + ]); + } +} diff --git a/integration/testdata/symfony_app/src/Form/Type/ChangePasswordType.php b/integration/testdata/symfony_app/src/Form/Type/ChangePasswordType.php new file mode 100644 index 00000000..0273ebf3 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/Type/ChangePasswordType.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 App\Form\Type; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\RepeatedType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Security\Core\Validator\Constraints\UserPassword; +use Symfony\Component\Validator\Constraints\Length; +use Symfony\Component\Validator\Constraints\NotBlank; + +/** + * Defines the custom form field type used to change user's password. + * + * @author Romain Monteil + */ +class ChangePasswordType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('currentPassword', PasswordType::class, [ + 'constraints' => [ + new UserPassword(), + ], + 'label' => 'label.current_password', + 'attr' => [ + 'autocomplete' => 'off', + ], + ]) + ->add('newPassword', RepeatedType::class, [ + 'type' => PasswordType::class, + 'constraints' => [ + new NotBlank(), + new Length( + min: 5, + max: 128, + ), + ], + 'first_options' => [ + 'label' => 'label.new_password', + ], + 'second_options' => [ + 'label' => 'label.new_password_confirm', + ], + ]) + ; + } +} diff --git a/integration/testdata/symfony_app/src/Form/Type/DateTimePickerType.php b/integration/testdata/symfony_app/src/Form/Type/DateTimePickerType.php new file mode 100644 index 00000000..33e8d968 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/Type/DateTimePickerType.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\Type; + +use App\Utils\MomentFormatConverter; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\DateTimeType; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\OptionsResolver; +use function Symfony\Component\String\u; + +/** + * Defines the custom form field type used to manipulate datetime values across + * Bootstrap Date\Time Picker javascript plugin. + * + * See https://symfony.com/doc/current/form/create_custom_field_type.html + * + * @author Yonel Ceruto + */ +class DateTimePickerType extends AbstractType +{ + public function __construct( + private MomentFormatConverter $formatConverter + ) { + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options): void + { + /** @var string $format */ + $format = $options['format']; + + $view->vars['attr']['data-date-format'] = $this->formatConverter->convert($format); + $view->vars['attr']['data-date-locale'] = u(\Locale::getDefault())->replace('_', '-')->lower(); + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'widget' => 'single_text', + // if true, the browser will display the native date picker widget + // however, this app uses a custom JavaScript widget, so it must be set to false + 'html5' => false, + ]); + } + + /** + * {@inheritdoc} + */ + public function getParent(): ?string + { + return DateTimeType::class; + } +} diff --git a/integration/testdata/symfony_app/src/Form/Type/TagsInputType.php b/integration/testdata/symfony_app/src/Form/Type/TagsInputType.php new file mode 100644 index 00000000..788e856e --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/Type/TagsInputType.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\Type; + +use App\Form\DataTransformer\TagArrayToStringTransformer; +use App\Repository\TagRepository; +use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; + +/** + * Defines the custom form field type used to manipulate tags values across + * Bootstrap-tagsinput javascript plugin. + * + * See https://symfony.com/doc/current/form/create_custom_field_type.html + * + * @author Yonel Ceruto + */ +class TagsInputType extends AbstractType +{ + public function __construct( + private TagRepository $tags + ) { + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + // The Tag collection must be transformed into a comma separated string. + // We could create a custom transformer to do Collection <-> string in one step, + // but here we're doing the transformation in two steps (Collection <-> array <-> string) + // and reuse the existing CollectionToArrayTransformer. + ->addModelTransformer(new CollectionToArrayTransformer(), true) + ->addModelTransformer(new TagArrayToStringTransformer($this->tags), true) + ; + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['tags'] = $this->tags->findAll(); + } + + /** + * {@inheritdoc} + */ + public function getParent(): ?string + { + return TextType::class; + } +} diff --git a/integration/testdata/symfony_app/src/Form/UserType.php b/integration/testdata/symfony_app/src/Form/UserType.php new file mode 100644 index 00000000..835d6ad5 --- /dev/null +++ b/integration/testdata/symfony_app/src/Form/UserType.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 App\Form; + +use App\Entity\User; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\EmailType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Defines the form used to edit an user. + * + * @author Romain Monteil + */ +class UserType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // For the full reference of options defined by each form field type + // see https://symfony.com/doc/current/reference/forms/types.html + + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('title', null, ['required' => false, ...]); + + $builder + ->add('username', TextType::class, [ + 'label' => 'label.username', + 'disabled' => true, + ]) + ->add('fullName', TextType::class, [ + 'label' => 'label.fullname', + ]) + ->add('email', EmailType::class, [ + 'label' => 'label.email', + ]) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/integration/testdata/symfony_app/src/Kernel.php b/integration/testdata/symfony_app/src/Kernel.php new file mode 100644 index 00000000..07997857 --- /dev/null +++ b/integration/testdata/symfony_app/src/Kernel.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 App; + +use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; +use Symfony\Component\HttpKernel\Kernel as BaseKernel; + +class Kernel extends BaseKernel +{ + use MicroKernelTrait; +} diff --git a/integration/testdata/symfony_app/src/Pagination/Paginator.php b/integration/testdata/symfony_app/src/Pagination/Paginator.php new file mode 100644 index 00000000..dbfe4f3b --- /dev/null +++ b/integration/testdata/symfony_app/src/Pagination/Paginator.php @@ -0,0 +1,128 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Pagination; + +use Doctrine\ORM\QueryBuilder as DoctrineQueryBuilder; +use Doctrine\ORM\Tools\Pagination\CountWalker; +use Doctrine\ORM\Tools\Pagination\Paginator as DoctrinePaginator; + +/** + * @author Javier Eguiluz + */ +class Paginator +{ + /** + * Use constants to define configuration options that rarely change instead + * of specifying them under parameters section in config/services.yaml file. + * + * See https://symfony.com/doc/current/best_practices.html#use-constants-to-define-options-that-rarely-change + */ + public const PAGE_SIZE = 10; + + private int $currentPage; + private int $numResults; + + /** + * @var \Traversable + */ + private \Traversable $results; + + public function __construct( + private DoctrineQueryBuilder $queryBuilder, + private int $pageSize = self::PAGE_SIZE + ) { + } + + public function paginate(int $page = 1): self + { + $this->currentPage = max(1, $page); + $firstResult = ($this->currentPage - 1) * $this->pageSize; + + $query = $this->queryBuilder + ->setFirstResult($firstResult) + ->setMaxResults($this->pageSize) + ->getQuery(); + + /** @var array $joinDqlParts */ + $joinDqlParts = $this->queryBuilder->getDQLPart('join'); + + if (0 === \count($joinDqlParts)) { + $query->setHint(CountWalker::HINT_DISTINCT, false); + } + + $paginator = new DoctrinePaginator($query, true); + + /** @var array $havingDqlParts */ + $havingDqlParts = $this->queryBuilder->getDQLPart('having'); + + $useOutputWalkers = \count($havingDqlParts ?: []) > 0; + $paginator->setUseOutputWalkers($useOutputWalkers); + + $this->results = $paginator->getIterator(); + $this->numResults = $paginator->count(); + + return $this; + } + + public function getCurrentPage(): int + { + return $this->currentPage; + } + + public function getLastPage(): int + { + return (int) ceil($this->numResults / $this->pageSize); + } + + public function getPageSize(): int + { + return $this->pageSize; + } + + public function hasPreviousPage(): bool + { + return $this->currentPage > 1; + } + + public function getPreviousPage(): int + { + return max(1, $this->currentPage - 1); + } + + public function hasNextPage(): bool + { + return $this->currentPage < $this->getLastPage(); + } + + public function getNextPage(): int + { + return min($this->getLastPage(), $this->currentPage + 1); + } + + public function hasToPaginate(): bool + { + return $this->numResults > $this->pageSize; + } + + public function getNumResults(): int + { + return $this->numResults; + } + + /** + * @return \Traversable + */ + public function getResults(): \Traversable + { + return $this->results; + } +} diff --git a/integration/testdata/symfony_app/src/Repository/PostRepository.php b/integration/testdata/symfony_app/src/Repository/PostRepository.php new file mode 100644 index 00000000..cb49cb81 --- /dev/null +++ b/integration/testdata/symfony_app/src/Repository/PostRepository.php @@ -0,0 +1,107 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Repository; + +use App\Entity\Post; +use App\Entity\Tag; +use App\Pagination\Paginator; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; +use function Symfony\Component\String\u; + +/** + * This custom Doctrine repository contains some methods which are useful when + * querying for blog post information. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + * + * @method Post|null findOneByTitle(string $postTitle) + * + * @template-extends ServiceEntityRepository + */ +class PostRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Post::class); + } + + public function findLatest(int $page = 1, Tag $tag = null): Paginator + { + $qb = $this->createQueryBuilder('p') + ->addSelect('a', 't') + ->innerJoin('p.author', 'a') + ->leftJoin('p.tags', 't') + ->where('p.publishedAt <= :now') + ->orderBy('p.publishedAt', 'DESC') + ->setParameter('now', new \DateTime()) + ; + + if (null !== $tag) { + $qb->andWhere(':tag MEMBER OF p.tags') + ->setParameter('tag', $tag); + } + + return (new Paginator($qb))->paginate($page); + } + + /** + * @return Post[] + */ + public function findBySearchQuery(string $query, int $limit = Paginator::PAGE_SIZE): array + { + $searchTerms = $this->extractSearchTerms($query); + + if (0 === \count($searchTerms)) { + return []; + } + + $queryBuilder = $this->createQueryBuilder('p'); + + foreach ($searchTerms as $key => $term) { + $queryBuilder + ->orWhere('p.title LIKE :t_'.$key) + ->setParameter('t_'.$key, '%'.$term.'%') + ; + } + + /** @var Post[] $result */ + $result = $queryBuilder + ->orderBy('p.publishedAt', 'DESC') + ->setMaxResults($limit) + ->getQuery() + ->getResult() + ; + + return $result; + } + + /** + * Transforms the search string into an array of search terms. + * + * @return string[] + */ + private function extractSearchTerms(string $searchQuery): array + { + $searchQuery = u($searchQuery)->replaceMatches('/[[:space:]]+/', ' ')->trim(); + $terms = array_unique($searchQuery->split(' ')); + + // ignore the search terms that are too short + return array_filter($terms, static function ($term) { + return 2 <= $term->length(); + }); + } +} diff --git a/integration/testdata/symfony_app/src/Repository/TagRepository.php b/integration/testdata/symfony_app/src/Repository/TagRepository.php new file mode 100644 index 00000000..976a1bdc --- /dev/null +++ b/integration/testdata/symfony_app/src/Repository/TagRepository.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 App\Repository; + +use App\Entity\Tag; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; + +/** + * This custom Doctrine repository is empty because so far we don't need any custom + * method to query for application user information. But it's always a good practice + * to define a custom repository that will be used when the application grows. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Yonel Ceruto + * + * @template-extends ServiceEntityRepository + */ +class TagRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Tag::class); + } +} diff --git a/integration/testdata/symfony_app/src/Repository/UserRepository.php b/integration/testdata/symfony_app/src/Repository/UserRepository.php new file mode 100644 index 00000000..e7a70ff0 --- /dev/null +++ b/integration/testdata/symfony_app/src/Repository/UserRepository.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Repository; + +use App\Entity\User; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; + +/** + * This custom Doctrine repository is empty because so far we don't need any custom + * method to query for application user information. But it's always a good practice + * to define a custom repository that will be used when the application grows. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Ryan Weaver + * @author Javier Eguiluz + * + * @method User|null findOneByUsername(string $username) + * @method User|null findOneByEmail(string $email) + * + * @template-extends ServiceEntityRepository + */ +class UserRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, User::class); + } +} diff --git a/integration/testdata/symfony_app/src/Security/PostVoter.php b/integration/testdata/symfony_app/src/Security/PostVoter.php new file mode 100644 index 00000000..939f2bd8 --- /dev/null +++ b/integration/testdata/symfony_app/src/Security/PostVoter.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 App\Security; + +use App\Entity\Post; +use App\Entity\User; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Voter; + +/** + * It grants or denies permissions for actions related to blog posts (such as + * showing, editing and deleting posts). + * + * See https://symfony.com/doc/current/security/voters.html + * + * @author Yonel Ceruto + */ +class PostVoter extends Voter +{ + // Defining these constants is overkill for this simple application, but for real + // applications, it's a recommended practice to avoid relying on "magic strings" + public const DELETE = 'delete'; + public const EDIT = 'edit'; + public const SHOW = 'show'; + + /** + * {@inheritdoc} + * + * @phpstan-param Post $subject + */ + protected function supports(string $attribute, $subject): bool + { + // this voter is only executed on Post objects and for three specific permissions + return $subject instanceof Post && \in_array($attribute, [self::SHOW, self::EDIT, self::DELETE], true); + } + + /** + * {@inheritdoc} + * + * @param Post $post + */ + protected function voteOnAttribute(string $attribute, $post, TokenInterface $token): bool + { + $user = $token->getUser(); + + // the user must be logged in; if not, deny permission + if (!$user instanceof User) { + return false; + } + + // the logic of this voter is pretty simple: if the logged user is the + // author of the given blog post, grant permission; otherwise, deny it. + // (the supports() method guarantees that $post is a Post object) + return $user === $post->getAuthor(); + } +} diff --git a/integration/testdata/symfony_app/src/Twig/AppExtension.php b/integration/testdata/symfony_app/src/Twig/AppExtension.php new file mode 100644 index 00000000..b778324b --- /dev/null +++ b/integration/testdata/symfony_app/src/Twig/AppExtension.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Twig; + +use Symfony\Component\Intl\Locales; +use Twig\Extension\AbstractExtension; +use Twig\TwigFunction; + +/** + * See https://symfony.com/doc/current/templating/twig_extension.html. + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Julien ITARD + */ +class AppExtension extends AbstractExtension +{ + /** + * @var string[] + */ + private array $localeCodes; + + /** + * @var array>|null + */ + private ?array $locales = null; + + // The $locales argument is injected thanks to the service container. + // See https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type + public function __construct(string $locales) + { + $localeCodes = explode('|', $locales); + sort($localeCodes); + $this->localeCodes = $localeCodes; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('locales', [$this, 'getLocales']), + ]; + } + + /** + * Takes the list of codes of the locales (languages) enabled in the + * application and returns an array with the name of each locale written + * in its own language (e.g. English, Français, Español, etc.). + * + * @return array> + */ + public function getLocales(): array + { + if (null !== $this->locales) { + return $this->locales; + } + + $this->locales = []; + foreach ($this->localeCodes as $localeCode) { + $this->locales[] = ['code' => $localeCode, 'name' => Locales::getName($localeCode, $localeCode)]; + } + + return $this->locales; + } +} diff --git a/integration/testdata/symfony_app/src/Twig/SourceCodeExtension.php b/integration/testdata/symfony_app/src/Twig/SourceCodeExtension.php new file mode 100644 index 00000000..e7349fbf --- /dev/null +++ b/integration/testdata/symfony_app/src/Twig/SourceCodeExtension.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 App\Twig; + +use function Symfony\Component\String\u; +use Twig\Environment; +use Twig\Extension\AbstractExtension; +use Twig\TemplateWrapper; +use Twig\TwigFunction; + +/** + * CAUTION: this is an extremely advanced Twig extension. It's used to get the + * source code of the controller and the template used to render the current + * page. If you are starting with Symfony, don't look at this code and consider + * studying instead the code of the src/Twig/AppExtension.php extension. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class SourceCodeExtension extends AbstractExtension +{ + /** + * @var callable|null + */ + private $controller; + + public function setController(?callable $controller): void + { + $this->controller = $controller; + } + + /** + * {@inheritdoc} + */ + public function getFunctions(): array + { + return [ + new TwigFunction('show_source_code', [$this, 'showSourceCode'], ['is_safe' => ['html'], 'needs_environment' => true]), + ]; + } + + /** + * @param string|TemplateWrapper $template + */ + public function showSourceCode(Environment $twig, $template): string + { + return $twig->render('debug/source_code.html.twig', [ + 'controller' => $this->getController(), + 'template' => $this->getTemplateSource($twig->resolveTemplate($template)), + ]); + } + + /** + * @return array{file_path: string, starting_line: int|false, source_code: string}|null + */ + private function getController(): ?array + { + // this happens for example for exceptions (404 errors, etc.) + if (null === $this->controller) { + return null; + } + + $method = $this->getCallableReflector($this->controller); + + /** @var string $fileName */ + $fileName = $method->getFileName(); + + if (false === $classCode = file($fileName)) { + throw new \LogicException(sprintf('There was an error while trying to read the contents of the "%s" file.', $fileName)); + } + + $startLine = $method->getStartLine() - 1; + $endLine = $method->getEndLine(); + + while ($startLine > 0) { + $line = trim($classCode[$startLine - 1]); + + if (\in_array($line, ['{', '}', ''], true)) { + break; + } + + --$startLine; + } + + $controllerCode = implode('', \array_slice($classCode, $startLine, $endLine - $startLine)); + + return [ + 'file_path' => $fileName, + 'starting_line' => $method->getStartLine(), + 'source_code' => $this->unindentCode($controllerCode), + ]; + } + + /** + * Gets a reflector for a callable. + * + * This logic is copied from Symfony\Component\HttpKernel\Controller\ControllerResolver::getArguments + */ + private function getCallableReflector(callable $callable): \ReflectionFunctionAbstract + { + if (\is_array($callable)) { + return new \ReflectionMethod($callable[0], $callable[1]); + } + + if (\is_object($callable) && !$callable instanceof \Closure) { + $r = new \ReflectionObject($callable); + + return $r->getMethod('__invoke'); + } + + // @phpstan-ignore-next-line + return new \ReflectionFunction($callable); + } + + /** + * @return array{file_path: string|false, starting_line: int, source_code: string} + */ + private function getTemplateSource(TemplateWrapper $template): array + { + $templateSource = $template->getSourceContext(); + + return [ + // Twig templates are not always stored in files (they can be stored + // in a database for example). However, for the needs of the Symfony + // Demo app, we consider that all templates are stored in files and + // that their file paths can be obtained through the source context. + 'file_path' => $templateSource->getPath(), + 'starting_line' => 1, + 'source_code' => $templateSource->getCode(), + ]; + } + + /** + * Utility method that "unindents" the given $code when all its lines start + * with a tabulation of four white spaces. + */ + private function unindentCode(string $code): string + { + $codeLines = u($code)->split("\n"); + + $indentedOrBlankLines = array_filter($codeLines, static function ($lineOfCode) { + return u($lineOfCode)->isEmpty() || u($lineOfCode)->startsWith(' '); + }); + + $codeIsIndented = \count($indentedOrBlankLines) === \count($codeLines); + if ($codeIsIndented) { + $unindentedLines = array_map(static function ($lineOfCode) { + return u($lineOfCode)->after(' '); + }, $codeLines); + $code = u("\n")->join($unindentedLines)->toString(); + } + + return $code; + } +} diff --git a/integration/testdata/symfony_app/src/Utils/MomentFormatConverter.php b/integration/testdata/symfony_app/src/Utils/MomentFormatConverter.php new file mode 100644 index 00000000..b016e32e --- /dev/null +++ b/integration/testdata/symfony_app/src/Utils/MomentFormatConverter.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 App\Utils; + +/** + * This class is used to convert PHP date format to moment.js format. + * + * @author Yonel Ceruto + */ +class MomentFormatConverter +{ + /** + * This defines the mapping between PHP ICU date format (key) and moment.js date format (value) + * For ICU formats see http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax + * For Moment formats see https://momentjs.com/docs/#/displaying/format/. + */ + private const FORMAT_CONVERT_RULES = [ + // year + 'yyyy' => 'YYYY', 'yy' => 'YY', 'y' => 'YYYY', + // day + 'dd' => 'DD', 'd' => 'D', + // day of week + 'EE' => 'ddd', 'EEEEEE' => 'dd', + // timezone + 'ZZZZZ' => 'Z', 'ZZZ' => 'ZZ', + // letter 'T' + '\'T\'' => 'T', + ]; + + /** + * Returns associated moment.js format. + */ + public function convert(string $format): string + { + return strtr($format, self::FORMAT_CONVERT_RULES); + } +} diff --git a/integration/testdata/symfony_app/src/Utils/Validator.php b/integration/testdata/symfony_app/src/Utils/Validator.php new file mode 100644 index 00000000..28a23346 --- /dev/null +++ b/integration/testdata/symfony_app/src/Utils/Validator.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Utils; + +use Symfony\Component\Console\Exception\InvalidArgumentException; +use function Symfony\Component\String\u; + +/** + * This class is used to provide an example of integrating simple classes as + * services into a Symfony application. + * See https://symfony.com/doc/current/service_container.html#creating-configuring-services-in-the-container. + * + * @author Javier Eguiluz + */ +class Validator +{ + public function validateUsername(?string $username): string + { + if (empty($username)) { + throw new InvalidArgumentException('The username can not be empty.'); + } + + if (1 !== preg_match('/^[a-z_]+$/', $username)) { + throw new InvalidArgumentException('The username must contain only lowercase latin characters and underscores.'); + } + + return $username; + } + + public function validatePassword(?string $plainPassword): string + { + if (empty($plainPassword)) { + throw new InvalidArgumentException('The password can not be empty.'); + } + + if (u($plainPassword)->trim()->length() < 6) { + throw new InvalidArgumentException('The password must be at least 6 characters long.'); + } + + return $plainPassword; + } + + public function validateEmail(?string $email): string + { + if (empty($email)) { + throw new InvalidArgumentException('The email can not be empty.'); + } + + if (null === u($email)->indexOf('@')) { + throw new InvalidArgumentException('The email should look like a real email.'); + } + + return $email; + } + + public function validateFullName(?string $fullName): string + { + if (empty($fullName)) { + throw new InvalidArgumentException('The full name can not be empty.'); + } + + return $fullName; + } +} diff --git a/integration/testdata/symfony_app/symfony.lock b/integration/testdata/symfony_app/symfony.lock new file mode 100644 index 00000000..d6484a45 --- /dev/null +++ b/integration/testdata/symfony_app/symfony.lock @@ -0,0 +1,531 @@ +{ + "dama/doctrine-test-bundle": { + "version": "4.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "4.0", + "ref": "56eaa387b5e48ebcc7c95a893b47dfa1ad51449c" + }, + "files": [ + "config/packages/test/dama_doctrine_test_bundle.yaml" + ] + }, + "dflydev/dot-access-data": { + "version": "v3.0.1" + }, + "doctrine/annotations": { + "version": "1.13", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.10", + "ref": "64d8583af5ea57b7afa4aba4b159907f3a148b05" + }, + "files": [] + }, + "doctrine/cache": { + "version": "2.1.1" + }, + "doctrine/collections": { + "version": "1.6.8" + }, + "doctrine/common": { + "version": "3.2.0" + }, + "doctrine/data-fixtures": { + "version": "1.5.1" + }, + "doctrine/dbal": { + "version": "3.2.0" + }, + "doctrine/deprecations": { + "version": "v0.5.3" + }, + "doctrine/doctrine-bundle": { + "version": "2.7", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.4", + "ref": "d562b46dd8075ab2de3d58bf7895cf6b8365cb72" + }, + "files": [ + "config/packages/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-fixtures-bundle": { + "version": "3.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.0", + "ref": "1f5514cfa15b947298df4d771e694e578d4c204d" + }, + "files": [ + "src/DataFixtures/AppFixtures.php" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "3.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.1", + "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "migrations/.gitignore" + ] + }, + "doctrine/event-manager": { + "version": "1.1.1" + }, + "doctrine/inflector": { + "version": "2.0.4" + }, + "doctrine/instantiator": { + "version": "1.4.0" + }, + "doctrine/lexer": { + "version": "1.2.1" + }, + "doctrine/migrations": { + "version": "3.3.2" + }, + "doctrine/orm": { + "version": "2.10.2" + }, + "doctrine/persistence": { + "version": "2.2.3" + }, + "doctrine/sql-formatter": { + "version": "1.1.2" + }, + "egulias/email-validator": { + "version": "3.1.2" + }, + "friendsofphp/proxy-manager-lts": { + "version": "v1.0.5" + }, + "laminas/laminas-code": { + "version": "4.4.3" + }, + "league/commonmark": { + "version": "2.1.0" + }, + "league/config": { + "version": "v1.1.1" + }, + "league/uri": { + "version": "6.5.0" + }, + "league/uri-interfaces": { + "version": "2.3.0" + }, + "masterminds/html5": { + "version": "2.7.5" + }, + "monolog/monolog": { + "version": "2.3.5" + }, + "nette/schema": { + "version": "v1.2.2" + }, + "nette/utils": { + "version": "v3.2.6" + }, + "nikic/php-parser": { + "version": "v4.13.2" + }, + "phpstan/phpstan": { + "version": "1.2.0" + }, + "psr/cache": { + "version": "3.0.0" + }, + "psr/container": { + "version": "2.0.2" + }, + "psr/event-dispatcher": { + "version": "1.0.0" + }, + "psr/http-message": { + "version": "1.0.1" + }, + "psr/log": { + "version": "1.1.4" + }, + "symfony/apache-pack": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "1.0", + "ref": "9d254a22efca7264203eea98b866f16f944b2f09" + }, + "files": [ + "public/.htaccess" + ] + }, + "symfony/asset": { + "version": "v6.0.0" + }, + "symfony/browser-kit": { + "version": "v6.0.0" + }, + "symfony/cache": { + "version": "v6.0.0" + }, + "symfony/cache-contracts": { + "version": "v3.0.0" + }, + "symfony/config": { + "version": "v6.0.0" + }, + "symfony/console": { + "version": "5.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "da0c8be8157600ad34f10ff0c9cc91232522e047" + }, + "files": [ + "bin/console" + ] + }, + "symfony/css-selector": { + "version": "v6.0.0" + }, + "symfony/debug-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" + }, + "files": [ + "config/packages/debug.yaml" + ] + }, + "symfony/dependency-injection": { + "version": "v6.0.0" + }, + "symfony/deprecation-contracts": { + "version": "v3.0.0" + }, + "symfony/doctrine-bridge": { + "version": "v6.0.0" + }, + "symfony/dom-crawler": { + "version": "v6.0.0" + }, + "symfony/dotenv": { + "version": "v6.0.0" + }, + "symfony/error-handler": { + "version": "v6.0.0" + }, + "symfony/event-dispatcher": { + "version": "v6.0.0" + }, + "symfony/event-dispatcher-contracts": { + "version": "v3.0.0" + }, + "symfony/expression-language": { + "version": "v6.0.0" + }, + "symfony/filesystem": { + "version": "v6.0.0" + }, + "symfony/finder": { + "version": "v6.0.0" + }, + "symfony/flex": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172" + }, + "files": [ + ".env" + ] + }, + "symfony/form": { + "version": "v6.0.0" + }, + "symfony/framework-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.2", + "ref": "af47254c5e4cd543e6af3e4508298ffebbdaddd3" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/preload.php", + "config/routes/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/html-sanitizer": { + "version": "v6.1.0-BETA2" + }, + "symfony/http-client": { + "version": "v6.1.0-BETA2" + }, + "symfony/http-client-contracts": { + "version": "v3.0.1" + }, + "symfony/http-foundation": { + "version": "v6.0.0" + }, + "symfony/http-kernel": { + "version": "v6.0.0" + }, + "symfony/intl": { + "version": "v6.0.0" + }, + "symfony/mailer": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "4.3", + "ref": "97a61eabb351d7f6cb7702039bcfe07fe9d7e03c" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/mime": { + "version": "v6.0.0" + }, + "symfony/monolog-bridge": { + "version": "v6.0.0" + }, + "symfony/monolog-bundle": { + "version": "3.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.7", + "ref": "213676c4ec929f046dfde5ea8e97625b81bc0578" + }, + "files": [ + "config/packages/monolog.yaml" + ] + }, + "symfony/options-resolver": { + "version": "v6.0.0" + }, + "symfony/password-hasher": { + "version": "v6.0.0" + }, + "symfony/phpunit-bridge": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "97cb3dc7b0f39c7cfc4b7553504c9d7b7795de96" + }, + "files": [ + ".env.test", + "bin/phpunit", + "phpunit.xml.dist", + "tests/bootstrap.php" + ] + }, + "symfony/polyfill-ctype": { + "version": "v1.23.0" + }, + "symfony/polyfill-intl-grapheme": { + "version": "v1.23.1" + }, + "symfony/polyfill-intl-icu": { + "version": "v1.23.0" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.23.0" + }, + "symfony/polyfill-intl-messageformatter": { + "version": "v1.23.0" + }, + "symfony/polyfill-intl-normalizer": { + "version": "v1.23.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.23.1" + }, + "symfony/property-access": { + "version": "v6.0.0" + }, + "symfony/property-info": { + "version": "v6.0.0" + }, + "symfony/routing": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.2", + "ref": "e0a11b4ccb8c9e70b574ff5ad3dfdcd41dec5aa6" + }, + "files": [ + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/runtime": { + "version": "v6.0.0" + }, + "symfony/security-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.0", + "ref": "8a5b112826f7d3d5b07027f93786ae11a1c7de48" + }, + "files": [ + "config/packages/security.yaml" + ] + }, + "symfony/security-core": { + "version": "v6.0.0" + }, + "symfony/security-csrf": { + "version": "v6.0.0" + }, + "symfony/security-http": { + "version": "v6.0.0" + }, + "symfony/service-contracts": { + "version": "v3.0.0" + }, + "symfony/stopwatch": { + "version": "v6.0.0" + }, + "symfony/string": { + "version": "v6.0.0" + }, + "symfony/translation": { + "version": "5.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "da64f5a2b6d96f5dc24914517c0350a5f91dee43" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/translation-contracts": { + "version": "v3.0.0" + }, + "symfony/twig-bridge": { + "version": "v6.0.0" + }, + "symfony/twig-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.4", + "ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/validator": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.3", + "ref": "c32cfd98f714894c4f128bb99aa2530c1227603c" + }, + "files": [ + "config/packages/validator.yaml" + ] + }, + "symfony/var-dumper": { + "version": "v6.0.0" + }, + "symfony/var-exporter": { + "version": "v6.0.0" + }, + "symfony/web-profiler-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.1", + "ref": "e42b3f0177df239add25373083a564e5ead4e13a" + }, + "files": [ + "config/packages/web_profiler.yaml", + "config/routes/web_profiler.yaml" + ] + }, + "symfony/webpack-encore-bundle": { + "version": "1.16", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.10", + "ref": "5878c7c28468ca0fdce2497a04cfc66bab0dc3ef" + }, + "files": [ + "assets/app.js", + "assets/bootstrap.js", + "assets/controllers.json", + "assets/controllers/hello_controller.js", + "assets/styles/app.css", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, + "symfony/yaml": { + "version": "v6.0.0" + }, + "twig/extra-bundle": { + "version": "v3.3.4" + }, + "twig/intl-extra": { + "version": "v3.3.4" + }, + "twig/markdown-extra": { + "version": "v3.3.4" + }, + "twig/twig": { + "version": "v3.3.4" + } +} diff --git a/integration/testdata/symfony_app/templates/admin/blog/_delete_form.html.twig b/integration/testdata/symfony_app/templates/admin/blog/_delete_form.html.twig new file mode 100644 index 00000000..257d4d8c --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/_delete_form.html.twig @@ -0,0 +1,8 @@ +{{ include('blog/_delete_post_confirmation.html.twig') }} +
    + + +
    diff --git a/integration/testdata/symfony_app/templates/admin/blog/_form.html.twig b/integration/testdata/symfony_app/templates/admin/blog/_form.html.twig new file mode 100644 index 00000000..13fe0346 --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/_form.html.twig @@ -0,0 +1,26 @@ +{# + By default, forms enable client-side validation. This means that you can't + test the server-side validation errors from the browser. To temporarily + disable this validation, add the 'novalidate' attribute: + + {{ form_start(form, {attr: {novalidate: 'novalidate'}}) }} +#} + +{% if show_confirmation|default(false) %} + {% set attr = {'data-confirmation': 'true'} %} + {{ include('blog/_delete_post_confirmation.html.twig') }} +{% endif %} + +{{ form_start(form, {attr: attr|default({})}) }} + {{ form_widget(form) }} + + + + {% if include_back_to_home_link|default(false) %} + + {{ 'action.back_to_list'|trans }} + + {% endif %} +{{ form_end(form) }} diff --git a/integration/testdata/symfony_app/templates/admin/blog/edit.html.twig b/integration/testdata/symfony_app/templates/admin/blog/edit.html.twig new file mode 100644 index 00000000..404b0b52 --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/edit.html.twig @@ -0,0 +1,29 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_edit' %} + +{% block main %} +

    {{ 'title.edit_post'|trans({'id': post.id}) }}

    + + {{ include('admin/blog/_form.html.twig', { + form: form, + button_label: 'action.save'|trans, + include_back_to_home_link: true, + }, with_context = false) }} +{% endblock %} + +{% block sidebar %} + + +
    + {{ include('admin/blog/_delete_form.html.twig', {post: post}, with_context = false) }} +
    + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/admin/blog/index.html.twig b/integration/testdata/symfony_app/templates/admin/blog/index.html.twig new file mode 100644 index 00000000..ddcefb9a --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/index.html.twig @@ -0,0 +1,55 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_index' %} + +{% block main %} +

    {{ 'title.post_list'|trans }}

    + + + + + + + + + + + {% for post in posts %} + + + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + + + + {% else %} + + + + {% endfor %} + +
    {{ 'label.title'|trans }} {{ 'label.published_at'|trans }} {{ 'label.actions'|trans }}
    {{ post.title }}{{ post.publishedAt|format_datetime('medium', 'short', '', 'UTC') }} + +
    {{ 'post.no_posts_found'|trans }}
    +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/admin/blog/new.html.twig b/integration/testdata/symfony_app/templates/admin/blog/new.html.twig new file mode 100644 index 00000000..de1dc470 --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/new.html.twig @@ -0,0 +1,29 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_new' %} + +{% block main %} +

    {{ 'title.post_new'|trans }}

    + + {{ form_start(form) }} + {{ form_row(form.title) }} + {{ form_row(form.summary) }} + {{ form_row(form.content) }} + {{ form_row(form.publishedAt) }} + {{ form_row(form.tags) }} + + + {{ form_widget(form.saveAndCreateNew, {label: 'label.save_and_create_new', attr: {class: 'btn btn-primary'}}) }} + + {{ 'action.back_to_list'|trans }} + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/admin/blog/show.html.twig b/integration/testdata/symfony_app/templates/admin/blog/show.html.twig new file mode 100644 index 00000000..c891e17c --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/blog/show.html.twig @@ -0,0 +1,36 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_show' %} + +{% block main %} +

    {{ post.title }}

    + + + +
    +

    {{ 'label.summary'|trans }}: {{ post.summary }}

    +
    + + {{ post.content|markdown_to_html|sanitize_html }} + + {{ include('blog/_post_tags.html.twig') }} +{% endblock %} + +{% block sidebar %} + + +
    + {{ include('admin/blog/_delete_form.html.twig', {post: post}, with_context = false) }} +
    + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/admin/layout.html.twig b/integration/testdata/symfony_app/templates/admin/layout.html.twig new file mode 100644 index 00000000..92e55c10 --- /dev/null +++ b/integration/testdata/symfony_app/templates/admin/layout.html.twig @@ -0,0 +1,31 @@ +{# + This is the base template of the all backend pages. Since this layout is similar + to the global layout, we inherit from it to just change the contents of some + blocks. In practice, backend templates are using a three-level inheritance, + showing how powerful, yet easy to use, is Twig's inheritance mechanism. + See https://symfony.com/doc/current/templates.html#template-inheritance-and-layouts +#} +{% extends 'base.html.twig' %} + +{% block stylesheets %} + {{ parent() }} + {{ encore_entry_link_tags('admin') }} +{% endblock %} + +{% block header_navigation_links %} +
  • + + {{ 'menu.post_list'|trans }} + +
  • +
  • + + {{ 'menu.back_to_blog'|trans }} + +
  • +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('admin') }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/base.html.twig b/integration/testdata/symfony_app/templates/base.html.twig new file mode 100644 index 00000000..3bbec549 --- /dev/null +++ b/integration/testdata/symfony_app/templates/base.html.twig @@ -0,0 +1,166 @@ +{# + This is the base template used as the application layout which contains the + common elements and decorates all the other templates. + See https://symfony.com/doc/current/templates.html#template-inheritance-and-layouts +#} + + + + + + {% block title %}Symfony Demo application{% endblock %} + + + {# + Those two blocks defines frontend entrypoint for CSS and JavaScript assets + See https://symfony.com/doc/current/frontend.html + #} + {% block stylesheets %} + {{ encore_entry_link_tags('app') }} + {% endblock %} + {% block javascripts %} + {{ encore_entry_script_tags('app') }} + {% endblock %} + + + + + + + {% block header %} +
    + +
    + {% endblock %} + +
    + {% block body %} +
    +
    + {{ include('default/_flash_messages.html.twig') }} + + {% block main %}{% endblock %} +
    + + +
    + {% endblock %} +
    + + {% block footer %} +
    +
    +
    + + +
    +
    +
    + {% endblock %} + + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + + + diff --git a/integration/testdata/symfony_app/templates/blog/_comment_form.html.twig b/integration/testdata/symfony_app/templates/blog/_comment_form.html.twig new file mode 100644 index 00000000..5a91e491 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/_comment_form.html.twig @@ -0,0 +1,40 @@ +{# + By default, forms enable client-side validation. This means that you can't + test the server-side validation errors from the browser. To temporarily + disable this validation, add the 'novalidate' attribute: + + {{ form_start(form, {method: ..., action: ..., attr: {novalidate: 'novalidate'}}) }} +#} + +{{ form_start(form, {method: 'POST', action: path('comment_new', {'postSlug': post.slug})}) }} + {# instead of displaying form fields one by one, you can also display them + all with their default options and styles just by calling to this function: + + {{ form_widget(form) }} + #} + +
    + + {{ 'title.add_comment'|trans }} + + + {# Render any global form error (e.g. when a constraint on a public getter method failed) #} + {{ form_errors(form) }} + +
    + {{ form_label(form.content, 'label.content', {label_attr: {class: 'sr-only'}}) }} + + {# Render any errors for the "content" field (e.g. when a class property constraint failed) #} + {{ form_errors(form.content) }} + + {{ form_widget(form.content, {attr: {rows: 10}}) }} + {{ form_help(form.content) }} +
    + +
    + +
    +
    +{{ form_end(form) }} diff --git a/integration/testdata/symfony_app/templates/blog/_delete_post_confirmation.html.twig b/integration/testdata/symfony_app/templates/blog/_delete_post_confirmation.html.twig new file mode 100644 index 00000000..3832c5e3 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/_delete_post_confirmation.html.twig @@ -0,0 +1,19 @@ +{# Bootstrap modal, see https://getbootstrap.com/docs/3.4/javascript/#modals #} + diff --git a/integration/testdata/symfony_app/templates/blog/_post_tags.html.twig b/integration/testdata/symfony_app/templates/blog/_post_tags.html.twig new file mode 100644 index 00000000..9a821515 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/_post_tags.html.twig @@ -0,0 +1,12 @@ +{% if not post.tags.empty %} + +{% endif %} + diff --git a/integration/testdata/symfony_app/templates/blog/_rss.html.twig b/integration/testdata/symfony_app/templates/blog/_rss.html.twig new file mode 100644 index 00000000..69d778b6 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/_rss.html.twig @@ -0,0 +1,5 @@ + diff --git a/integration/testdata/symfony_app/templates/blog/about.html.twig b/integration/testdata/symfony_app/templates/blog/about.html.twig new file mode 100644 index 00000000..2b0a629f --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/about.html.twig @@ -0,0 +1,15 @@ +
    +
    +

    + {{ 'help.app_description'|trans|raw }} +

    +

    + {{ 'help.more_information'|trans|raw }} +

    +
    +
    + +{# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + diff --git a/integration/testdata/symfony_app/templates/blog/comment_form_error.html.twig b/integration/testdata/symfony_app/templates/blog/comment_form_error.html.twig new file mode 100644 index 00000000..67c2517b --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/comment_form_error.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'comment_form_error' %} + +{% block main %} +

    {{ 'title.comment_error'|trans }}

    + +
    + {{ include('blog/_comment_form.html.twig') }} +
    +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/blog/index.html.twig b/integration/testdata/symfony_app/templates/blog/index.html.twig new file mode 100644 index 00000000..52e88745 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/index.html.twig @@ -0,0 +1,59 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'blog_index' %} + +{% block main %} + {% for post in paginator.results %} +
    +

    + + {{ post.title }} + +

    + + + +

    {{ post.summary }}

    + + {{ include('blog/_post_tags.html.twig') }} +
    + {% else %} +
    {{ 'post.no_posts_found'|trans }}
    + {% endfor %} + + {% if paginator.hasToPaginate %} + + {% endif %} +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} + {{ include('blog/_rss.html.twig') }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/blog/index.xml.twig b/integration/testdata/symfony_app/templates/blog/index.xml.twig new file mode 100644 index 00000000..9ed0331a --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/index.xml.twig @@ -0,0 +1,25 @@ + + + + {{ 'rss.title'|trans }} + {{ 'rss.description'|trans }} + {{ 'now'|date('r', timezone='GMT') }} + {{ (paginator.results|last).publishedAt|default('now')|date('r', timezone='GMT') }} + {{ url('blog_index') }} + {{ app.request.locale }} + + {% for post in paginator.results %} + + {{ post.title }} + {{ post.summary }} + {{ url('blog_post', {'slug': post.slug}) }} + {{ url('blog_post', {'slug': post.slug}) }} + {{ post.publishedAt|date(format='r', timezone='GMT') }} + {{ post.author.email }} + {% for tag in post.tags %} + {{ tag.name }} + {% endfor %} + + {% endfor %} + + diff --git a/integration/testdata/symfony_app/templates/blog/post_show.html.twig b/integration/testdata/symfony_app/templates/blog/post_show.html.twig new file mode 100644 index 00000000..2bd86070 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/post_show.html.twig @@ -0,0 +1,77 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'blog_post_show' %} + +{% block main %} +

    {{ post.title }}

    + + + + {{ post.content|markdown_to_html|sanitize_html }} + + {{ include('blog/_post_tags.html.twig') }} + +
    + {# The 'IS_AUTHENTICATED_FULLY' role ensures that the user has entered + their credentials (login + password) during this session. If they + are automatically logged via the 'Remember Me' functionality, they won't + be able to add a comment. + See https://symfony.com/doc/current/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources + #} + {% if is_granted('IS_AUTHENTICATED_FULLY') %} + {{ render(controller('App\\Controller\\BlogController::commentForm', {'id': post.id})) }} + {% else %} +

    + + {{ 'action.sign_in'|trans }} + + {{ 'post.to_publish_a_comment'|trans }} +

    + {% endif %} +
    + +

    + {{ 'post.num_comments'|trans({ 'count': post.comments|length }) }} +

    + + {% for comment in post.comments %} +
    + +

    + {{ comment.author.fullName }} {{ 'post.commented_on'|trans }} + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + {{ comment.publishedAt|format_datetime('medium', 'short', '', 'UTC') }} +

    +
    + {{ comment.content|markdown_to_html|sanitize_html }} +
    +
    + {% else %} +
    +

    {{ 'post.no_comments'|trans }}

    +
    + {% endfor %} +{% endblock %} + +{% block sidebar %} + {% if is_granted('edit', post) %} + + {% endif %} + + {# the parent() function includes the contents defined by the parent template + ('base.html.twig') for this block ('sidebar'). This is a very convenient way + to share common contents in different templates #} + {{ parent() }} + + {{ show_source_code(_self) }} + {{ include('blog/_rss.html.twig') }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/blog/search.html.twig b/integration/testdata/symfony_app/templates/blog/search.html.twig new file mode 100644 index 00000000..55b1bba6 --- /dev/null +++ b/integration/testdata/symfony_app/templates/blog/search.html.twig @@ -0,0 +1,29 @@ +{% extends 'base.html.twig' %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('search') }} +{% endblock %} + +{% block body_id 'blog_search' %} + +{% block main %} +
    +
    + +
    +
    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error.html.twig b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error.html.twig new file mode 100644 index 00000000..28ab5d91 --- /dev/null +++ b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render any error different from 403, 404 and 500. + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ 'status_code': status_code }) }}

    + +

    + {{ 'http_error.description'|trans({ 'status_code': status_code }) }} +

    +

    + {{ 'http_error.suggestion'|trans({ 'url': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error403.html.twig b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error403.html.twig new file mode 100644 index 00000000..6a05679b --- /dev/null +++ b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error403.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render errors of type HTTP 403 (Forbidden) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ 'status_code': 403 }) }}

    + +

    + {{ 'http_error_403.description'|trans }} +

    +

    + {{ 'http_error_403.suggestion'|trans }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error404.html.twig b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error404.html.twig new file mode 100644 index 00000000..07c6b245 --- /dev/null +++ b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error404.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render errors of type HTTP 404 (Not Found) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ 'status_code': 404 }) }}

    + +

    + {{ 'http_error_404.description'|trans }} +

    +

    + {{ 'http_error_404.suggestion'|trans({ 'url': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error500.html.twig b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error500.html.twig new file mode 100644 index 00000000..8de9d793 --- /dev/null +++ b/integration/testdata/symfony_app/templates/bundles/TwigBundle/Exception/error500.html.twig @@ -0,0 +1,35 @@ +{# + This template is used to render errors of type HTTP 500 (Internal Server Error) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block stylesheets %} + {{ parent() }} + +{% endblock %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ 'status_code': 500 }) }}

    + +

    + {{ 'http_error_500.description'|trans }} +

    +

    + {{ 'http_error_500.suggestion'|trans({ 'url': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/debug/source_code.html.twig b/integration/testdata/symfony_app/templates/debug/source_code.html.twig new file mode 100644 index 00000000..e68a8839 --- /dev/null +++ b/integration/testdata/symfony_app/templates/debug/source_code.html.twig @@ -0,0 +1,35 @@ +
    +

    + {{ 'help.show_code'|trans|raw }} +

    + + + + +
    diff --git a/integration/testdata/symfony_app/templates/default/_flash_messages.html.twig b/integration/testdata/symfony_app/templates/default/_flash_messages.html.twig new file mode 100644 index 00000000..eb673271 --- /dev/null +++ b/integration/testdata/symfony_app/templates/default/_flash_messages.html.twig @@ -0,0 +1,32 @@ +{# + This is a template fragment designed to be included in other templates + See https://symfony.com/doc/current/templates.html#including-templates + + A common practice to better distinguish between templates and fragments is to + prefix fragments with an underscore. That's why this template is called + '_flash_messages.html.twig' instead of 'flash_messages.html.twig' +#} + +{# + The check is needed to prevent starting the session when looking for "flash messages": + https://symfony.com/doc/current/session.html#avoid-starting-sessions-for-anonymous-users + + TIP: With FOSHttpCache you can also adapt this to make it cache safe: + https://foshttpcachebundle.readthedocs.io/en/latest/features/helpers/flash-message.html +#} +{% if app.request.hasPreviousSession %} +
    + {% for type, messages in app.flashes %} + {% for message in messages %} + {# Bootstrap alert, see https://getbootstrap.com/docs/3.4/components/#alerts #} + + {% endfor %} + {% endfor %} +
    +{% endif %} diff --git a/integration/testdata/symfony_app/templates/default/homepage.html.twig b/integration/testdata/symfony_app/templates/default/homepage.html.twig new file mode 100644 index 00000000..354a70be --- /dev/null +++ b/integration/testdata/symfony_app/templates/default/homepage.html.twig @@ -0,0 +1,44 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'homepage' %} + +{# + the homepage is a special page which displays neither a header nor a footer. + this is done with the 'trick' of defining empty Twig blocks without any content +#} +{% block header %}{% endblock %} +{% block footer %}{% endblock %} + +{% block body %} + + +
    +
    +
    +

    + {{ 'help.browse_app'|trans|raw }} +

    +

    + + {{ 'action.browse_app'|trans }} + +

    +
    +
    + +
    +
    +

    + {{ 'help.browse_admin'|trans|raw }} +

    +

    + + {{ 'action.browse_admin'|trans }} + +

    +
    +
    +
    +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/form/fields.html.twig b/integration/testdata/symfony_app/templates/form/fields.html.twig new file mode 100644 index 00000000..f66070c1 --- /dev/null +++ b/integration/testdata/symfony_app/templates/form/fields.html.twig @@ -0,0 +1,26 @@ +{# + Each field type is rendered by a template fragment, which is determined + by the name of your form type class (DateTimePickerType -> date_time_picker) + and the suffix "_widget". This can be controlled by overriding getBlockPrefix() + in DateTimePickerType. + + See https://symfony.com/doc/current/form/create_custom_field_type.html#creating-the-form-type-template +#} + +{% block date_time_picker_widget %} +
    + {{ block('datetime_widget') }} + + + +
    +{% endblock %} + +{% block tags_input_widget %} +
    + {{ form_widget(form, {'attr': {'data-toggle': 'tagsinput', 'data-tags': tags|json_encode}}) }} + + + +
    +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/form/layout.html.twig b/integration/testdata/symfony_app/templates/form/layout.html.twig new file mode 100644 index 00000000..272bc28a --- /dev/null +++ b/integration/testdata/symfony_app/templates/form/layout.html.twig @@ -0,0 +1,16 @@ +{% extends 'bootstrap_3_layout.html.twig' %} + +{# Errors #} + +{% block form_errors -%} + {% if errors|length > 0 -%} + {% if form is not rootform %}{% else %}
    {% endif %} +
      + {%- for error in errors -%} + {# use font-awesome icon library #} +
    • {{ error.message }}
    • + {%- endfor -%} +
    + {% if form is not rootform %}{% else %}
    {% endif %} + {%- endif %} +{%- endblock form_errors %} diff --git a/integration/testdata/symfony_app/templates/security/login.html.twig b/integration/testdata/symfony_app/templates/security/login.html.twig new file mode 100644 index 00000000..8de9c389 --- /dev/null +++ b/integration/testdata/symfony_app/templates/security/login.html.twig @@ -0,0 +1,100 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'login' %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('login') }} +{% endblock %} + +{% block main %} + {% if error %} +
    + {{ error.messageKey|trans(error.messageData, 'security') }} +
    + {% endif %} + +
    +
    +
    +
    +
    + {{ 'title.login'|trans }} +
    + + +
    +
    + + +
    +
    + +
    + + + +
    +
    +
    +
    + +
    +

    + + {{ 'help.login_users'|trans }} +

    + + + + + + + + + + + + + + + + + + + + + +
    {{ 'label.username'|trans }}{{ 'label.password'|trans }}{{ 'label.role'|trans }}
    john_userkittenROLE_USER ({{ 'help.role_user'|trans }})
    jane_adminkittenROLE_ADMIN ({{ 'help.role_admin'|trans }})
    + +
    +
    +

    + {{ 'note'|trans }} + {{ 'help.reload_fixtures'|trans }}
    + + $ php bin/console doctrine:fixtures:load +

    + +

    + {{ 'tip'|trans }} + {{ 'help.add_user'|trans }}
    + + $ php bin/console app:add-user +

    +
    +
    +
    +
    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/user/change_password.html.twig b/integration/testdata/symfony_app/templates/user/change_password.html.twig new file mode 100644 index 00000000..82421c75 --- /dev/null +++ b/integration/testdata/symfony_app/templates/user/change_password.html.twig @@ -0,0 +1,29 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'user_password' %} + +{% block main %} +

    {{ 'title.change_password'|trans }}

    + + + + {{ form_start(form) }} + {{ form_widget(form) }} + + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/templates/user/edit.html.twig b/integration/testdata/symfony_app/templates/user/edit.html.twig new file mode 100644 index 00000000..126635e3 --- /dev/null +++ b/integration/testdata/symfony_app/templates/user/edit.html.twig @@ -0,0 +1,27 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'user_edit' %} + +{% block main %} +

    {{ 'title.edit_user'|trans }}

    + + {{ form_start(form) }} + {{ form_widget(form) }} + + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/integration/testdata/symfony_app/tests/Command/AbstractCommandTest.php b/integration/testdata/symfony_app/tests/Command/AbstractCommandTest.php new file mode 100644 index 00000000..62862cec --- /dev/null +++ b/integration/testdata/symfony_app/tests/Command/AbstractCommandTest.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 App\Tests\Command; + +use Symfony\Bundle\FrameworkBundle\Console\Application; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Tester\CommandTester; + +abstract class AbstractCommandTest extends KernelTestCase +{ + /** + * This helper method abstracts the boilerplate code needed to test the + * execution of a command. + * + * @param array $arguments All the arguments passed when executing the command + * @param array $inputs The (optional) answers given to the command when it asks for the + * value of the missing arguments + */ + protected function executeCommand(array $arguments, array $inputs = []): CommandTester + { + self::bootKernel(); + + // this uses a special testing container that allows you to fetch private services + /** @var Command $command */ + $command = static::getContainer()->get($this->getCommandFqcn()); + $command->setApplication(new Application(self::$kernel)); + + $commandTester = new CommandTester($command); + $commandTester->setInputs($inputs); + $commandTester->execute($arguments); + + return $commandTester; + } + + abstract protected function getCommandFqcn(): string; +} diff --git a/integration/testdata/symfony_app/tests/Command/AddUserCommandTest.php b/integration/testdata/symfony_app/tests/Command/AddUserCommandTest.php new file mode 100644 index 00000000..008d1ea1 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Command/AddUserCommandTest.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Command; + +use App\Command\AddUserCommand; +use App\Repository\UserRepository; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; + +class AddUserCommandTest extends AbstractCommandTest +{ + /** + * @var string[] + */ + private array $userData = [ + 'username' => 'chuck_norris', + 'password' => 'foobar', + 'email' => 'chuck@norris.com', + 'full-name' => 'Chuck Norris', + ]; + + protected function setUp(): void + { + if ('Windows' === \PHP_OS_FAMILY) { + $this->markTestSkipped('`stty` is required to test this command.'); + } + } + + /** + * @dataProvider isAdminDataProvider + * + * This test provides all the arguments required by the command, so the + * command runs non-interactively and it won't ask for any argument. + */ + public function testCreateUserNonInteractive(bool $isAdmin): void + { + $input = $this->userData; + if ($isAdmin) { + $input['--admin'] = 1; + } + $this->executeCommand($input); + + $this->assertUserCreated($isAdmin); + } + + /** + * @dataProvider isAdminDataProvider + * + * This test doesn't provide all the arguments required by the command, so + * the command runs interactively and it will ask for the value of the missing + * arguments. + * See https://symfony.com/doc/current/components/console/helpers/questionhelper.html#testing-a-command-that-expects-input + */ + public function testCreateUserInteractive(bool $isAdmin): void + { + $this->executeCommand( + // these are the arguments (only 1 is passed, the rest are missing) + $isAdmin ? ['--admin' => 1] : [], + // these are the responses given to the questions asked by the command + // to get the value of the missing required arguments + array_values($this->userData) + ); + + $this->assertUserCreated($isAdmin); + } + + /** + * This is used to execute the same test twice: first for normal users + * (isAdmin = false) and then for admin users (isAdmin = true). + */ + public function isAdminDataProvider(): \Generator + { + yield [false]; + yield [true]; + } + + /** + * This helper method checks that the user was correctly created and saved + * in the database. + */ + private function assertUserCreated(bool $isAdmin): void + { + /** @var UserRepository $repository */ + $repository = $this->getContainer()->get(UserRepository::class); + + /** @var \App\Entity\User $user */ + $user = $repository->findOneByEmail($this->userData['email']); + + /** @var UserPasswordHasherInterface $passwordHasher */ + $passwordHasher = $this->getContainer()->get('test.user_password_hasher'); + + $this->assertNotNull($user); + $this->assertSame($this->userData['full-name'], $user->getFullName()); + $this->assertSame($this->userData['username'], $user->getUsername()); + $this->assertTrue($passwordHasher->isPasswordValid($user, $this->userData['password'])); + $this->assertSame($isAdmin ? ['ROLE_ADMIN'] : ['ROLE_USER'], $user->getRoles()); + } + + protected function getCommandFqcn(): string + { + return AddUserCommand::class; + } +} diff --git a/integration/testdata/symfony_app/tests/Command/ListUsersCommandTest.php b/integration/testdata/symfony_app/tests/Command/ListUsersCommandTest.php new file mode 100644 index 00000000..b34a8de3 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Command/ListUsersCommandTest.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 App\Tests\Command; + +use App\Command\ListUsersCommand; + +class ListUsersCommandTest extends AbstractCommandTest +{ + /** + * @dataProvider maxResultsProvider + * + * This test verifies the amount of data is right according to the given parameter max results. + */ + public function testListUsers(int $maxResults): void + { + $tester = $this->executeCommand( + ['--max-results' => $maxResults] + ); + + $emptyDisplayLines = 5; + $this->assertSame($emptyDisplayLines + $maxResults, mb_substr_count($tester->getDisplay(), "\n")); + } + + public function maxResultsProvider(): \Generator + { + yield [1]; + yield [2]; + } + + public function testItSendsNoEmailByDefault(): void + { + $this->executeCommand([]); + + $this->assertEmailCount(0); + } + + public function testItSendsAnEmailIfOptionProvided(): void + { + $this->executeCommand(['--send-to' => 'john.doe@symfony.com']); + + $this->assertEmailCount(1); + } + + protected function getCommandFqcn(): string + { + return ListUsersCommand::class; + } +} diff --git a/integration/testdata/symfony_app/tests/Controller/Admin/BlogControllerTest.php b/integration/testdata/symfony_app/tests/Controller/Admin/BlogControllerTest.php new file mode 100644 index 00000000..8e2fdae7 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Controller/Admin/BlogControllerTest.php @@ -0,0 +1,204 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller\Admin; + +use App\Repository\PostRepository; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test for the controllers defined inside the BlogController used + * for managing the blog in the backend. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Whenever you test resources protected by a firewall, consider using the + * technique explained in: + * https://symfony.com/doc/current/testing/http_authentication.html + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class BlogControllerTest extends WebTestCase +{ + /** + * @dataProvider getUrlsForRegularUsers + */ + public function testAccessDeniedForRegularUsers(string $httpMethod, string $url): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'john_user', + 'PHP_AUTH_PW' => 'kitten', + ]); + + $client->request($httpMethod, $url); + + $this->assertResponseStatusCodeSame(Response::HTTP_FORBIDDEN); + } + + public function getUrlsForRegularUsers(): \Generator + { + yield ['GET', '/en/admin/post/']; + yield ['GET', '/en/admin/post/1']; + yield ['GET', '/en/admin/post/1/edit']; + yield ['POST', '/en/admin/post/1/delete']; + } + + public function testAdminBackendHomePage(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/'); + + $this->assertResponseIsSuccessful(); + $this->assertSelectorExists( + 'body#admin_post_index #main tbody tr', + 'The backend homepage displays all the available posts.' + ); + } + + /** + * This test changes the database contents by creating a new blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminNewPost(): void + { + $postTitle = 'Blog Post Title '.mt_rand(); + $postSummary = $this->generateRandomString(255); + $postContent = $this->generateRandomString(1024); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/new'); + $client->submitForm('Create post', [ + 'post[title]' => $postTitle, + 'post[summary]' => $postSummary, + 'post[content]' => $postContent, + ]); + + $this->assertResponseRedirects('/en/admin/post/', Response::HTTP_FOUND); + + /** @var PostRepository $postRepository */ + $postRepository = static::getContainer()->get(PostRepository::class); + + /** @var \App\Entity\Post $post */ + $post = $postRepository->findOneByTitle($postTitle); + + $this->assertNotNull($post); + $this->assertSame($postSummary, $post->getSummary()); + $this->assertSame($postContent, $post->getContent()); + } + + public function testAdminNewDuplicatedPost(): void + { + $postTitle = 'Blog Post Title '.mt_rand(); + $postSummary = $this->generateRandomString(255); + $postContent = $this->generateRandomString(1024); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $crawler = $client->request('GET', '/en/admin/post/new'); + $form = $crawler->selectButton('Create post')->form([ + 'post[title]' => $postTitle, + 'post[summary]' => $postSummary, + 'post[content]' => $postContent, + ]); + $client->submit($form); + + // post titles must be unique, so trying to create the same post twice should result in an error + $client->submit($form); + + $this->assertSelectorTextSame('form .form-group.has-error label', 'Title'); + $this->assertSelectorTextContains('form .form-group.has-error .help-block', 'This title was already used in another blog post, but they must be unique.'); + } + + public function testAdminShowPost(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/1'); + + $this->assertResponseIsSuccessful(); + } + + /** + * This test changes the database contents by editing a blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminEditPost(): void + { + $newBlogPostTitle = 'Blog Post Title '.mt_rand(); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/1/edit'); + $client->submitForm('Save changes', [ + 'post[title]' => $newBlogPostTitle, + ]); + + $this->assertResponseRedirects('/en/admin/post/1/edit', Response::HTTP_FOUND); + + /** @var PostRepository $postRepository */ + $postRepository = static::getContainer()->get(PostRepository::class); + + /** @var \App\Entity\Post $post */ + $post = $postRepository->find(1); + + $this->assertSame($newBlogPostTitle, $post->getTitle()); + } + + /** + * This test changes the database contents by deleting a blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminDeletePost(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $crawler = $client->request('GET', '/en/admin/post/1'); + $client->submit($crawler->filter('#delete-form')->form()); + + $this->assertResponseRedirects('/en/admin/post/', Response::HTTP_FOUND); + + /** @var PostRepository $postRepository */ + $postRepository = static::getContainer()->get(PostRepository::class); + + $this->assertNull($postRepository->find(1)); + } + + private function generateRandomString(int $length): string + { + $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + + return mb_substr(str_shuffle(str_repeat($chars, (int) ceil($length / mb_strlen($chars)))), 1, $length); + } +} diff --git a/integration/testdata/symfony_app/tests/Controller/BlogControllerTest.php b/integration/testdata/symfony_app/tests/Controller/BlogControllerTest.php new file mode 100644 index 00000000..8e931e80 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Controller/BlogControllerTest.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Pagination\Paginator; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; + +/** + * Functional test for the controllers defined inside BlogController. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class BlogControllerTest extends WebTestCase +{ + public function testIndex(): void + { + $client = static::createClient(); + $crawler = $client->request('GET', '/en/blog/'); + + $this->assertResponseIsSuccessful(); + + $this->assertCount( + Paginator::PAGE_SIZE, + $crawler->filter('article.post'), + 'The homepage displays the right number of posts.' + ); + } + + public function testRss(): void + { + $client = static::createClient(); + $crawler = $client->request('GET', '/en/blog/rss.xml'); + + $this->assertResponseHeaderSame('Content-Type', 'text/xml; charset=UTF-8'); + + $this->assertCount( + Paginator::PAGE_SIZE, + $crawler->filter('item'), + 'The xml file displays the right number of posts.' + ); + } + + /** + * This test changes the database contents by creating a new comment. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testNewComment(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'john_user', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->followRedirects(); + + // Find first blog post + $crawler = $client->request('GET', '/en/blog/'); + $postLink = $crawler->filter('article.post > h2 a')->link(); + + $client->click($postLink); + $crawler = $client->submitForm('Publish comment', [ + 'comment[content]' => 'Hi, Symfony!', + ]); + + $newComment = $crawler->filter('.post-comment')->first()->filter('div > p')->text(); + + $this->assertSame('Hi, Symfony!', $newComment); + } + + public function testAjaxSearch(): void + { + $client = static::createClient(); + $client->xmlHttpRequest('GET', '/en/blog/search', ['q' => 'lorem']); + + /** @var string $content */ + $content = $client->getResponse()->getContent(); + + /** @var array> $results */ + $results = json_decode($content, true); + + $this->assertResponseHeaderSame('Content-Type', 'application/json'); + $this->assertCount(1, $results); + $this->assertSame('Lorem ipsum dolor sit amet consectetur adipiscing elit', $results[0]['title']); + $this->assertSame('Jane Doe', $results[0]['author']); + } +} diff --git a/integration/testdata/symfony_app/tests/Controller/DefaultControllerTest.php b/integration/testdata/symfony_app/tests/Controller/DefaultControllerTest.php new file mode 100644 index 00000000..463c3b3a --- /dev/null +++ b/integration/testdata/symfony_app/tests/Controller/DefaultControllerTest.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Entity\Post; +use Doctrine\Bundle\DoctrineBundle\Registry; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test that implements a "smoke test" of all the public and secure + * URLs of the application. + * See https://symfony.com/doc/current/best_practices.html#smoke-test-your-urls. + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class DefaultControllerTest extends WebTestCase +{ + /** + * PHPUnit's data providers allow to execute the same tests repeated times + * using a different set of data each time. + * See https://symfony.com/doc/current/testing.html#testing-against-different-sets-of-data. + * + * @dataProvider getPublicUrls + */ + public function testPublicUrls(string $url): void + { + $client = static::createClient(); + $client->request('GET', $url); + + $this->assertResponseIsSuccessful(sprintf('The %s public URL loads correctly.', $url)); + } + + /** + * A good practice for tests is to not use the service container, to make + * them more robust. However, in this example we must access to the container + * to get the entity manager and make a database query. The reason is that + * blog post fixtures are randomly generated and there's no guarantee that + * a given blog post slug will be available. + */ + public function testPublicBlogPost(): void + { + $client = static::createClient(); + + // the service container is always available via the test client + /** @var Registry $registry */ + $registry = $client->getContainer()->get('doctrine'); + + /** @var Post $blogPost */ + $blogPost = $registry->getRepository(Post::class)->find(1); + + $client->request('GET', sprintf('/en/blog/posts/%s', $blogPost->getSlug())); + $this->assertResponseIsSuccessful(); + } + + /** + * The application contains a lot of secure URLs which shouldn't be + * publicly accessible. This tests ensures that whenever a user tries to + * access one of those pages, a redirection to the login form is performed. + * + * @dataProvider getSecureUrls + */ + public function testSecureUrls(string $url): void + { + $client = static::createClient(); + $client->request('GET', $url); + + $this->assertResponseRedirects( + 'http://localhost/en/login', + Response::HTTP_FOUND, + sprintf('The %s secure URL redirects to the login form.', $url) + ); + } + + public function getPublicUrls(): \Generator + { + yield ['/']; + yield ['/en/blog/']; + yield ['/en/login']; + } + + public function getSecureUrls(): \Generator + { + yield ['/en/admin/post/']; + yield ['/en/admin/post/new']; + yield ['/en/admin/post/1']; + yield ['/en/admin/post/1/edit']; + } +} diff --git a/integration/testdata/symfony_app/tests/Controller/UserControllerTest.php b/integration/testdata/symfony_app/tests/Controller/UserControllerTest.php new file mode 100644 index 00000000..15551f46 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Controller/UserControllerTest.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Repository\UserRepository; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test for the controllers defined inside the UserController used + * for managing the current logged user. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Whenever you test resources protected by a firewall, consider using the + * technique explained in: + * https://symfony.com/doc/current/testing/http_authentication.html + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class UserControllerTest extends WebTestCase +{ + /** + * @dataProvider getUrlsForAnonymousUsers + */ + public function testAccessDeniedForAnonymousUsers(string $httpMethod, string $url): void + { + $client = static::createClient(); + $client->request($httpMethod, $url); + + $this->assertResponseRedirects( + 'http://localhost/en/login', + Response::HTTP_FOUND, + sprintf('The %s secure URL redirects to the login form.', $url) + ); + } + + public function getUrlsForAnonymousUsers(): \Generator + { + yield ['GET', '/en/profile/edit']; + yield ['GET', '/en/profile/change-password']; + } + + public function testEditUser(): void + { + $newUserEmail = 'admin_jane@symfony.com'; + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/profile/edit'); + $client->submitForm('Save changes', [ + 'user[email]' => $newUserEmail, + ]); + + $this->assertResponseRedirects('/en/profile/edit', Response::HTTP_FOUND); + + /** @var UserRepository $userRepository */ + $userRepository = static::getContainer()->get(UserRepository::class); + + /** @var \App\Entity\User $user */ + $user = $userRepository->findOneByEmail($newUserEmail); + + $this->assertNotNull($user); + $this->assertSame($newUserEmail, $user->getEmail()); + } + + public function testChangePassword(): void + { + $newUserPassword = 'new-password'; + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/profile/change-password'); + $client->submitForm('Save changes', [ + 'change_password[currentPassword]' => 'kitten', + 'change_password[newPassword][first]' => $newUserPassword, + 'change_password[newPassword][second]' => $newUserPassword, + ]); + + $this->assertResponseRedirects( + '/en/logout', + Response::HTTP_FOUND, + 'Changing password logout the user.' + ); + } +} diff --git a/integration/testdata/symfony_app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php b/integration/testdata/symfony_app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php new file mode 100644 index 00000000..6ecbc82b --- /dev/null +++ b/integration/testdata/symfony_app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Form\DataTransformer; + +use App\Entity\Tag; +use App\Form\DataTransformer\TagArrayToStringTransformer; +use App\Repository\TagRepository; +use PHPUnit\Framework\TestCase; + +/** + * Tests that tags are transformed correctly using the data transformer. + * + * See https://symfony.com/doc/current/testing/database.html + */ +class TagArrayToStringTransformerTest extends TestCase +{ + /** + * Ensures that tags are created correctly. + */ + public function testCreateTheRightAmountOfTags(): void + { + $tags = $this->getMockedTransformer()->reverseTransform('Hello, Demo, How'); + + $this->assertCount(3, $tags); + $this->assertSame('Hello', $tags[0]->getName()); + } + + /** + * Ensures that empty tags and errors in the number of commas are + * dealt correctly. + */ + public function testCreateTheRightAmountOfTagsWithTooManyCommas(): void + { + $transformer = $this->getMockedTransformer(); + + $this->assertCount(3, $transformer->reverseTransform('Hello, Demo,, How')); + $this->assertCount(3, $transformer->reverseTransform('Hello, Demo, How,')); + } + + /** + * Ensures that leading/trailing spaces are ignored for tag names. + */ + public function testTrimNames(): void + { + $tags = $this->getMockedTransformer()->reverseTransform(' Hello '); + + $this->assertSame('Hello', $tags[0]->getName()); + } + + /** + * Ensures that duplicated tag names are ignored. + */ + public function testDuplicateNames(): void + { + $tags = $this->getMockedTransformer()->reverseTransform('Hello, Hello, Hello'); + + $this->assertCount(1, $tags); + } + + /** + * Ensures that the transformer uses tags already persisted in the database. + */ + public function testUsesAlreadyDefinedTags(): void + { + $persistedTags = [ + new Tag('Hello'), + new Tag('World'), + ]; + $tags = $this->getMockedTransformer($persistedTags)->reverseTransform('Hello, World, How, Are, You'); + + $this->assertCount(5, $tags); + $this->assertSame($persistedTags[0], $tags[0]); + $this->assertSame($persistedTags[1], $tags[1]); + } + + /** + * Ensures that the transformation from Tag instances to a simple string + * works as expected. + */ + public function testTransform(): void + { + $persistedTags = [ + new Tag('Hello'), + new Tag('World'), + ]; + $transformed = $this->getMockedTransformer()->transform($persistedTags); + + $this->assertSame('Hello,World', $transformed); + } + + /** + * This helper method mocks the real TagArrayToStringTransformer class to + * simplify the tests. See https://phpunit.de/manual/current/en/test-doubles.html. + * + * @param array $findByReturnValues The values returned when calling to the findBy() method + */ + private function getMockedTransformer(array $findByReturnValues = []): TagArrayToStringTransformer + { + $tagRepository = $this->getMockBuilder(TagRepository::class) + ->disableOriginalConstructor() + ->getMock(); + $tagRepository->expects($this->any()) + ->method('findBy') + ->willReturn($findByReturnValues); + + return new TagArrayToStringTransformer($tagRepository); + } +} diff --git a/integration/testdata/symfony_app/tests/Utils/ValidatorTest.php b/integration/testdata/symfony_app/tests/Utils/ValidatorTest.php new file mode 100644 index 00000000..0c061fa4 --- /dev/null +++ b/integration/testdata/symfony_app/tests/Utils/ValidatorTest.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Utils; + +use App\Utils\Validator; +use PHPUnit\Framework\TestCase; + +class ValidatorTest extends TestCase +{ + private Validator $validator; + + protected function setUp(): void + { + $this->validator = new Validator(); + } + + public function testValidateUsername(): void + { + $test = 'username'; + + $this->assertSame($test, $this->validator->validateUsername($test)); + } + + public function testValidateUsernameEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The username can not be empty.'); + $this->validator->validateUsername(null); + } + + public function testValidateUsernameInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The username must contain only lowercase latin characters and underscores.'); + $this->validator->validateUsername('INVALID'); + } + + public function testValidatePassword(): void + { + $test = 'password'; + + $this->assertSame($test, $this->validator->validatePassword($test)); + } + + public function testValidatePasswordEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The password can not be empty.'); + $this->validator->validatePassword(null); + } + + public function testValidatePasswordInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The password must be at least 6 characters long.'); + $this->validator->validatePassword('12345'); + } + + public function testValidateEmail(): void + { + $test = '@'; + + $this->assertSame($test, $this->validator->validateEmail($test)); + } + + public function testValidateEmailEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The email can not be empty.'); + $this->validator->validateEmail(null); + } + + public function testValidateEmailInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The email should look like a real email.'); + $this->validator->validateEmail('invalid'); + } + + public function testValidateFullName(): void + { + $test = 'Full Name'; + + $this->assertSame($test, $this->validator->validateFullName($test)); + } + + public function testValidateFullNameEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The full name can not be empty.'); + $this->validator->validateFullName(null); + } +} diff --git a/integration/testdata/symfony_app/tests/bootstrap.php b/integration/testdata/symfony_app/tests/bootstrap.php new file mode 100644 index 00000000..d75b711f --- /dev/null +++ b/integration/testdata/symfony_app/tests/bootstrap.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Component\Dotenv\Dotenv; + +require dirname(__DIR__).'/vendor/autoload.php'; + +if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) { + require dirname(__DIR__).'/config/bootstrap.php'; +} elseif (method_exists(Dotenv::class, 'bootEnv')) { + (new Dotenv())->bootEnv(dirname(__DIR__).'/.env'); +} diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.ar.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.ar.xlf new file mode 100644 index 00000000..308c73a5 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.ar.xlf @@ -0,0 +1,447 @@ + + + + + + note + ملاحظه + + + tip + ارشاد + + + not_available + غير متاح + + + mit_license + رخصة MIT + + + + http_error.name + خطأ {status_code, number} + + + http_error.description + يوجد خطأ غير معروف (HTTP {status_code, number}) الذى يمنع طلبك. + + + http_error.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + http_error_403.description + ليس لديك إذن للوصول إلى هذا المورد. + + + http_error_403.suggestion + اطلب من مديرك أو مسؤول النظام منحك حق الوصول إلى هذا المورد. + + + http_error_404.description + لم نتمكن من العثور على الصفحة التي طلبتها. + + + http_error_404.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + http_error_500.description + There was an internal server error. + + + http_error_500.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + + title.homepage + سيمفوني التجريبى]]> + + + title.source_code + رمز المصدر المستخدم لتقديم هذه الصفحة + + + title.controller_code + كود المضبط + + + title.twig_template_code + Twig كود قالب + + + title.login + تسجيل دخول امن + + + title.post_list + قائمه المنشورات + + + title.edit_post + تعديل منشور #{id, number} + + + title.add_comment + اضافه تعليق + + + title.comment_error + يوجد خطأفى نشر هذا التعليق + + + title.edit_user + تعديل المستخدم + + + title.change_password + تغير الباسوورد + + + + action.show + عرض + + + action.show_post + عرض المنشور + + + action.show_code + عرض الكود + + + action.edit + تعديل + + + action.edit_post + تعديل المنشور + + + action.save + حفظ التغيرات + + + action.delete_post + حذف المنشور + + + delete_post_modal.title + هل انت متاكد من حذف هذا المنشور؟ + + + delete_post_modal.body + هذا الاجراء لايمكن ان لا يتم. + + + label.delete_post + حذف منشور + + + label.cancel + الغاء + + + action.create_post + انشاء منشور جديد + + + label.create_post + انشاء منشور + + + label.save_and_create_new + حفظ وانشاء جديد + + + action.back_to_list + الرجوع لقائمه المنشورات + + + action.publish_comment + نشر تعليق + + + action.sign_in + تسجيل الدخول + + + action.browse_app + تصفح التطبيق + + + action.browse_admin + تصفح لوحه تحكم الاداره + + + action.edit_user + تعديل المستخدم + + + action.change_password + تغير الباسوورد + + + action.close + أغلق + + + + label.title + لقب + + + label.author + المؤلف + + + label.author_email + ايميل المؤلف + + + label.username + اسم المستخدم + + + label.fullname + الاسم الكامل + + + label.email + ايميل + + + label.password + باسوورد + + + label.current_password + الباسوورد الحالى + + + label.new_password + باسوورد جديد + + + label.new_password_confirm + تاكيد الباسوورد + + + label.role + دور + + + label.content + محتوى + + + label.summary + ملخص + + + label.published_at + نشر فى + + + label.tags + العلامات + + + label.actions + أجراءات + + + title.post_new + انشاء المنشور + + + action.edit_contents + عدل المحتويات + + + + menu.toggle_nav + تبديل التنقل + + + menu.choose_language + اختر لغه + + + menu.post_list + قائمه المنشورات + + + menu.back_to_blog + الرجوع الى المدونه + + + menu.homepage + الرئيسيه + + + menu.admin + لوحه التحكم + + + menu.user + الحساب + + + menu.logout + تسجيل الخروج + + + menu.rss + منشورات المدونه RSS + + + menu.search + بحث + + + + post.to_publish_a_comment + لنشر تعليق + + + post.num_comments + {count, plural, one {# تعليق} other {# تعليقات}} + + + post.commented_on + علق على + + + post.no_comments + كن اول من يعلق على هذا المنشور. + + + post.no_posts_found + لا يوجد منشورات. + + + post.created_successfully + تم انشاء المنشور بنجاح! + + + post.updated_successfully + تم تحديث المنشور بنجاح! + + + post.deleted_successfully + تم حدف المنشور بنجاح! + + + post.search_for + بحث عن... + + + post.search_no_results + لا يوجد نتائج + + + + user.updated_successfully + تم تحديث المستخدم بنجاح! + + + + notification.comment_created + منشورك استقبل تعليق! + + + notification.comment_created.description + هذا الرابط]]> + + + + help.app_description + تطبيق تجريبى تم بناءه بواسطه اطار سيمفوني لتوضيح الطريقة الموصى بها لتطوير تطبيقات سيمفوني.]]> + + + help.show_code + المتحكم و القالب المستخدم لعرض هذه الصفحه.]]> + + + help.browse_app + جزئ العام لدى هذا التطبيق التجريبى.]]> + + + help.browse_admin + لوحه تحكم الاداره لدى هذا التطبيق التجريبى.]]> + + + help.login_users + حاول أي من المستخدمين التاليين + + + help.role_user + مستخدم عادى + + + help.role_admin + مدير + + + help.reload_fixtures + إذا لم يعمل هؤلاء المستخدمون ، فأعد تحميل تركيبات التطبيق عن طريق تشغيل هذا الأمر من خلال محرر الاوامر: + + + help.add_user + إذا كنت ترغب في إنشاء مستخدمين جدد ، فقم بتشغيل هذا الأمر الآخر: + + + help.more_information + مستند سيمفوني.]]> + + + help.post_summary + لا يمكن أن تحتوي الملخصات على محتويات Markdown أو HTML; فقط نص عادي. + + + help.post_publication + حدد التاريخ في المستقبل لجدولة نشر منشور المدونة. + + + help.post_content + استخدم Markdown لتنسيق محتويات مشاركة المدونة. HTML مسموح به أيضًا. + + + help.comment_content + سيتم الإشراف على التعليقات التي لا تلتزم بمدونة قواعد السلوك الخاصة بنا. + + + + info.change_password + بعد تغيير كلمة المرور الخاصة بك ، سيتم تسجيل خروجك من التطبيق. + + + + rss.title + مدونه سيمفوني التجريبيه + + + rss.description + أحدث المشاركات المنشورة على مدونه سيمفوني التجريبيه + + + + paginator.previous + السابق + + + paginator.next + التالى + + + paginator.current + (الحالى) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.bg.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.bg.xlf new file mode 100644 index 00000000..c3f764ea --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.bg.xlf @@ -0,0 +1,368 @@ + + + + + + note + БЕЛЕЖКА + + + tip + СЪВЕТ + + + not_available + Не е налично + + + mit_license + MIT лиценз + + + http_error.name + Грешка {status_code, number} + + + http_error.description + Има неизвестна грешка (HTTP {status_code, number}) , която спира изпълнението на заявката. + + + http_error.suggestion + се върни в началната страница.]]> + + + http_error_403.description + Нямате права за да достъпите този ресурс. + + + http_error_403.suggestion + Попитайте вашият мениджър или системен администратор да ви позволи достъп до този ресурс. + + + http_error_404.description + Страницата която търсите не е намерена. + + + http_error_404.suggestion + се върнете в началната страница.]]> + + + http_error_500.description + Възникна вътрешно сървърна грешка. + + + http_error_500.suggestion + се върнете в началната страница.]]> + + + title.homepage + Symfony Demo приложението]]> + + + title.source_code + Изходен код, използван за изобразяване на тази страница + + + title.controller_code + Код на контролера + + + title.twig_template_code + Twig темплейт код + + + title.login + Сигурен вход + + + title.post_list + Списък с публикации + + + title.edit_post + Редактиране на публикация #{id, number} + + + title.add_comment + Добавяне на коментар + + + title.comment_error + Възникна грешка докато се публикуваше вашият коментар + + + action.show + Покажи + + + action.show_post + Покажи публикацията + + + action.show_code + Покажи кода + + + action.edit + Редактирай + + + action.edit_post + Редактиране на публикация + + + action.save + Запази промените + + + action.delete_post + Изтрии публикацията + + + delete_post_modal.title + Сигурни ли сте, че искате да изтриете тази публикация? + + + delete_post_modal.body + Това действие не може да бъде отменено. + + + label.delete_post + Изтрии публикация + + + label.cancel + Отказ + + + action.create_post + Нова публикация + + + label.create_post + Създайте публикация + + + label.save_and_create_new + Запазване и създаване на нова + + + action.back_to_list + Върнете се в списъка с публикации + + + action.publish_comment + Публикуване на коментара + + + action.sign_in + Вход + + + action.browse_app + Прегледайте приложението + + + action.browse_admin + Прегледайте бекенда + + + label.title + Заглавие + + + action.close + затварям + + + label.author + Автор + + + label.author_email + Автор email + + + label.username + Потребителско има + + + label.password + Парола + + + label.role + Роля + + + label.content + Съдържание + + + label.summary + Обобщение + + + label.published_at + Публикувано на + + + label.tags + Тагове + + + label.actions + Деиствия + + + title.post_new + Създаване на публикация + + + action.edit_contents + Редактиране + + + menu.toggle_nav + Превключване на менюто + + + menu.choose_language + Изберете език + + + menu.post_list + Списък с публикации + + + menu.back_to_blog + Назад към блога + + + menu.homepage + Начална страница + + + menu.admin + Бекенд + + + menu.logout + Изход + + + menu.rss + Блог публикации RSS + + + menu.search + Търсене + + + post.to_publish_a_comment + за да публикувате коментар + + + post.num_comments + {count, plural, one {# коментар} other {# коментари}} + + + post.commented_on + коментирано на + + + post.no_comments + Бъдете първият, който ще напише коментар към публикациата. + + + post.no_posts_found + Не са намерени публикации. + + + post.created_successfully + Публикацията беше създадена успешно! + + + post.updated_successfully + Публикацията беше редактирана успешно! + + + post.deleted_successfully + Публикацията беше изтрита успешно! + + + post.search_for + Търсене за... + + + post.search_no_results + Няма намерени резултати + + + notification.comment_created + Публикацията ви получи коментар! + + + notification.comment_created.description + този линк]]> + + + help.app_description + примерно приложение създатено със Symfony Framework за да илюстрира препоръчителния начин за разработка със Symfony.]]> + + + help.show_code + Контролера и темплейта използвани за показването на тази страница.]]> + + + help.browse_app + публичната секция на примерното приложение.]]> + + + help.browse_admin + административният панел на примерното приложение.]]> + + + help.login_users + Опитайте някой от следните потребители + + + help.role_user + обикновен потребител + + + help.role_admin + администратор + + + help.reload_fixtures + Ако тези потребители не работят, презаредете приложението като използвате следната команда от терминала: + + + help.add_user + Ако искате да създадете нови потребители, изпълнете тази друга команда: + + + help.more_information + Symfony документацията.]]> + + + rss.title + Symfony Demo блог + + + rss.description + Най-новите публикации, публикувани на блога на Symfony Demo + + + + paginator.previous + Предишна + + + paginator.next + Следваща + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.bs.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.bs.xlf new file mode 100644 index 00000000..43d13683 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.bs.xlf @@ -0,0 +1,446 @@ + + + + + + note + NAPOMENA + + + tip + SAVJET + + + not_available + Nije dostupno + + + mit_license + MIT licenca + + + + http_error.name + Greška {status_code, number} + + + http_error.description + Desila se nepoznata greška (HTTP {status_code, number}) koja je spriječila izvršavanje Vašeg zahtjeva. + + + http_error.suggestion + vratite na početnu stranicu.]]> + + + http_error_403.description + Nemate dozvolu za pristup ovom resursu. + + + http_error_403.suggestion + Tražite od administratora sistema da Vam odobri pristup ovom resursu. + + + http_error_404.description + Nismo mogli da pronađemo stranicu koju ste tražili. + + + http_error_404.suggestion + vratite na početnu stranicu..]]> + + + http_error_500.description + Došlo je do interne serverske greške (500). + + + http_error_500.suggestion + vratite na početnu stranicu.]]> + + + + title.homepage + Symfony Demo aplikaciju]]> + + + title.source_code + Izvorni kod korišćen za prikaz ove stranice + + + title.controller_code + Kod za kontroler + + + title.twig_template_code + Kod za Twig šablon + + + title.login + Bezbedno prijavljivanje + + + title.post_list + Lista članaka + + + title.edit_post + Izmjena članka #{id, number} + + + title.add_comment + Ostavi komentar + + + title.comment_error + Došlo je do greške pri objavljivanju Vašeg komentara + + + title.edit_user + Promjena podataka o korisniku/ici + + + title.change_password + Promjena lozinke + + + + action.show + Prikaži + + + action.show_post + Prikaži članak + + + action.show_code + Prikaži kod + + + action.edit + Izmjeni + + + action.edit_post + Izmjeni članak + + + action.save + Sačuvaj izmjene + + + action.delete_post + Obriši članak + + + delete_post_modal.title + Da li sigurno želite da obrišete ovaj članak? + + + delete_post_modal.body + Ova akcija se ne može poništiti. + + + label.delete_post + Obriši članak + + + label.cancel + Otkaži + + + action.create_post + Napiši novi članak + + + label.create_post + Sačuvaj članak + + + label.save_and_create_new + Sačuvaj i napiši novi članak + + + action.back_to_list + Nazad na listu članaka + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijavi me + + + action.browse_app + Istraži apllikaciju + + + action.browse_admin + Istraži administratorski dio + + + action.edit_user + Uredi korisnika/cu + + + action.change_password + Promjeni lozinku + + + action.close + Zatvori + + + + label.title + Naslov + + + label.author + Autor/ka + + + label.author_email + E-pošta autora/ke + + + label.username + Korisničko ime + + + label.fullname + Puno ime + + + label.email + E-pošta + + + label.password + Šifra + + + label.current_password + Trenutna šifra + + + label.new_password + Nova šifra + + + label.new_password_confirm + Potvrdite šifru + + + label.role + Uloga + + + label.content + Sadržaj + + + label.summary + Sažetak + + + label.published_at + Objavljeno + + + label.tags + Oznake + + + label.actions + Akcije + + + title.post_new + Novi članak + + + action.edit_contents + Izmjeni sadržaj + + + + menu.toggle_nav + Uključi/isključi navigaciju + + + menu.choose_language + Izaberite jezik + + + menu.post_list + Lista članaka + + + menu.back_to_blog + Nazad na blog + + + menu.homepage + Početna stranica + + + menu.admin + Administracija + + + menu.user + Nalog + + + menu.logout + Odjavi me + + + menu.rss + RSS članaka na blogu + + + menu.search + Traži + + + post.to_publish_a_comment + da objaviš komentar + + + post.num_comments + {count, plural, one {# komentar} other {# komentara}} + + + post.commented_on + komentar objavljen + + + post.no_comments + Napiši prvi komentar na ovaj članak. + + + post.no_posts_found + Nije pronađen nijedan članak. + + + post.created_successfully + Članak je uspješno sačuvan! + + + post.updated_successfully + Članak je uspješno ažuriran! + + + post.deleted_successfully + Članak je uspješno obrisan! + + + post.search_for + Tražim... + + + post.search_no_results + Ništa nije pronađeno + + + + user.updated_successfully + Podaci o korisniku/ci su uspješno ažurirani!! + + + + notification.comment_created + Napisan je komentar na Vaš članak! + + + notification.comment_created.description + ovom linku]]> + + + + help.app_description + demo aplikacija je napravljena u radnom okviru Symfony kao ilustracija preporučenog načina razvoja Symfony aplikacija.]]> + + + help.show_code + kontrolera i šablona korišćenih za prikaz ove stranice.]]> + + + help.browse_app + javni dio ove demo aplikacije.]]> + + + help.browse_admin + administratorski dio ove demo aplikacije.]]> + + + help.login_users + Testirajte aplikaciju upotrebom nekog od sledećih korisničkih naloga + + + help.role_user + obični/a korisnik/ca + + + help.role_admin + administrator/ka + + + help.reload_fixtures + Ukoliko prijavljivanje nekim od navedenih korisničkih naloga ne radi, ponovo učitajte demo podatke pokretanjem ove naredbe u terminalu: + + + help.add_user + Ukoliko želite da kreirate nove korisnike pokrenite ovu komandu: + + + help.more_information + Symfony dokumentaciju.]]> + + + help.post_summary + Sažetak ne može sadržati Markdown ili HTML kod već samo običan tekst. + + + help.post_publication + Ukoliko želite da zakažete objavljivanje ovog članka izaberite neki budući datum. + + + help.post_content + Za formatiranje sadržaja članka koristite Markdown. HTML je takođe dozvoljen. + + + help.comment_content + Komentari koji nisu u skladu sa našim Kodeksom ponašanja biće moderirani. + + + + info.change_password + Nakon promjene šifre bićete odjavljeni iz aplikacije. + + + + rss.title + Blog Symfony Demo + + + rss.description + Najnoviji članci objavljeni na Symfony Demo blogu + + + + paginator.previous + Prethodna + + + paginator.next + Sledeća + + + paginator.current + (trenutna) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.ca.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.ca.xlf new file mode 100644 index 00000000..63396690 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.ca.xlf @@ -0,0 +1,265 @@ + + + + + + note + NOTA + + + tip + TRUC + + + not_available + No disponible + + + mit_license + Llicència MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codi font utilitzat per mostrar aquesta pàgina + + + title.controller_code + Codi del controlador + + + title.twig_template_code + Codi de la plantilla Twig + + + title.login + Accés segur + + + title.post_list + LListat d'articles + + + title.edit_post + Editar article #{id, number} + + + title.add_comment + Afegir un comentari + + + title.comment_error + S'ha produït un error al publicar el teu comentari + + + + action.show + Veure + + + action.show_code + Veure codi + + + action.edit + Editar + + + action.edit_post + Editar article + + + action.save + Guardar canvis + + + action.delete_post + Borrar article + + + delete_post_modal.title + Estas segur que vols eliminar aquest article? + + + delete_post_modal.body + Aquesta acció no es pot desfer. + + + label.delete_post + Borrar article + + + label.cancel + Cancel·lar + + + action.create_post + Crear un nou article + + + label.create_post + Crear article + + + action.back_to_list + Tornar al llistat d'articles + + + action.publish_comment + Publicar comentari + + + action.sign_in + Iniciar sessió + + + action.browse_app + Accedir a l'aplicació + + + action.browse_admin + Accedir al backend + + + + label.title + Títol + + + action.close + Tancar + + + label.author + Autor + + + label.author_email + Email de l'autor + + + label.username + Nom d'usuari + + + label.password + Contrasenya + + + label.role + Rol + + + label.content + Contingut + + + label.summary + Resum + + + label.published_at + Publicat el + + + label.actions + Accions + + + title.post_new + Nou article + + + action.edit_contents + Editar contingut + + + + menu.post_list + Llistat d'articles + + + menu.back_to_blog + Tornar al blog + + + menu.homepage + Inici + + + menu.admin + Backend + + + menu.logout + Desconnectar-se + + + + post.to_publish_a_comment + per a publicar un comentari + + + post.num_comments + {count, plural, one {# comentari} other {# comentaris}} + + + post.commented_on + comentat el + + + post.no_comments + Sigues el primer en afegir un comentari a aquest article. + + + post.no_posts_found + No s'ha trobat cap article. + + + + help.app_description + aplicació demo ha estat programada amb el framework Symfony per mostrar la forma recomenada de programar aplicacions Symfony.]]> + + + help.show_code + controlador i de la plantilla utilitzats per crear aquesta pàgina.]]> + + + help.browse_app + part pública de l'aplicació de demostració.]]> + + + help.browse_admin + part d'administració de l'aplicació de demostració.]]> + + + help.login_users + Prova a accedir amb aquests usuaris + + + help.role_user + usuari normal + + + help.role_admin + administrador + + + help.reload_fixtures + Si cap d'aquests usuaris funciona, carrega de nou les dades de l'aplicació executant la següent ordre a la teva consola: + + + help.add_user + Si vols crear nous usuaris, executa aquesta altra ordre: + + + help.more_information + documentació de Symfony.]]> + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.cs.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.cs.xlf new file mode 100644 index 00000000..c8f9562b --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.cs.xlf @@ -0,0 +1,262 @@ + + + + + + note + POZNÁMKA + + + tip + TIP + + + not_available + není dostupný + + + mit_license + MIT licence + + + + title.homepage + Symfony Demo aplikaci]]> + + + title.source_code + Zdrojové kódy použité při vykreslení této stránky + + + title.controller_code + Kód kontroleru + + + title.twig_template_code + Kód Twig šablony + + + title.login + Přihlášení + + + title.post_list + Seznam příspěvků + + + title.edit_post + Upravit příspěvek #{id, number} + + + title.add_comment + Přidat komentář + + + title.comment_error + Při vytváření komentáře došlo k chybě + + + + action.show + Zobrazit + + + action.show_code + Zobrazit zdrojáky + + + action.edit + Upravit + + + action.edit_post + Upravit příspěvek + + + action.save + Uložit změny + + + action.delete_post + Odstranit příspěvek + + + action.create_post + Nový příspěvek + + + label.create_post + Vytvořit příspěvek + + + action.back_to_list + Zpět na seznam příspěvků + + + action.publish_comment + Zveřejnit komentář + + + action.sign_in + Přihlásit + + + action.browse_app + Přejít do aplikace + + + action.browse_admin + Přejít do administrace + + + + label.title + Název + + + action.close + Zavřít + + + label.author + Autor + + + label.author_email + Email autora + + + label.username + Login + + + label.password + Heslo + + + label.role + Role + + + label.content + Obsah + + + label.summary + Shrnutí + + + label.published_at + Publikován + + + label.actions + Akce + + + title.post_new + Nový příspěvek + + + action.edit_contents + Upravit příspěvek + + + + menu.toggle_nav + Přepnout navigaci + + + menu.post_list + Seznam příspěvků + + + menu.back_to_blog + Zpět na blog + + + menu.homepage + Hlavní stránka + + + menu.admin + Administrace + + + menu.logout + Odhlásit + + + + post.to_publish_a_comment + se pro přidání komentáře + + + post.num_comments + {count, plural, one {# komentář} few {# komentáře} other {# komentářů}} + + + post.commented_on + přidal komentář v + + + post.no_comments + Buďte první, kdo napíše komentář k tomuto příspěvku. + + + post.no_posts_found + Nebyly nalezeny žádné příspěvky. + + + + help.app_description + demo aplikace vytvořena Symfony frameworkem s využitím doporučených způsobů vývoje Symfony aplikací.]]> + + + help.show_code + kontroleru a šablony použitých při vykreslení této stránky.]]> + + + help.browse_app + veřejnou část demo aplikace.]]> + + + help.browse_admin + administrační část demo aplikace.]]> + + + help.login_users + Zkuste následující uživatele + + + help.role_user + běžný uživatel + + + help.role_admin + administrátor + + + help.reload_fixtures + Pokud přihlášení s těmito uživateli nefunguje, spusťte z terminálu příkaz pro načtení výchozích dat: + + + help.add_user + Pokud chcete vytvořit nového uživatele, spusťte příkaz: + + + help.more_information + Symfony dokumentace.]]> + + + + paginator.previous + Předchozí + + + paginator.next + Další + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.de.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.de.xlf new file mode 100644 index 00000000..31a44d55 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.de.xlf @@ -0,0 +1,447 @@ + + + + + + note + HINWEIS + + + tip + TIPP + + + not_available + Nicht verfügbar + + + mit_license + MIT-Lizenz + + + + http_error.name + Fehler {status_code, number} + + + http_error.description + Es gab einen unbekannten Fehler (HTTP {status_code, number}), sodass deine Anfrage nicht bearbeitet werden konnte. + + + http_error.suggestion + gehe zurück zur Startseite.]]> + + + http_error_403.description + Du hast keine Berechtigung, auf diese Ressource zuzugreifen. + + + http_error_403.suggestion + Frage deinen Manager oder Systemadministrator, um dir Zugriff auf diese Ressource zu gewähren. + + + http_error_404.description + Wir konnten die von dir angeforderte Seite nicht finden. + + + http_error_404.suggestion + gehe zurück zur Startseite.]]> + + + http_error_500.description + Es gab einen internen Serverfehler. + + + http_error_500.suggestion + gehe zurück zur Startseite.]]> + + + + title.homepage + Symfony-Demo-Applikation]]> + + + title.source_code + Verwendeter Quellcode, um diese Seite zu rendern. + + + title.controller_code + Controller Code + + + title.twig_template_code + Twig Template Code + + + title.login + Sicherer Login + + + title.post_list + Beitragsliste + + + title.edit_post + Beitrag #{id, number} bearbeiten + + + title.add_comment + Kommentar hinzufügen + + + title.comment_error + Beim Veröffentlichen deines Kommentares ist ein Fehler aufgetreten + + + title.edit_user + Benutzer bearbeiten + + + title.change_password + Passwort ändern + + + + action.show + Anzeigen + + + action.show_post + Beitrag anzeigen + + + action.show_code + Code anzeigen + + + action.edit + Bearbeiten + + + action.edit_post + Beitrag bearbeiten + + + action.save + Änderungen speichern + + + action.delete_post + Beitrag löschen + + + delete_post_modal.title + Bist du sicher, dass du diesen Beitrag löschen möchtest? + + + delete_post_modal.body + Diese Aktion kann nicht rückgängig gemacht werden. + + + label.delete_post + Beitrag löschen + + + label.cancel + Abbrechen + + + action.create_post + Neuen Beitrag erstellen + + + label.create_post + Beitrag erstellen + + + label.save_and_create_new + Speichern und neuen Beitrag erstellen + + + action.back_to_list + Zurück zur Beitragsliste + + + action.publish_comment + Kommentar veröffentlichen + + + action.sign_in + Anmelden + + + action.browse_app + Zur Applikation + + + action.browse_admin + Zum Backend + + + action.edit_user + Benutzer bearbeiten + + + action.change_password + Passwort ändern + + + action.close + Schließen + + + + label.title + Titel + + + label.author + Autor + + + label.author_email + E-Mail des Autors + + + label.username + Benutzername + + + label.fullname + Vollständiger Name + + + label.email + E-Mail + + + label.password + Passwort + + + label.current_password + Aktuelles Passwort + + + label.new_password + Neues Passwort + + + label.new_password_confirm + Passwort bestätigen + + + label.role + Rolle + + + label.content + Inhalt + + + label.summary + Zusammenfassung + + + label.published_at + Veröffentlicht am + + + label.tags + Tags + + + label.actions + Aktionen + + + title.post_new + Beitrag erstellen + + + action.edit_contents + Inhalt bearbeiten + + + + menu.toggle_nav + Navigation ein-/ausblenden + + + menu.choose_language + Sprache auswählen + + + menu.post_list + Beitragsliste + + + menu.back_to_blog + Zurück zum Blog + + + menu.homepage + Startseite + + + menu.admin + Backend + + + menu.user + Konto + + + menu.logout + Abmelden + + + menu.rss + Blog Posts RSS + + + menu.search + Suchen + + + + post.to_publish_a_comment + um einen Kommentar zu veröffentlichen + + + post.num_comments + {count, plural, one {# Kommentar} other {# Kommentare}} + + + post.commented_on + kommentierte + + + post.no_comments + Hinterlasse als Erste/r einen Kommentar zu diesem Beitrag. + + + post.no_posts_found + Keine Beiträge gefunden. + + + post.created_successfully + Der Beitrag wurde erfolgreich erstellt! + + + post.updated_successfully + Der Beitrag wurde erfolgreich bearbeitet! + + + post.deleted_successfully + Der Beitrag wurde erfolgreich gelöscht! + + + post.search_for + Suchen nach... + + + post.search_no_results + Keine Ergebnisse gefunden + + + + user.updated_successfully + Der Benutzer wurde erfolgreich aktualisiert! + + + + notification.comment_created + Dein Beitrag hat einen Kommentar erhalten! + + + notification.comment_created.description + diesem Link folgst.]]> + + + + help.app_description + Demo-Applikation, die mit dem Symfony-Framework erstellt wurde, um den empfohlenen Weg zur Entwicklung von Symfony-Applikationen zu veranschaulichen.]]> + + + help.show_code + Controllers und des Templates anzuzeigen, der zum Rendern dieser Seite verwendet wird.]]> + + + help.browse_app + öffentlichen Bereich der Demo-Applikation.]]> + + + help.browse_admin + Backend der Demo-Applikation.]]> + + + help.login_users + Versuche einen der folgenden Benutzer + + + help.role_user + Normaler Benutzer + + + help.role_admin + Administrator + + + help.reload_fixtures + Wenn keiner der Benutzer funktioniert, spiele die Fixtures mit folgendem Befehl auf der Kommandozeile erneut ein: + + + help.add_user + Wenn du einen neuen Benutzer erstellen willst, benutze diesen Befehl: + + + help.more_information + Symfony-Dokumentation.]]> + + + help.post_summary + Zusammenfassungen können weder Markdown noch HTML beinhalten; nur Plaintext. + + + help.post_publication + Setze das Datum in die Zukunft, um die Veröffentlichung zu planen. + + + help.post_content + Benutze Markdown, um den Inhalt des Beitrags zu formatieren. HTML ist ebenfalls erlaubt. + + + help.comment_content + Kommentare, die nicht unserem Verhaltenskodex entsprechen, werden moderiert. + + + + info.change_password + Nach dem Ändern deines Passworts wirst du von der Applikation abgemeldet. + + + + rss.title + Symfony Demo Blog + + + rss.description + Die neuesten Beiträge, die auf dem Symfony Demo Blog veröffentlicht wurden. + + + + paginator.previous + Vorherige + + + paginator.next + Nächste + + + paginator.current + (aktuell) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.en.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.en.xlf new file mode 100644 index 00000000..8e7fb9e0 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.en.xlf @@ -0,0 +1,447 @@ + + + + + + note + NOTE + + + tip + TIP + + + not_available + Not available + + + mit_license + MIT License + + + + http_error.name + Error {status_code, number} + + + http_error.description + There was an unknown error (HTTP {status_code, number}) that prevented to complete your request. + + + http_error.suggestion + go back to the homepage.]]> + + + http_error_403.description + You don't have permission to access to this resource. + + + http_error_403.suggestion + Ask your manager or system administrator to grant you access to this resource. + + + http_error_404.description + We couldn't find the page you requested. + + + http_error_404.suggestion + go back to the homepage.]]> + + + http_error_500.description + There was an internal server error. + + + http_error_500.suggestion + go back to the homepage.]]> + + + + title.homepage + Symfony Demo application]]> + + + title.source_code + Source code used to render this page + + + title.controller_code + Controller code + + + title.twig_template_code + Twig template code + + + title.login + Secure Sign in + + + title.post_list + Post List + + + title.edit_post + Edit post #{id, number} + + + title.add_comment + Add a comment + + + title.comment_error + There was an error publishing your comment + + + title.edit_user + Edit user + + + title.change_password + Change password + + + + action.show + Show + + + action.show_post + Show post + + + action.show_code + Show code + + + action.edit + Edit + + + action.edit_post + Edit post + + + action.save + Save changes + + + action.delete_post + Delete post + + + delete_post_modal.title + Are you sure you want to delete this post? + + + delete_post_modal.body + This action cannot be undone. + + + label.delete_post + Delete post + + + label.cancel + Cancel + + + action.create_post + Create a new post + + + label.create_post + Create post + + + label.save_and_create_new + Save and create new + + + action.back_to_list + Back to the post list + + + action.publish_comment + Publish comment + + + action.sign_in + Sign in + + + action.browse_app + Browse application + + + action.browse_admin + Browse backend + + + action.edit_user + Edit user + + + action.change_password + Change password + + + action.close + Close + + + + label.title + Title + + + label.author + Author + + + label.author_email + Author email + + + label.username + Username + + + label.fullname + Fullname + + + label.email + Email + + + label.password + Password + + + label.current_password + Current password + + + label.new_password + New password + + + label.new_password_confirm + Confirm password + + + label.role + Role + + + label.content + Content + + + label.summary + Summary + + + label.published_at + Published at + + + label.tags + Tags + + + label.actions + Actions + + + title.post_new + Post creation + + + action.edit_contents + Edit contents + + + + menu.toggle_nav + Toggle navigation + + + menu.choose_language + Choose language + + + menu.post_list + Post list + + + menu.back_to_blog + Back to blog + + + menu.homepage + Homepage + + + menu.admin + Backend + + + menu.user + Account + + + menu.logout + Logout + + + menu.rss + Blog Posts RSS + + + menu.search + Search + + + + post.to_publish_a_comment + to publish a comment + + + post.num_comments + {count, plural, one {# comment} other {# comments}} + + + post.commented_on + commented on + + + post.no_comments + Be the first to comment on this post. + + + post.no_posts_found + No posts found. + + + post.created_successfully + Post created successfully! + + + post.updated_successfully + Post updated successfully! + + + post.deleted_successfully + Post deleted successfully! + + + post.search_for + Search for... + + + post.search_no_results + No results found + + + + user.updated_successfully + User updated successfully! + + + + notification.comment_created + Your post received a comment! + + + notification.comment_created.description + this link]]> + + + + help.app_description + demo application built in the Symfony Framework to illustrate the recommended way of developing Symfony applications.]]> + + + help.show_code + Controller and template used to render this page.]]> + + + help.browse_app + public section of the demo application.]]> + + + help.browse_admin + admin backend of the demo application.]]> + + + help.login_users + Try either of the following users + + + help.role_user + regular user + + + help.role_admin + administrator + + + help.reload_fixtures + If these users don't work, reload application fixtures by running this command from the terminal: + + + help.add_user + If you want to create new users, run this other command: + + + help.more_information + Symfony doc.]]> + + + help.post_summary + Summaries can't contain Markdown or HTML contents; only plain text. + + + help.post_publication + Set the date in the future to schedule the blog post publication. + + + help.post_content + Use Markdown to format the blog post contents. HTML is allowed too. + + + help.comment_content + Comments not complying with our Code of Conduct will be moderated. + + + + info.change_password + After changing your password, you will be logged out of the application. + + + + rss.title + Symfony Demo blog + + + rss.description + Most recent posts published on the Symfony Demo blog + + + + paginator.previous + Previous + + + paginator.next + Next + + + paginator.current + (current) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.es.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.es.xlf new file mode 100644 index 00000000..1c69bd8d --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.es.xlf @@ -0,0 +1,375 @@ + + + + + + note + NOTA + + + tip + TRUCO + + + not_available + No disponible + + + mit_license + Licencia MIT + + + + http_error.name + Error {status_code, number} + + + http_error.description + Se ha producido un error desconocido (HTTP {status_code, number}) que ha impedido completar tu petición. + + + http_error.suggestion + vuelve a la portada del sitio.]]> + + + http_error_403.description + No tienes permiso para acceder a este recurso. + + + http_error_403.suggestion + Solicita a los administradores de este sitio que te concedan permiso para acceder al recurso solicitado. + + + http_error_404.description + No hemos podido encontrar la página solicitada. + + + http_error_404.suggestion + vuelve a la portada del sitio.]]> + + + http_error_500.description + Se ha producido un error grave en el servidor. + + + http_error_500.suggestion + vuelve a la portada del sitio.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Código fuente utilizado para mostrar esta página + + + title.controller_code + Código del controlador + + + title.twig_template_code + Código de la plantilla Twig + + + title.login + Acceso seguro + + + title.post_list + Listado de artículos + + + title.edit_post + Editar artículo #{id, number} + + + title.add_comment + Añadir un comentario + + + title.comment_error + Se ha producido un error al publicar tu comentario + + + + action.show + Ver + + + action.show_code + Ver código + + + action.edit + Editar + + + action.edit_post + Editar artículo + + + action.save + Guardar cambios + + + action.delete_post + Borrar artículo + + + delete_post_modal.title + ¿Está seguro que quiere eliminar este artículo? + + + delete_post_modal.body + Esta acción no se puede deshacer. + + + label.delete_post + Borrar artículo + + + label.cancel + Cancelar + + + action.create_post + Crear un nuevo artículo + + + label.create_post + Crear artículo + + + label.save_and_create_new + Guardar artículo y crear otro + + + action.back_to_list + Volver al listado de artículos + + + action.publish_comment + Publicar comentario + + + action.sign_in + Iniciar sesión + + + action.browse_app + Acceder a la aplicación + + + action.browse_admin + Acceder al backend + + + + label.title + Título + + + action.close + Cerrar + + + label.author + Autor + + + label.author_email + Email del autor + + + label.username + Nombre de usuario + + + label.password + Contraseña + + + label.role + Rol + + + label.content + Contenido + + + label.summary + Resumen + + + label.published_at + Publicado el + + + label.tags + Etiquetas + + + label.actions + Acciones + + + title.post_new + Nuevo artículo + + + action.edit_contents + Editar contenidos + + + + menu.toggle_nav + Turnar navegación + + + menu.choose_language + Seleccionar idioma + + + menu.post_list + Listado de artículos + + + menu.back_to_blog + Volver al blog + + + menu.homepage + Inicio + + + menu.admin + Backend + + + menu.logout + Desconectarse + + + + post.to_publish_a_comment + para publicar un comentario + + + post.num_comments + {count, plural, one {# comentario} other {# comentarios}} + + + post.commented_on + comentado el + + + post.no_comments + Se el primero en añadir un comentario en este artículo. + + + post.no_posts_found + No se ha encontrado ningún artículo. + + + + help.app_description + aplicación demo ha sido programada con el framework Symfony para mostrar la forma recomendada de programar aplicaciones Symfony.]]> + + + help.show_code + controlador y de la plantilla utilizados para crear esta página.]]> + + + help.browse_app + parte pública de la aplicación de demostración.]]> + + + help.browse_admin + parte de administración de la aplicación.]]> + + + help.login_users + Prueba a acceder con estos usuarios + + + help.role_user + usuario normal + + + help.role_admin + administrador + + + help.reload_fixtures + Si ninguno de estos usuarios funciona, carga de nuevo los datos de la aplicación ejecutando el siguiente comando en tu consola: + + + help.add_user + Si quieres crear nuevos usuarios, ejecuta este otro comando: + + + help.more_information + documentación de Symfony.]]> + + + action.show_post + Mostrar artículo + + + menu.rss + RSS del blog + + + menu.search + Buscar + + + post.created_successfully + ¡Artículo creado con éxito! + + + post.updated_successfully + ¡Artículo actualizado con éxito! + + + post.deleted_successfully + ¡Artículo eliminado con éxito! + + + post.search_for + Buscar... + + + post.search_no_results + No se encontraron resultados + + + notification.comment_created + ¡Su artículo recibió un comentario! + + + notification.comment_created.description + este enlace]]> + + + rss.title + Blog de Symfony Demo + + + rss.description + Publicaciones más recientes publicadas en el blog de Symfony Demo + + + + paginator.previous + Anterior + + + paginator.next + Siguiente + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.fr.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.fr.xlf new file mode 100644 index 00000000..fcf96e29 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.fr.xlf @@ -0,0 +1,443 @@ + + + + + + note + NOTE + + + tip + ASTUCE + + + not_available + Indisponible + + + mit_license + Licence MIT + + + + http_error.name + Erreur {status_code, number} + + + http_error.description + Il y a eu une erreur inconnue (HTTP {status_code, number}) qui a empêché l'aboutissement de votre requête. + + + http_error.suggestion + retournez sur la page principale.]]> + + + http_error_403.description + Vous n'avez pas les droits pour accéder à cette ressource. + + + http_error_403.suggestion + Demandez à votre manager ou à votre administrateur système de vous donner les droits pour accéder à cette ressource. + + + http_error_404.description + Nous n'avons pas pu trouver la page demandée. + + + http_error_404.suggestion + retournez sur la page principale.]]> + + + http_error_500.description + Il y a eu une erreur interne du serveur. + + + http_error_500.suggestion + retournez sur la page principale.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Le code source utilisé pour afficher cette page + + + title.controller_code + Code du contrôleur + + + title.twig_template_code + Code du template Twig + + + title.login + Connexion sécurisée + + + title.post_list + Liste des articles + + + title.edit_post + Modifier l'article #{id, number} + + + title.add_comment + Laisser un commentaire + + + title.comment_error + Il y a eu une erreur lors de la publication de votre commentaire. + + + title.edit_user + Modifier l'utilisateur + + + title.change_password + Modifier le mot de passe + + + + action.show + Voir + + + action.show_post + Voir l'article + + + action.show_code + Voir le code + + + action.edit + Editer + + + action.edit_post + Modifier l'article + + + action.save + Enregistrer + + + action.delete_post + Supprimer l'article + + + delete_post_modal.title + Êtes-vous sûr de vouloir supprimer ce post ? + + + delete_post_modal.body + Cette action ne peut pas être annulée. + + + label.delete_post + Supprimer l'article + + + label.cancel + Annuler + + + label.create_post + Créer un article + + + action.create_post + Créer un nouvel article + + + label.save_and_create_new + Enregistrer et créer un nouveau + + + action.back_to_list + Retour à la liste des articles + + + action.publish_comment + Publier + + + action.sign_in + Connectez-vous + + + action.browse_app + Naviguer sur l'application + + + action.browse_admin + Naviguer sur l'admin + + + action.edit_user + Modifier l'utilisateur + + + action.change_password + Modifier le mot de passe + + + + label.title + Titre + + + action.close + Fermer + + + label.author + Auteur + + + label.author_email + Mail de l'auteur + + + label.username + Identifiant + + + label.fullname + Nom complet + + + label.email + Mail + + + label.password + Mot de passe + + + label.current_password + Mot de passe actuel + + + label.new_password + Nouveau mot de passe + + + label.new_password_confirm + Confirmer le mot de passe + + + label.role + Rôle + + + label.content + Contenu + + + label.summary + Résumé + + + label.published_at + Publié le + + + label.tags + Tags + + + label.actions + Actions + + + title.post_new + Ajouter un nouvel article + + + action.edit_contents + Modifier le contenu + + + + menu.toggle_nav + Activer ou désactiver la navigation + + + menu.choose_language + Choisir la langue + + + menu.post_list + Liste des articles + + + menu.back_to_blog + Retour au blog + + + menu.homepage + Accueil + + + menu.admin + Admin + + + menu.user + Compte + + + menu.logout + Déconnexion + + + menu.rss + Blog Posts RSS + + + menu.search + Recherche + + + + post.to_publish_a_comment + pour publier un commentaire + + + post.num_comments + {count, plural, one {# commentaire} other {# commentaires}} + + + post.commented_on + commenté le + + + post.no_comments + Soyez le premier à commenter cet article. + + + post.no_posts_found + Aucun article trouvé. + + + post.created_successfully + Article créé avec succès ! + + + post.updated_successfully + Article mis à jour avec succès ! + + + post.deleted_successfully + Article supprimé avec succès ! + + + post.search_for + Rechercher... + + + post.search_no_results + Aucun résultat + + + + user.updated_successfully + Informations mises à jour avec succès ! + + + + notification.comment_created + Votre article a reçu un commentaire ! + + + notification.comment_created.description + ce lien]]> + + + + help.app_description + application de démonstration construite avec le framework Symfony pour illustrer la façon recommandée de développer des applications Symfony.]]> + + + help.show_code + contrôleur et du template utilisé pour afficher cette page.]]> + + + help.browse_app + section publique de l'application de démonstration.]]> + + + help.browse_admin + interface d'administration de l'application de démonstration.]]> + + + help.login_users + Essayez l'un des utilisateurs suivants + + + help.role_user + utilisateur normal + + + help.role_admin + administrateur + + + help.reload_fixtures + Si ces utilisateurs ne fonctionnent pas, rechargez les fixtures de l'application en exécutant cette commande depuis le terminal : + + + help.add_user + Si vous voulez créer de nouveaux utilisateurs, exécutez cette autre commande : + + + help.more_information + documentation de Symfony.]]> + + + help.post_summary + Les résumés ne peuvent pas contenir de contenu Markdown ou HTML ; seulement du texte brut. + + + help.post_publication + Sélectionnez une date future pour programmer la publication de l'article. + + + help.post_content + Utilisez du Markdown pour formater le contenu de l'article. Le HTML est également autorisé. + + + help.comment_content + Les commentaires non conformes à notre code de conduite seront modérés. + + + + info.change_password + Après avoir modifié votre mot de passe, vous serez déconnecté de l'application. + + + + rss.title + Blog de démo Symfony + + + rss.description + Derniers articles publiés sur le blog de démo Symfony + + + + paginator.previous + Précédent + + + paginator.next + Suivant + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.hr.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.hr.xlf new file mode 100644 index 00000000..66ae1b6b --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.hr.xlf @@ -0,0 +1,348 @@ + + + + + + note + BILJEŠKA + + + tip + SAVJET + + + not_available + Nedostupno + + + mit_license + Licenca MIT + + + + http_error.name + Greška {status_code, number} + + + http_error.description + Desila se nepoznata greška (HTTP {status_code, number}), koja je spriječila završetak zahtjeva. + + + http_error.suggestion + se vratite na početnu stranicu.]]> + + + http_error_403.description + Nemate pravo pristupa ovom izvoru. + + + http_error_403.suggestion + Zatražite dozvolu od vašeg menadžera ili administratora sustava kako bi pristupili ovom izvoru. + + + http_error_404.description + Nismo pronašli zatraženu stranicu. + + + http_error_404.suggestion + se vratite na početnu stranicu.]]> + + + http_error_500.description + Došlo je do unutarnje greške kod poslužitelja. + + + http_error_500.suggestion + se vratite na početnu stranicu.]]> + + + title.homepage + Symfony Demo web aplikaciju]]> + + + title.source_code + Izvorni kod korišten tokom izvršavanja ove stranice + + + title.controller_code + Izvorni kod kontrolora + + + title.twig_template_code + Izvorni kod Twig predloška + + + title.login + Prijava korisnika + + + title.post_list + Popis članaka + + + title.edit_post + Uredi članak #{id, number} + + + title.add_comment + Dodaj komentar + + + title.comment_error + Došlo je do greške kod objave vašeg komentara + + + action.show + Prikaži + + + action.show_code + Prikaži izvorni kod + + + action.edit + Uredi + + + action.edit_post + Uredi članak + + + action.save + Spremi promjene + + + action.delete_post + Izbriši članak + + + delete_post_modal.title + Jeste li sigurni da želite pobrisati odabrani članak? + + + delete_post_modal.body + Ova radnja nemože biti poništena. + + + label.delete_post + Izbriši članak + + + label.cancel + Otkaži + + + action.create_post + Stvori novi članak + + + label.create_post + Stvori članak + + + label.save_and_create_new + Ažuriraj i napravi novi + + + action.back_to_list + Nazad na izlist + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijavi se + + + action.browse_app + Posjeti aplikaciju + + + action.browse_admin + Posjeti pozadinu + + + label.title + Naslov + + + action.close + Zatvoriti + + + label.author + Autor + + + label.author_email + E-mail adresa autora + + + label.username + Korisničko ime + + + label.password + Lozinka + + + label.role + Uloga + + + label.content + Sadržaj + + + label.summary + Sažetak + + + label.published_at + Objavljeno + + + label.tags + Oznake + + + label.actions + Radnje + + + title.post_new + Novi članak + + + action.edit_contents + Uredi sadržaj + + + menu.toggle_nav + Sakrij/Pokaži navigaciju + + + menu.choose_language + Odaberi jezik + + + menu.post_list + Izlist članaka + + + menu.back_to_blog + Nazad na blog + + + menu.homepage + Početna stranica + + + menu.admin + Pozadina + + + menu.logout + Odjavi se + + + menu.rss + RSS Blog Članaka + + + + post.to_publish_a_comment + u svrhu objave komentara + + + post.num_comments + {count, plural, one {# komentar} few {# komentara} other {# komentara}} + + + post.commented_on + komentirao dana + + + post.no_comments + Budi prvi koji će kometirati ovaj članak. + + + post.no_posts_found + Niti jedan članak pronađen. + + + post.created_successfully + Članak uspješno napravljen! + + + post.updated_successfully + Članak uspješno ažuriran! + + + post.deleted_successfully + Članak uspješno pobrisan! + + + + notification.comment_created + Vaš članak je komentiran! + + + notification.comment_created.description + ovu poveznicu]]> + + + + help.app_description + demo web aplikacija napravljena unutar Symfony okvirne tehnologije, služi kako bi pokazala preporučeni način korištenja Symfony okvirne tehnologije.]]> + + + help.show_code + Kontrolora i Predloška korištenog prilikom stvaranja ove stranice.]]> + + + help.browse_app + javni odjeljak demo aplikacije.]]> + + + help.browse_admin + administrativni odjeljak demo aplikacije.]]> + + + help.login_users + Pokušaj sa jednim od sljedećih korisnika + + + help.role_user + uobičajen korisnik + + + help.role_admin + administrator + + + help.reload_fixtures + Ukoliko ovi korisnici ne funkcioniraju, ponovno učitajte fixture/instalaciju podataka aplikacije tako što ćete pokrenuti sljedeću naredbu unutar konzole: + + + help.add_user + Ukoliko želite stvoriti nove korisnike, pokrenite sljedeću naredbu: + + + help.more_information + Symfony dokumentaciju.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Najnoviji članci objavljeni na Symfony Demo Blog aplikaciji + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.id.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.id.xlf new file mode 100644 index 00000000..d5531f98 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.id.xlf @@ -0,0 +1,254 @@ + + + + + + note + CATATAN + + + tip + TIPS + + + not_available + Tidak tersedia + + + mit_license + MIT License + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Kode yang digunakan untuk membuat halaman ini + + + title.controller_code + Kode di Controller + + + title.twig_template_code + Kode Twig template + + + title.login + Secure Sign in + + + title.post_list + Daftar Posting + + + title.edit_post + Sunting posting #{id, number} + + + title.add_comment + Tambahkan komentar + + + title.comment_error + Ada kesalahan penerbitan komentar Anda + + + + action.show + Tampilkan + + + action.show_code + Tampilkan Kode + + + action.edit + Sunting + + + action.edit_post + Sunting Posting + + + action.save + Simpan perubahan + + + action.delete_post + Hapus posting + + + action.create_post + Buat posting baru + + + label.create_post + Buat posting + + + action.back_to_list + Kembali Ke daftar posting + + + action.publish_comment + Terbitkan komentar + + + action.sign_in + Masuk + + + action.browse_app + Jelajah aplikasi + + + action.browse_admin + Jelajah backend + + + + label.title + Judul + + + action.close + Menutup + + + label.author + Penulis + + + label.author_email + Email penulis + + + label.username + Nama Pengguna + + + label.password + Kata Sandi + + + label.role + Peranan + + + label.content + Konten + + + label.summary + Ringkasan + + + label.published_at + Diterbitkan pada + + + label.actions + Tindakan + + + title.post_new + Pembuatan Posting + + + action.edit_contents + Sunting konten + + + + menu.post_list + Daftar posting + + + menu.back_to_blog + Kembali ke blog + + + menu.homepage + Beranda + + + menu.admin + Backend + + + menu.logout + Keluar + + + + post.to_publish_a_comment + untuk menerbitkan komentar + + + post.num_comments + {count} komentar + + + post.commented_on + Komentar pada + + + post.no_comments + Jadilah yang pertama yang mengomentari posting ini. + + + + help.app_description + aplikasi demo dibangun di dalam Symfony Framework sebagai ilustrasi cara-cara yang direkomendasikan untuk membangun aplikasi Symfony.]]> + + + help.show_code + Controller dan template yang digunakan untuk membuat halaman ini.]]> + + + help.browse_app + bagian publik dari aplikasi demo ini.]]> + + + help.browse_admin + admin backend dari aplikasi demo ini.]]> + + + help.login_users + Coba salah satu dari pengguna berikut + + + help.role_user + Pengguna umum + + + help.role_admin + administrator + + + help.reload_fixtures + Jika pengguna-pengguna tersebut tidak dapat digunakan, muat ulang fixtur aplikasi dengan menjalankan perintah berikut dari terminal: + + + help.add_user + Jika anda ingin membuat user baru, jalankan perintah berikut: + + + help.more_information + Symfony doc.]]> + + + + paginator.previous + Sebelumnya + + + paginator.next + Berikutnya + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.it.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.it.xlf new file mode 100644 index 00000000..b37e3624 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.it.xlf @@ -0,0 +1,377 @@ + + + + + + note + NOTE + + + tip + SUGGERIMENTO + + + not_available + Non disponibile + + + mit_license + Licenza MIT + + + + http_error.name + Errore {status_code, number} + + + http_error.description + Un errore sconosciuto (HTTP {status_code, number}) ha impedito di completare la richiesta. + + + http_error.suggestion + tornare alla homepage.]]> + + + http_error_403.description + Non si dispone dei permessi per accedere a questa risorsa. + + + http_error_403.suggestion + Chiedere a un amministratore di fornire un accesso a questa risorsa. + + + http_error_404.description + La pagina richiesta non è stata trovata. + + + http_error_404.suggestion + tornare alla homepage.]]> + + + http_error_500.description + Si è verificato un errore interno del server. + + + http_error_500.suggestion + tornare alla homepage.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codice sorgente usato per effettuare il render di questa pagina + + + title.controller_code + Codice del controllore + + + title.twig_template_code + Codice del template Twig + + + title.login + Accesso sicuro + + + title.post_list + Lista dei post + + + title.edit_post + Modifica post #{id, number} + + + title.add_comment + Aggiungi un commento + + + title.comment_error + C'è stato un errore nella pubblicazione del tuo commento + + + + action.show + Mostra + + + action.show_post + Mostra post + + + action.show_code + Mostra codice + + + action.edit + Modifica + + + action.edit_post + Modifica post + + + action.save + Salva cambiamenti + + + action.delete_post + Elimina post + + + delete_post_modal.title + Sicuro di voler eliminare questo post? + + + delete_post_modal.body + Non si può annullare questa azione. + + + label.delete_post + Elimina post + + + label.cancel + Annulla + + + action.create_post + Crea un nuovo post + + + label.create_post + Crea post + + + label.save_and_create_new + Salva e crea nuovo + + + action.back_to_list + Ritorna alla lista dei post + + + action.publish_comment + Pubblica commento + + + action.sign_in + Accedi + + + action.browse_app + Naviga nell'applicazione + + + action.browse_admin + Naviga nel pannello di controllo + + + + label.title + Titolo + + + action.close + Chiudere + + + label.author + Autore + + + label.author_email + Email dell'autore + + + label.username + Nome utente + + + label.password + Password + + + label.role + Ruolo + + + label.content + Contenuto + + + label.summary + Descrizione + + + label.published_at + Data pubblicazione + + + label.tags + Tag + + + label.actions + Azioni + + + title.post_new + Creazione post + + + action.edit_contents + Modifica contenuti + + + + menu.toggle_nav + Navigazione + + + menu.choose_language + Lingua + + + menu.post_list + Lista post + + + menu.back_to_blog + Ritorna al blog + + + menu.homepage + Homepage + + + menu.admin + Pannello di controllo + + + menu.logout + Esci + + + menu.rss + RSS del blog + + + menu.search + Ricercare + + + + post.to_publish_a_comment + per pubblicare un commento + + + post.num_comments + {count, plural, one {# commento} other {# commenti}} + + + post.commented_on + ha commentato il + + + post.no_comments + Commenta per primo. + + + post.no_posts_found + Nessun post trovato. + + + post.created_successfully + Post creato! + + + post.updated_successfully + Post aggiornato! + + + post.deleted_successfully + Post eliminato! + + + post.search_for + Ricercare... + + + post.search_no_results + Nessun risultato trovato + + + + notification.comment_created + Il post ha ricevuto un commento! + + + notification.comment_created.description + collegamento]]> + + + + help.app_description + applicazione demo creata con il Framework Symfony per illustrare il modo raccomandato per sviluppare applicazioni con Symfony.]]> + + + help.show_code + controllori e template usati per effettuare il render di questa pagina.]]> + + + help.browse_app + sezione pubblica dell'applicazione demo.]]> + + + help.browse_admin + pannello di controllo dell'applicazione demo.]]> + + + help.login_users + Prova uno dei seguenti utenti + + + help.role_user + utente normale + + + help.role_admin + amministratore + + + help.reload_fixtures + Se questi utenti non dovessero funzionare, ricarica i dati dell'applicazione eseguendo questo comando dal terminale: + + + help.add_user + Se vuoi aggiungere nuovi utenti, esegui quest'altro comando: + + + help.more_information + documentazione di Symfony.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Post più recenti pubblicati su Symfony Demo blog + + + + paginator.previous + Precedente + + + paginator.next + Successivo + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.ja.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.ja.xlf new file mode 100644 index 00000000..f611ee66 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.ja.xlf @@ -0,0 +1,295 @@ + + + + + + note + ノート + + + tip + ヒント + + + not_available + 利用できません + + + mit_license + MIT ライセンス + + + + title.homepage + Symfony Demo アプリケーションへ]]> + + + title.source_code + このページを表示するのに使われたソースコード + + + title.controller_code + Controller コード + + + title.twig_template_code + Twig テンプレートコード + + + title.login + 安全なログイン + + + title.post_list + 記事一覧 + + + title.edit_post + #{id, number} この記事を編集 + + + title.add_comment + コメントを追加 + + + title.comment_error + コメント投稿時にエラーが起きました + + + + action.show + 確認 + + + action.show_code + コードを見る + + + action.edit + 編集 + + + action.edit_post + 記事を編集 + + + action.save + 変更を保存 + + + action.delete_post + 記事を削除 + + + action.create_post + 新たに記事を作成 + + + label.create_post + 記事を作成 + + + action.back_to_list + 記事一覧に戻る + + + action.publish_comment + コメントを投稿 + + + action.sign_in + ログイン + + + action.browse_app + アプリケーションへ + + + action.browse_admin + バックエンドへ + + + + label.title + タイトル + + + action.close + 閉じる + + + label.author + 投稿者 + + + label.author_email + 投稿者メールアドレス + + + label.username + ユーザー名 + + + label.password + パスワード + + + label.role + ロール + + + label.content + 本文 + + + label.summary + 要約 + + + label.published_at + 投稿日時 + + + label.actions + アクション + + + title.post_new + 記事を作成 + + + action.edit_contents + 内容を編集 + + + + menu.post_list + 記事一覧 + + + menu.back_to_blog + ブログへ戻る + + + menu.homepage + ホームページ + + + menu.admin + バックエンド + + + menu.logout + ログアウト + + + menu.rss + ブログ投稿RSS + + + menu.search + サーチ + + + + post.to_publish_a_comment + コメントを投稿する + + + post.num_comments + {count} コメント + + + post.commented_on + コメント投稿日時 + + + post.no_comments + この記事へのコメントはまだ投稿されていません。 + + + post.no_posts_found + 投稿は見つかりませんでした。 + + + post.created_successfully + 投稿は正常に作成されました! + + + post.updated_successfully + 投稿は正常に更新されました! + + + post.deleted_successfully + 投稿は正常に削除されました! + + + post.search_for + 検索する... + + + post.search_no_results + 結果が見つかりません + + + + notification.comment_created + あなたの投稿はコメントを受け取った! + + + notification.comment_created.description + このリンクに沿ってコメントを読むことができます]]> + + + + help.app_description + デモアプリケーションで、Symfonyアプリケーションを開発する際に推奨される方法を説明するためのものです。]]> + + + help.show_code + Controller と template のソースコードが表示されます。]]> + + + help.browse_app + 公開セクション を確認する。]]> + + + help.browse_admin + 管理セクション を確認する。]]> + + + help.login_users + 以下のユーザーのどれかを試す + + + help.role_user + 通常ユーザー + + + help.role_admin + 管理者 + + + help.reload_fixtures + もしこれらのユーザーが利用できない場合、このコマンドをターミナルで実行してアプリケーション設定を再読み込みしてください: + + + help.add_user + もし新しいユーザーを作成したければ、このコマンドを実行してください: + + + help.more_information + Symfony docを参照してください。]]> + + + + paginator.previous + 前へ + + + paginator.next + 次へ + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.lt.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.lt.xlf new file mode 100644 index 00000000..f169c265 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.lt.xlf @@ -0,0 +1,443 @@ + + + + + + note + PASTABA + + + tip + PATARIMAS + + + not_available + Nepasiekiama + + + mit_license + MIT Licencija + + + + http_error.name + Klaida {status_code, number} + + + http_error.description + Įvyko nežinoma klaida (HTTP {status_code, number}), kuri neleido užbaigti užklausos. + + + http_error.suggestion + grįžti į pagrindinį puslapį.]]> + + + http_error_403.description + Neturite teisės peržiūrėti šito turinio. + + + http_error_403.suggestion + Parašykite sistemos administratoriaus, kad suteiktu prieigą prie šio turinio. + + + http_error_404.description + Puslapis nerastas. + + + http_error_404.suggestion + grįžti į pagrindinį puslapį.]]> + + + http_error_500.description + Įvyko vidinė serverio klaida. + + + http_error_500.suggestion + grįžti į pagrindinį puslapį.]]> + + + + title.homepage + Symfony Demo puslapį]]> + + + title.source_code + Pirminis kodas + + + title.controller_code + Controller kodas + + + title.twig_template_code + Twig šablono kodas + + + title.login + Prisijungimas + + + title.post_list + Įrašų sąrašas + + + title.edit_post + Redaguoti įrašą #{id, number} + + + title.add_comment + Pridėti komentarą + + + title.comment_error + Įvyko klaida skelbiant komentarą + + + title.edit_user + Redaguoti vartotoją + + + title.change_password + Pakeisti slaptažodį + + + + action.show + Rodyti + + + action.show_post + Rodyti įrašą + + + action.show_code + Rodyti kodą + + + action.edit + Redaguoti + + + action.edit_post + Redaguoti įrašą + + + action.save + Išsaugoti + + + action.delete_post + Ištrinti įrašą + + + delete_post_modal.title + Ar tirkai norite ištrinti įrašą? + + + delete_post_modal.body + Šio veiksmo negalima atšaukti. + + + label.delete_post + Ištrinti įrašą + + + label.cancel + Atšaukti + + + action.create_post + Sukurti naują įrašą + + + label.create_post + Sukurti įrašą + + + label.save_and_create_new + Išsaugoti ir sukurti naują + + + action.back_to_list + Grįžti atgal į įrašų sąrašą + + + action.publish_comment + Paskelbti komentarą + + + action.sign_in + Prisijungti + + + action.browse_app + Naršyti + + + action.browse_admin + Naršyti admin dalį + + + action.edit_user + Redaguoti vartotoją + + + action.change_password + Pakeisti slaptažodį + + + + label.title + Pavadinimas + + + action.close + Uždaryti + + + label.author + Autorius + + + label.author_email + Autoriaus el. paštas + + + label.username + Vartotojas vardas + + + label.fullname + Pilnas vardas + + + label.email + El. paštas + + + label.password + Slaptažodis + + + label.current_password + Dabartinis slaptažodis + + + label.new_password + Naujas slaptažodis + + + label.new_password_confirm + Patvirtinti slaptažodį + + + label.role + Rolė + + + label.content + Turinys + + + label.summary + Santrauka + + + label.published_at + Publikuota + + + label.tags + Žymos + + + label.actions + Veiksmai + + + title.post_new + Įrašo sukūrimas + + + action.edit_contents + Redaguoti turinį + + + + menu.toggle_nav + Perjungti navigaciją + + + menu.choose_language + Pasirinkti kalbą + + + menu.post_list + Įrašų sąrašas + + + menu.back_to_blog + Atgal į blogą + + + menu.homepage + Pagrindinis puslapis + + + menu.admin + Backend + + + menu.user + Paskyra + + + menu.logout + Atsijungti + + + menu.rss + Blogo Įrašai RSS + + + menu.search + Paieška + + + + post.to_publish_a_comment + kad paskelbti komentarą + + + post.num_comments + {count, plural, one {# komentaras} other {# komentarai}} + + + post.commented_on + kada komentuota + + + post.no_comments + Būkite pirmas, pakomentavęs šį įrašą. + + + post.no_posts_found + Nerasta įrašų. + + + post.created_successfully + Įrašas sukurtas sėkmingai! + + + post.updated_successfully + Įrašas atnaujintas sėkmingai! + + + post.deleted_successfully + Įrašas ištrintas sėkmingai! + + + post.search_for + Ieškoti... + + + post.search_no_results + Nieko nerasta + + + + user.updated_successfully + Vartotojas atnaujintas sėkmingai! + + + + notification.comment_created + Jūsų įrašas gavo komentarą! + + + notification.comment_created.description + nuorodą]]> + + + + help.app_description + demo puslapis sukurtas su Symfony Framework parodydant tinkamą Symfony panaudojimą.]]> + + + help.show_code + Controller ir šabloną panaudoti atvaizduojant šį puslapį.]]> + + + help.browse_app + public dalį demo puslapio.]]> + + + help.browse_admin + admin dalį demo puslapio.]]> + + + help.login_users + išbandykite vieną iš šių vartotojų + + + help.role_user + nuolatinis vartotojas + + + help.role_admin + administratorius + + + help.reload_fixtures + Jei vartotojai neveikia, perleiskite šia komandą: + + + help.add_user + Jei norite sukurti naują vartotoją paleiskite šia komandą: + + + help.more_information + Symfony dokumentciją.]]> + + + help.post_summary + Santrauka negali būti su Markdown ar HTML žymom, tiktai paprastas tekstas + + + help.post_publication + Nustatykite datą ateityje, kad planuotumėte blogo įrašo paskelbimą. + + + help.post_content + Turinį galima formatuoti su Markdown ir HTML žymom. + + + help.comment_content + Komentarai, kurie neatitinka Elgesio kodekso, bus moderuojami. + + + + info.change_password + Pakeitus slaptažodį, būsite atjungti nuo puslapio. + + + + rss.title + Symfony Demo blogas + + + rss.description + Naujausi įrašai paskelbti Symfony Demo bloge + + + + paginator.previous + Ankstesnis + + + paginator.next + Sekantis + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.nl.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.nl.xlf new file mode 100644 index 00000000..dbeaa48f --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.nl.xlf @@ -0,0 +1,377 @@ + + + + + + note + NOTITIE + + + tip + TIP + + + not_available + Niet beschikbaar + + + mit_license + MIT Licentie + + + + http_error.name + Fout {status_code, number} + + + http_error.description + Een onbekende fout (HTTP {status_code, number}) is opgetreden, waardoor de aanvraag niet gelukt is. + + + http_error.suggestion + ga terug naar de beginpagina.]]> + + + http_error_403.description + Je hebt geen toestemming om deze bron op te vragen. + + + http_error_403.suggestion + Vraag je manager of systeembeheerder om toegang tot deze bron te krijgen. + + + http_error_404.description + We konden de pagina die je opvroeg niet vinden. + + + http_error_404.suggestion + ga terug naar de beginpagina.]]> + + + http_error_500.description + Er is een interne serverfout opgetreden. + + + http_error_500.suggestion + ga terug naar de beginpagina.]]> + + + title.homepage + Symfony Demo applicatie]]> + + + title.source_code + Broncode van deze pagina + + + title.controller_code + Controller code + + + title.twig_template_code + Twig template code + + + title.login + Veilig inloggen + + + title.post_list + Berichtenlijst + + + title.edit_post + Bewerk bericht #{id, number} + + + title.add_comment + Voeg een reactie toe + + + title.comment_error + Er is een fout opgetreden bij het opslaan van je reactie + + + + action.show + Weergeven + + + action.show_post + Bericht weergeven + + + action.show_code + Code weergeven + + + action.edit + Bewerken + + + action.edit_post + Bericht bewerken + + + action.save + Opslaan + + + action.delete_post + Bericht verwijderen + + + delete_post_modal.title + Weet je zeker dat je dit bericht wilt verwijderen? + + + delete_post_modal.body + Deze actie kan niet ongedaan gemaakt worden. + + + label.delete_post + Bericht verwijderen + + + label.cancel + Annuleren + + + + action.create_post + Maak nieuw bericht + + + label.create_post + Bericht maken + + + label.save_and_create_new + Opslaan en nieuwe maken + + + action.back_to_list + Terug naar de berichtenlijst + + + action.publish_comment + Reactie opslaan + + + action.sign_in + Inloggen + + + action.browse_app + Applicatie bekijken + + + action.browse_admin + Beheerpaneel bekijken + + + + label.title + Titel + + + action.close + Dichtbij + + + label.author + Auteur + + + label.author_email + Auteur e-mail + + + label.username + Gebruikersnaam + + + label.password + Wachtwoord + + + label.role + Rol + + + label.content + Inhoud + + + label.summary + Samenvatting + + + label.published_at + Geplaatst op + + + label.tags + Tags + + + label.actions + Acties + + + title.post_new + Bericht aanmaken + + + action.edit_contents + Inhoud bewerken + + + + menu.toggle_nav + Wissel navigatie + + + menu.choose_language + Taalkeuze + + + menu.post_list + Berichtenlijst + + + menu.back_to_blog + Terug naar de blog + + + menu.homepage + Beginpagina + + + menu.admin + Beheerpaneel + + + menu.logout + Uitloggen + + + menu.rss + Blogberichten RSS + + + menu.search + Zoek + + + + post.to_publish_a_comment + om een reactie toe te voegen + + + post.num_comments + {count, plural, one {# reactie} other {# reacties}} + + + post.commented_on + gereageerd op + + + post.no_comments + Reageer als eerste op dit bericht. + + + post.no_posts_found + Geen berichten gevonden. + + + post.created_successfully + Bericht met succes aangemaakt! + + + post.updated_successfully + Bericht met succes bijgewerkt! + + + post.deleted_successfully + Bericht met succes verwijderd! + + + post.search_for + Zoek naar... + + + post.search_no_results + No results found + + + + notification.comment_created + Er is een reactie bij je bericht geplaatst! + + + notification.comment_created.description + deze link]]> + + + + help.app_description + voorbeeld applicatie, gemaakt met het Symfony Framework, die je een indruk geeft van de aanbevolen manier om een Symfony applicatie te ontwikkelen.]]> + + + help.show_code + Controller en template, die gebruikt zijn bij het weergeven van deze pagina.]]> + + + help.browse_app + publieke gedeelte van de demo applicatie.]]> + + + help.browse_admin + Beheerpaneel van de demo applicatie.]]> + + + help.login_users + Probeer één van de volgende gebruikers + + + help.role_user + normale gebruiker + + + help.role_admin + beheerder + + + help.reload_fixtures + Als het niet lukt om in te loggen met deze gebruikers, herlaad dan de applicatie instellingen door dit commando in de terminal uit te voeren: + + + help.add_user + Als u een nieuwe gebruiker wilt toevoegen, voer dan dit commando uit: + + + help.more_information + Symfony documentatie.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + De meest recente berichten, gepubliceerd op De Symfony Demo blog + + + + paginator.previous + Vorige + + + paginator.next + Volgende + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.pl.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.pl.xlf new file mode 100644 index 00000000..dca6220a --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.pl.xlf @@ -0,0 +1,293 @@ + + + + + + note + UWAGA + + + tip + PORADA + + + not_available + Niedostępne + + + mit_license + Licencja MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Kod źródłowy użyty do wygenerowania tej podstrony + + + title.controller_code + Kod kontrolera + + + title.twig_template_code + Kod szablonu Twig + + + title.login + Bezpieczne logowanie + + + title.post_list + Lista artykułów + + + title.edit_post + Edytuj artykuł #{id, number} + + + title.add_comment + Dodaj komentarz + + + title.comment_error + Podczas publikacji Twojego komentarza wystąpił błąd + + + + action.show + Pokaż + + + action.show_code + Pokaż kod + + + action.edit + Edytuj + + + action.edit_post + Edytuj artykuł + + + action.save + Zapisz + + + action.delete_post + Usuń artykuł + + + delete_post_modal.title + Czy na pewno chcesz usunąć ten artykuł? + + + delete_post_modal.body + Ta akcja nie może zostać cofnięta. + + + label.delete_post + Usuń artykuł + + + label.cancel + Anuluj + + + action.create_post + Dodaj nowy artykuł + + + label.create_post + Dodaj artykuł + + + label.save_and_create_new + Zapisz i dodaj kolejny + + + action.back_to_list + Powrót do listy artykułów + + + action.publish_comment + Publikuj komentarz + + + action.sign_in + Zaloguj się + + + action.browse_app + Przeglądaj aplikację + + + action.browse_admin + Przeglądaj panel administracyjny + + + + label.title + Tytuł + + + action.close + Blisko + + + label.author + Autor + + + label.author_email + Adres e-mail autora + + + label.username + Użytkownik + + + label.password + Hasło + + + label.role + Rola + + + label.content + Treść + + + label.summary + Podsumowanie + + + label.published_at + Opublikowano + + + label.actions + Akcje + + + title.post_new + Tworzenie nowego artykułu + + + action.edit_contents + Edycja treści + + + + menu.toggle_nav + Przełącz nawigację + + + menu.post_list + Lista artykułów + + + menu.back_to_blog + Powrót do bloga + + + menu.homepage + Strona główna + + + menu.admin + Panel administracyjny + + + menu.logout + Wyloguj się + + + + post.to_publish_a_comment + aby dodać komentarz + + + post.num_comments + {count, plural, one {# komentarz} many {# komentarze} other {# komentarzy}} + + + post.commented_on + skomentował + + + post.no_comments + Bądź pierwszym, który skomentuje. + + + post.no_posts_found + Brak artykułów + + + post.created_successfully + Artykuł został utworzony! + + + post.updated_successfully + Artykuł został zaktualizowany! + + + post.deleted_successfully + Artykuł został usunięty! + + + help.app_description + przykładowa aplikacja zbudowana przy pomocy frameworka Symfony, dla zademonstrowania polecanego sposobu tworzenia aplikacji przy jego użyciu.]]> + + + help.show_code + kontrolera oraz szablonu użytych podczas generowania tej podstrony.]]> + + + help.browse_app + publiczną część aplikacji demonstracyjnej.]]> + + + help.browse_admin + panel administracyjny aplikacji demonstracyjnej.]]> + + + help.login_users + Użyj dowolnego z poniższych użytkowników + + + help.role_user + zwykły użytkownik + + + help.role_admin + administrator + + + help.reload_fixtures + Jeśli powyższe dane logowania nie działają, załaduj ponownie przykładowe dane dla tej aplikacji. Uruchom następującą komendę: + + + help.add_user + Jeśli chcesz dodać nowego użytkownika, uruchom następującą komendę: + + + help.more_information + dokumentację Symfony, aby uzyskać więcej informacji.]]> + + + + paginator.previous + Poprzednia + + + paginator.next + Następna + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.pt_BR.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.pt_BR.xlf new file mode 100644 index 00000000..357356c0 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.pt_BR.xlf @@ -0,0 +1,448 @@ + + + + + + note + NOTA + + + tip + DICA + + + not_available + Não disponível + + + mit_license + Licença MIT + + + + http_error.name + Erro {status_code, number} + + + http_error.description + Ocorreu um erro desconhecido (HTTP {status_code, number}) que impediu a sua requisição de ser completada. + + + http_error.suggestion + volte para a página inicial.]]> + + + http_error_403.description + Você não tem permissão para acessar esse recurso. + + + http_error_403.suggestion + Peça ao seu gerente ou administrador de sistemas para lhe dar acesso a esse recurso. + + + http_error_404.description + Não podemos encontrar a página que você requisitou. + + + http_error_404.suggestion + volte para a página inicial.]]> + + + http_error_500.description + Houve um erro interno no servidor. + + + http_error_500.suggestion + volte para a página inicial.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Código fonte utilizado para renderizar esta página + + + title.controller_code + Código do Controller + + + title.twig_template_code + Código do template Twig + + + title.login + Login seguro + + + title.post_list + Lista de Posts + + + title.edit_post + Editar o post #{id, number} + + + title.add_comment + Adicionar um comentário + + + title.comment_error + Houve um erro ao publicar o seu comentário + + + title.edit_user + Editar usuário + + + title.change_password + Alterar senha + + + + action.show + Exibir + + + action.show_post + Exibir o post + + + action.show_code + Mostrar o código + + + action.edit + Editar + + + action.edit_post + Editar o post + + + action.save + Salvar alterações + + + action.delete_post + Excluir o post + + + delete_post_modal.title + Tem certeza que deseja excluir esse post? + + + delete_post_modal.body + Essa ação não pode ser desfeita. + + + label.delete_post + Excluir o post + + + label.cancel + Cancelar + + + action.create_post + Criar um novo post + + + label.create_post + Criar um post + + + label.save_and_create_new + Salvar e criar novo + + + action.back_to_list + Voltar para a lista de posts + + + action.publish_comment + Publicar comentário + + + action.sign_in + Entrar + + + action.browse_app + Navegar na aplicação + + + action.browse_admin + Navegar na área administrativa + + + action.edit_user + Editar usuário + + + action.change_password + Alterar senha + + + + label.title + Título + + + action.close + Perto + + + label.author + Autor + + + label.author_email + Email do autor + + + label.username + Usuário + + + label.fullname + Nome completo + + + label.email + Email + + + label.password + Senha + + + label.current_password + Senha atual + + + label.new_password + Nova senha + + + label.new_password_confirm + Confirmar senha + + + label.role + Perfil + + + label.content + Conteúdo + + + label.summary + Sumário + + + label.published_at + Publicado em + + + label.tags + Tags + + + label.actions + Ações + + + title.post_new + Criação do post + + + action.edit_contents + Editar conteúdo + + + + menu.toggle_nav + Alternar navegação + + + menu.choose_language + Escolha o idioma + + + menu.post_list + Lista de posts + + + menu.back_to_blog + Voltar para o blog + + + menu.homepage + Página inicial + + + menu.admin + Área Administrativa + + + menu.user + Conta + + + menu.logout + Sair + + + menu.rss + RSS do Blog + + + menu.search + Pesquisar + + + + post.to_publish_a_comment + para publicar um comentário + + + post.num_comments + {count, plural, one {# comentário} other {# comentários}} + + + post.commented_on + comentou em + + + post.no_comments + Seja o primeiro a comentar nesse post. + + + post.no_posts_found + Nenhum post encontrado. + + + post.created_successfully + Post criado com sucesso! + + + post.updated_successfully + Post atualizado com sucesso! + + + post.deleted_successfully + Post excluído com sucesso! + + + post.search_for + Pesquisar por... + + + post.search_no_results + Nenhum resultado encontrado + + + + user.updated_successfully + Usuário atualizado com sucesso! + + + + notification.comment_created + Seu post recebeu um comentário! + + + notification.comment_created.description + deste link]]> + + + + help.app_description + aplicação de demonstração construída com o Symfony Framework para ilustrar a maneira recomendada de se desenvolver aplicações Symfony.]]> + + + help.show_code + Controller e do template utilizados para renderizar esta página.]]> + + + help.browse_app + área pública da aplicação de demonstração.]]> + + + help.browse_admin + área administrativa da aplicação de demonstração.]]> + + + help.login_users + Experimente um dos usuários abaixo + + + help.role_user + usuário comum + + + help.role_admin + administrador + + + help.reload_fixtures + Se esses usuários não funcionarem, recarregue as fixtures da aplicação executando esse comando no terminal: + + + help.add_user + Se quiser criar novos usuários, execute esse outro comando: + + + help.more_information + documentação do Symfony.]]> + + + + help.post_summary + Sumários não podem conter Markdown ou HTML; apenas texto simples. + + + help.post_publication + Para agendar a publicação do post, informe uma data no futuro. + + + help.post_content + Utilize Markdown para formatar o conteúdo do post. HTML também é permitido. + + + help.comment_content + Comentários que não estiverem de acordo com o nosso Código de Conduta serão moderados. + + + + info.change_password + Após alterar a sua senha, você será deslogado da aplicação. + + + + rss.title + Symfony Demo blog + + + rss.description + Posts mais recentes publicados no blog Symfony Demo + + + + paginator.previous + Anterior + + + paginator.next + Próxima + + + paginator.current + (atual) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.ro.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.ro.xlf new file mode 100644 index 00000000..2608ea5a --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.ro.xlf @@ -0,0 +1,290 @@ + + + + + + note + NOTĂ + + + tip + SFAT + + + not_available + Indisponibil + + + mit_license + Licenţă MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codul sursă folosit în această pagină + + + title.controller_code + Codul din controler + + + title.twig_template_code + Codul din şablonul Twig + + + title.login + Autentificare securizată + + + title.post_list + Lista de articole + + + title.edit_post + Modifică articolul #{id, number} + + + title.add_comment + Adaugă un comentariu + + + title.comment_error + A intervenit o eroare la publicarea comentariului tău + + + + action.show + Vezi + + + action.show_code + Vezi codul sursă + + + action.edit + Modifică + + + action.edit_post + Modifică articolul + + + action.save + Salvează modificările + + + action.delete_post + Şterge articolul + + + delete_post_modal.title + Sunteți sigur că doriți ștergerea acestui articol? + + + delete_post_modal.body + Această acțiune nu poate fi anulată. + + + label.delete_post + Șterge articolul + + + label.cancel + Anulează + + + action.create_post + Creează un articol nou + + + label.create_post + Creează un articol nou + + + label.save_and_create_new + Salvează și creează unul nou + + + action.back_to_list + Înapoi la lista de articole + + + action.publish_comment + Publică comentariu + + + action.sign_in + Autentifică-te + + + action.browse_app + Mergi la aplicaţie + + + action.browse_admin + Mergi la administrare + + + + label.title + Titlu + + + action.close + Închide + + + label.author + Autor + + + label.author_email + Email autor + + + label.username + Utilizator + + + label.password + Parolă + + + label.role + Rol + + + label.content + Conţinut + + + label.summary + Rezumat + + + label.published_at + Publicat la + + + label.actions + Acţiuni + + + title.post_new + Crearea unui articol nou + + + action.edit_contents + Modifică articolul + + + + menu.post_list + Lista de articole + + + menu.back_to_blog + Înapoi la blog + + + menu.homepage + Prima pagină + + + menu.admin + Administrare + + + menu.logout + Ieşire + + + + post.to_publish_a_comment + pentru a publica un comentariu + + + post.num_comments + {count, plural, one {# comentariu} other {# comentarii}} + + + post.commented_on + comentat la + + + post.no_comments + Fii primul care comentează acest articol. + + + post.no_posts_found + Nu s-au găsit articole. + + + post.created_successfully + Articol creat cu succes! + + + post.updated_successfully + Articol modificat cu succes! + + + post.deleted_successfully + Articol șters cu succes! + + + + help.app_description + aplicaţie demonstrativă construită pe Platforma Symfony pentru a ilustra modul recomandat de a dezvolta aplicaţii Symfony.]]> + + + help.show_code + controlerul şi şablonul folosite în acestă pagină.]]> + + + help.browse_app + secţiunea publică a aplicaţiei demonstrative.]]> + + + help.browse_admin + secţiunea administrativă a aplicaţiei demonstrative.]]> + + + help.login_users + Încearcă oricare dintre următorii utilizatori + + + help.role_user + utilizator simplu + + + help.role_admin + administrator + + + help.reload_fixtures + Dacă aceşti utilizatori nu funcţionează, reîncarcă datele fixe ale aplicaţiei (fixtures) prin executarea acestei comenzi în terminal: + + + help.add_user + Dacă doreşti să creezi utilizatori noi, execută această comandă în terminal: + + + help.more_information + documentaţia Symfony.]]> + + + + paginator.previous + Pagina anterioara + + + paginator.next + Pagina urmatoare + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.ru.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.ru.xlf new file mode 100644 index 00000000..4c2db7a4 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.ru.xlf @@ -0,0 +1,447 @@ + + + + + + note + ПРИМЕЧАНИЕ + + + tip + СОВЕТ + + + not_available + Недоступно + + + mit_license + MIT Лицензия + + + + http_error.name + Ошибка {status_code, number} + + + http_error.description + Произошла неизвестная ошибка (HTTP {status_code, number}), которая помешала выполнить ваш запрос. + + + http_error.suggestion + вернитесь на главную страницу.]]> + + + http_error_403.description + У вас нет разрешения на доступ к этому ресурсу. + + + http_error_403.suggestion + Запросите доступ к этому ресурсу у вашего менеджера или системного администратора. + + + http_error_404.description + Мы не смогли найти запрашиваемую вами страницу. + + + http_error_404.suggestion + вернитесь на главную страницу.]]> + + + http_error_500.description + Произошла внутренняя ошибка сервера. + + + http_error_500.suggestion + вернитесь на главную страницу.]]> + + + + title.homepage + Symfony Demo приложение]]> + + + title.source_code + Исходный код, который использовался для отображения этой страницы + + + title.controller_code + Код контроллера + + + title.twig_template_code + Код шаблона Twig + + + title.login + Авторизация + + + title.post_list + Список записей + + + title.edit_post + Изменение записи #{id, number} + + + title.add_comment + Добавить комментарий + + + title.comment_error + Произошла ошибка во время публикации вашего комментария + + + title.edit_user + Изменить пользователя + + + title.change_password + Изменить пароль + + + + action.show + Показать + + + action.show_post + Показать запись + + + action.show_code + Показать код + + + action.edit + Изменить + + + action.edit_post + Изменить запись + + + action.save + Сохранить изменения + + + action.delete_post + Удалить запись + + + delete_post_modal.title + Вы уверены, что хотите удалить эту запись? + + + delete_post_modal.body + Это действие не может быть отменено. + + + label.delete_post + Удалить запись + + + label.cancel + Отменить + + + action.create_post + Создать новую запись + + + label.create_post + Создать запись + + + label.save_and_create_new + Сохранить и создать новую + + + action.back_to_list + Назад к списку записей + + + action.publish_comment + Опубликовать комментарий + + + action.sign_in + Войти + + + action.browse_app + Перейти в публичный раздел + + + action.browse_admin + Перейти в панель управления + + + action.edit_user + Изменить пользователя + + + action.change_password + Изменить пароль + + + + label.title + Название + + + action.close + Закрыть + + + label.author + Автор + + + label.author_email + Email автора + + + label.username + Логин + + + label.fullname + Полное имя + + + label.email + Email + + + label.password + Пароль + + + label.current_password + Текущий пароль + + + label.new_password + Новый пароль + + + label.new_password_confirm + Подтвердите пароль + + + label.role + Роль + + + label.content + Содержание + + + label.summary + Краткое содержание + + + label.published_at + Опубликовано + + + label.tags + Теги + + + label.actions + Действия + + + title.post_new + Создание записи + + + action.edit_contents + Изменить содержание + + + + menu.toggle_nav + Переключить навигацию + + + menu.choose_language + Выбрать язык + + + menu.post_list + Список записей + + + menu.back_to_blog + Назад к блогу + + + menu.homepage + Главная страница + + + menu.admin + Панель управления + + + menu.user + Аккаунт + + + menu.logout + Выйти + + + menu.rss + RSS Записей Блога + + + menu.search + Поиск + + + + post.to_publish_a_comment + опубликовать комментарий + + + post.num_comments + {count, plural, one {# комментарий} few {# комментария} other {# комментариев}} + + + post.commented_on + прокомментировано + + + post.no_comments + Будьте первыми кто прокомментирует эту запись. + + + post.no_posts_found + Ни одной записи не найдено. + + + post.created_successfully + Запись успешно создана! + + + post.updated_successfully + Запись успешно обновлена! + + + post.deleted_successfully + Запись успешно удалена! + + + post.search_for + Искать запись... + + + post.search_no_results + Ничего не найдено + + + + user.updated_successfully + Информация о пользователе успешно обновлена! + + + + notification.comment_created + Ваша запись получила комментарий! + + + notification.comment_created.description + этой ссылке]]> + + + + help.app_description + демо приложение создано на основе Symfony фреймворка для того, чтобы показать рекомендованный способ разработки Symfony приложений.]]> + + + help.show_code + Контроллера и шаблона, которые использовались для отображения этой страницы.]]> + + + help.browse_app + публичный раздел демо приложения.]]> + + + help.browse_admin + панель управления демо приложения.]]> + + + help.login_users + Используйте любого из следующих пользователей + + + help.role_user + обычный пользователь + + + help.role_admin + администратор + + + help.reload_fixtures + Если эти пользователи не работают, перезагрузите фикстуры приложения, выполнив в консоли следующую команду: + + + help.add_user + Если вы хотите создать новых пользователей, воспользуйтесь следующей командой: + + + help.more_information + Symfony документации.]]> + + + help.post_summary + В кратком содержании не допускается использование Markdown разметки и HTML-тегов, только простой текст. + + + help.post_publication + Установите дату в будущем, чтобы запланировать публикацию поста в блоге. + + + help.post_content + Используйте Markdown разметку для оформления записи. HTML тоже разрешён. + + + help.comment_content + Комментарии, не соответствующие нашему Кодексу поведения, будут модерироваться. + + + + info.change_password + После изменения пароля Вам потребуется заново авторизоваться в приложении. + + + + rss.title + Symfony Demo блог + + + rss.description + Самые последние записи, опубликованные в Symfony Demo блоге + + + + paginator.previous + Назад + + + paginator.next + Вперед + + + paginator.current + (текущая) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.sk.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.sk.xlf new file mode 100644 index 00000000..5e285817 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.sk.xlf @@ -0,0 +1,443 @@ + + + + + + note + POZNÁMKA + + + tip + TIP + + + not_available + nie je dostupný + + + mit_license + MIT licencia + + + + http_error.name + Chyba {status_code, number} + + + http_error.description + Vyskytla sa neznáma chyba (HTTP {status_code, number}), ktorá zabránila dokončiť vašu požiadavku. + + + http_error.suggestion + sa vráťte späť na domovskú stránku.]]> + + + http_error_403.description + Nemáte povolenie na prístup k tomuto zdroju. + + + http_error_403.suggestion + Požiadajte svojho nadriadeného alebo správcu systému, aby Vám udelil prístup k tomuto zdroju. + + + http_error_404.description + Nemohli sme nájsť požadovanú stránku. + + + http_error_404.suggestion + sa vráťte späť na domovskú stránku.]]> + + + http_error_500.description + Vyskytla sa interná chyba servera. + + + http_error_500.suggestion + sa vráťte späť na domovskú stránku.]]> + + + + title.homepage + Symfony Demo aplikácii]]> + + + title.source_code + Zdrojové kódy použité pri vykreslení tejto stránky + + + title.controller_code + Kód kontroléra + + + title.twig_template_code + Kód Twig šablóny + + + title.login + Prihlásenie + + + title.post_list + Zoznam príspevkov + + + title.edit_post + Upraviť príspevok #{id, number} + + + title.add_comment + Pridať komentár + + + title.comment_error + Pri vytváraní komentára došlo k chybe + + + title.edit_user + Upraviť užívateľa + + + title.change_password + Zmeniť heslo + + + + action.show + Zobraziť + + + action.show_post + Zobraziť príspevok + + + action.show_code + Zobraziť zdrojáky + + + action.edit + Upraviť + + + action.edit_post + Upraviť príspevok + + + action.save + Uložiť zmeny + + + action.delete_post + Odstrániť príspevok + + + delete_post_modal.title + Naozaj chcete odstrániť tento príspevok? + + + delete_post_modal.body + Túto akciu nie je možné vrátiť späť. + + + label.delete_post + Odstrániť príspevok + + + label.cancel + Zrušiť + + + action.create_post + Nový príspevok + + + label.create_post + Vytvoriť príspevok + + + label.save_and_create_new + Uložiť a vytvoriť nový + + + action.back_to_list + Späť na zoznam príspevkov + + + action.publish_comment + Zverejniť komentár + + + action.sign_in + Prihlásiť + + + action.browse_app + Prejsť do aplikácie + + + action.browse_admin + Prejsť do administrácie + + + action.edit_user + Upraviť užívateľa + + + action.change_password + Zmeniť heslo + + + + label.title + Názov + + + label.author + Autor + + + label.author_email + Email autora + + + label.username + Login + + + label.fullname + Celé meno + + + label.email + Email + + + label.password + Heslo + + + label.current_password + Aktuálne heslo + + + label.new_password + Nové heslo + + + label.new_password_confirm + Potvrďte nové heslo + + + label.role + Rola + + + label.content + Obsah + + + label.summary + Zhrnutie + + + label.published_at + Publikované + + + label.tags + Tágy + + + label.actions + Akcia + + + title.post_new + Nový príspevok + + + action.edit_contents + Upraviť príspevok + + + + menu.toggle_nav + Prepnúť navigáciu + + + menu.choose_language + Vyberte si jazyk + + + menu.post_list + Zoznam príspevkov + + + menu.back_to_blog + Späť na blog + + + menu.homepage + Hlavná stránka + + + menu.admin + Administrácia + + + menu.user + Účet + + + menu.logout + Odhlásiť + + + menu.rss + Blogové príspevky RSS + + + menu.search + Vyhľadávanie + + + + post.to_publish_a_comment + sa pre pridanie komentára + + + post.num_comments + {count, plural, one {# komentár} few {# komentáre} other {# komentárov}} + + + post.commented_on + pridal komentár v + + + post.no_comments + Buďte prví, kto napíše komentár k tomuto príspevku. + + + post.no_posts_found + Neboli nájdené žiadne príspevky. + + + post.created_successfully + Príspevok bol úspešne vytvorený! + + + post.updated_successfully + Príspevok bol úspešne aktualizovaný! + + + post.deleted_successfully + Príspevok bol úspešne odstránený! + + + post.search_for + Hľadať... + + + post.search_no_results + Neboli nájdené žiadne výsledky + + + + user.updated_successfully + Užívateľ bol úspešne aktualizovaný! + + + + notification.comment_created + Váš príspevok dostal komentár! + + + notification.comment_created.description + tento odkaz]]> + + + + help.app_description + demo aplikácie vytvorenej Symfony frameworkom s využitím doporučených spôsobov vývoja Symfony aplikácií.]]> + + + help.show_code + kontroléra a šablóny použitých pri vykreslení tejto stránky.]]> + + + help.browse_app + verejnú časť demo aplikácie.]]> + + + help.browse_admin + administračnú časť demo aplikácie.]]> + + + help.login_users + Skúste nasledujúcich užívateľov + + + help.role_user + bežný užívateľ + + + help.role_admin + administrátor + + + help.reload_fixtures + Ak prihlásenie s týmito užívateľmi nefunguje, spusťte z terminálu príkaz pre načítanie predvolených dát: + + + help.add_user + Ak chcete vytvoriť nového užívateľa, spusťte príkaz: + + + help.more_information + Symfony dokumentácie.]]> + + + help.post_summary + Zhrnutia nemôžu obsahovať Markdown alebo HTML obsah; iba obyčajný text. + + + help.post_publication + Nastavením budúceho dátumu naplánujete zverejnenie blogového príspevku. + + + help.post_content + Pomocou Markdown naformátujte obsah blogového príspevku. HTML je tiež povolené. + + + help.comment_content + Komentáre, ktoré nie sú v súlade s našim Kódexom správania, budú moderované. + + + + info.change_password + Po zmene hesla budete odhlásení z aplikácie. + + + + rss.title + Symfony Demo blog + + + rss.description + Najnovšie príspevky zverejnené na blogu Symfony Demo + + + + paginator.previous + Predošlá + + + paginator.next + Ďalšia + + + paginator.current + (aktuálna) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.sl.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.sl.xlf new file mode 100644 index 00000000..85b9ca6e --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.sl.xlf @@ -0,0 +1,368 @@ + + + + + + note + OPOMBA + + + tip + NASVET + + + not_available + Ni na voljo + + + mit_license + Licenca MIT + + + + http_error.name + Napaka {status_code, number} + + + http_error.description + Prišlo je do neznane napake (HTTP {status_code, number}), ki preprečuje zaključiti vaš zahtevek. + + + http_error.suggestion + se vrnite na domačo stran.]]> + + + http_error_403.description + Nimate pravic za dostop do tega vira. + + + http_error_403.suggestion + Vprašajte vašega upravitelja ali sistemskega administratorja, da vam omogoči dostop do tega vira. + + + http_error_404.description + Strani, ki ste jo zahtevali, ni mogoče najti. + + + http_error_404.suggestion + se vrnite na domačo stran.]]> + + + http_error_500.description + Prišlo je do interne napake na strežniku. + + + http_error_500.suggestion + se vrnite na domačo stran.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Izvorna koda uporabljena za izpis te strani + + + title.controller_code + Koda krmilnika + + + title.twig_template_code + Koda predloge Twig + + + title.login + Varna prijava + + + title.post_list + Seznam objav + + + title.edit_post + Uredi objavo #{id, number} + + + title.add_comment + Dodaj komentar + + + title.comment_error + Pri objavi vašega komentarja je prišlo do napake + + + + action.show + Prikaži + + + action.show_post + Prikaži objavo + + + action.show_code + Prikaži kodo + + + action.edit + Uredi + + + action.edit_post + Uredi objavo + + + action.save + Shrani spremembe + + + action.delete_post + Izbriši objavo + + + delete_post_modal.title + Ali ste prepričani, da želite izbrisati to objavo? + + + delete_post_modal.body + Tega dejanja ni mogoče razveljaviti. + + + label.delete_post + Izbriši objavo + + + label.cancel + Prekliči + + + action.create_post + Ustvari novo objavo + + + label.create_post + Ustvari objavo + + + label.save_and_create_new + Shrani in ustvari novo + + + action.back_to_list + Nazaj na seznam objav + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijava + + + action.browse_app + Ogled aplikacije + + + action.browse_admin + Ogled ozadja + + + + label.title + Naslov + + + action.close + Zapri + + + label.author + Avtor + + + label.author_email + E-pošta avtorja + + + label.username + uporabniško ime + + + label.password + Geslo + + + label.role + Vloga + + + label.content + Vsebina + + + label.summary + Povzetek + + + label.published_at + Objavljeno + + + label.tags + Značke + + + label.actions + Dejanja + + + title.post_new + Nova objava + + + action.edit_contents + Uredi vsebine + + + + menu.toggle_nav + Preklop navigacije + + + menu.choose_language + Izbira jezika + + + menu.post_list + Seznam objav + + + menu.back_to_blog + Nazaj na blog + + + menu.homepage + Domača stran + + + menu.admin + Ozadje + + + menu.logout + Odjava + + + menu.rss + RSS objav bloga + + + menu.search + Iskanje + + + + post.to_publish_a_comment + za objavo komentarja + + + post.num_comments + {count, plural, one {# komentar} two {# komentarja} few {# komentarji} other {# komentarjev}} + + + post.commented_on + komentirano dne + + + post.no_comments + Bodite prvi, da komentirate to objavo. + + + post.no_posts_found + Na voljo ni nobene objave. + + + post.created_successfully + Objava uspešno ustvarjena! + + + post.updated_successfully + Objava uspešno posodobljena! + + + post.deleted_successfully + Objava uspešno izbrisana! + + + post.search_for + Iskanje za ... + + + post.search_no_results + Ni najdenih rezultatov + + + + notification.comment_created + Vaša objava je prejela komentar! + + + notification.comment_created.description + tej povezavi]]> + + + + help.app_description + demo aplikacija zgrajena z ogrodjem Symfony za prikaz priporočenega načina razvoja aplikacij Symfony.]]> + + + help.show_code + krmilnika in predloge uporabljene za izpis te strani.]]> + + + help.browse_app + javne sekcije demo aplikacije.]]> + + + help.browse_admin + administracije demo aplikacije.]]> + + + help.login_users + Poskusite enega izmed sledečih uporabnikov + + + help.role_user + splošni uporabnik + + + help.role_admin + administrator + + + help.reload_fixtures + Če uporabniki ne delujejo, ponovno naložite podatke aplikacije s pogonom tega ukaza v ukazni vrstici: + + + help.add_user + Če želite dodati nove uporabnike, poženite sledeči ukaz: + + + help.more_information + dokumentacijo Symfony.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Najnovejše objave objavljene na Symfony Demo blogu + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Cyrl.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Cyrl.xlf new file mode 100644 index 00000000..4790056f --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Cyrl.xlf @@ -0,0 +1,446 @@ + + + + + + note + НАПОМЕНА + + + tip + САВЕТ + + + not_available + Није доступно + + + mit_license + MIT лиценца + + + + http_error.name + Грешка {status_code, number} + + + http_error.description + Десила се непозната грешка (HTTP {status_code, number}) која је спречила извршавање Вашег захтева. + + + http_error.suggestion + вратите на почетну страницу.]]> + + + http_error_403.description + Немате дозволу за приступ овом ресурсу. + + + http_error_403.suggestion + Тражите од администратора система да Вам одобри приступ овом ресурсу. + + + http_error_404.description + Нисмо могли да пронађемо страницу коју сте тражили. + + + http_error_404.suggestion + вратите на почетну страницу..]]> + + + http_error_500.description + Дошло је до интерне серверске грешке (500). + + + http_error_500.suggestion + вратите на почетну страницу.]]> + + + + title.homepage + Symfony Demo апликацију]]> + + + title.source_code + Изворни код коришћен за приказ ове странице + + + title.controller_code + Код за контролер + + + title.twig_template_code + Код за Twig шаблон + + + title.login + Безбедно пријављивање + + + title.post_list + Листа чланака + + + title.edit_post + Измена чланка #{id, number} + + + title.add_comment + Остави коментар + + + title.comment_error + Дошло је до грешке при објављивању Вашег коментара + + + title.edit_user + Промена података о кориснику/ици + + + title.change_password + Промена лозинке + + + + action.show + Прикажи + + + action.show_post + Прикажи чланак + + + action.show_code + Прикажи код + + + action.edit + Измени + + + action.edit_post + Измени чланак + + + action.save + Сачувај измене + + + action.delete_post + Обриши чланак + + + delete_post_modal.title + Да ли сигурно желите да обришете овај чланак? + + + delete_post_modal.body + Ова акција се не може поништити. + + + label.delete_post + Обриши чланак + + + label.cancel + Откажи + + + action.create_post + Напиши нови чланак + + + label.create_post + Сачувај чланак + + + label.save_and_create_new + Сачувај и напиши нови чланак + + + action.back_to_list + Назад на листу чланака + + + action.publish_comment + Објави коментар + + + action.sign_in + Пријави ме + + + action.browse_app + Истражи аплликацију + + + action.browse_admin + Истражи администраторски део + + + action.edit_user + Уреди корисника/цу + + + action.change_password + Промени лозинку + + + action.close + Затвори + + + + label.title + Наслов + + + label.author + Аутор/ка + + + label.author_email + Е-пошта аутора/ке + + + label.username + Корисничко име + + + label.fullname + Пуно име + + + label.email + Е-пошта + + + label.password + Лозинка + + + label.current_password + Тренутна лозинка + + + label.new_password + Нова лозинка + + + label.new_password_confirm + Потврдите лозинку + + + label.role + Улога + + + label.content + Садржај + + + label.summary + Сажетак + + + label.published_at + Објављено + + + label.tags + Ознаке + + + label.actions + Акције + + + title.post_new + Нови чланак + + + action.edit_contents + Измени садржај + + + + menu.toggle_nav + Укључи/искључи навигацију + + + menu.choose_language + Изаберите језик + + + menu.post_list + Листа чланака + + + menu.back_to_blog + Назад на блог + + + menu.homepage + Почетна страница + + + menu.admin + Администрација + + + menu.user + Налог + + + menu.logout + Одјави ме + + + menu.rss + RSS чланака на блогу + + + menu.search + Тражи + + + post.to_publish_a_comment + да објавиш коментар + + + post.num_comments + {count, plural, one {# коментар} other {# коментара}} + + + post.commented_on + коментар објављен + + + post.no_comments + Напиши први коментар на овај чланак. + + + post.no_posts_found + Није пронађен ниједан чланак. + + + post.created_successfully + Чланак је успешно сачуван! + + + post.updated_successfully + Чланак је успешно ажуриран! + + + post.deleted_successfully + Чланак је успешно обрисан! + + + post.search_for + Тражим... + + + post.search_no_results + Ништа није пронађено + + + + user.updated_successfully + Подаци о кориснику/ци су успешно ажурирани!! + + + + notification.comment_created + Написан је коментар на Ваш чланак! + + + notification.comment_created.description + овом линку]]> + + + + help.app_description + демо апликација је направљена у радном оквиру Symfony као илустрација препорученог начина развоја Symfony aпликација.]]> + + + help.show_code + контролера и шаблона коришћених за приказ ове странице.]]> + + + help.browse_app + јавни део ове демо апликације.]]> + + + help.browse_admin + администраторски део ове демо апликације.]]> + + + help.login_users + Тестирајте апликацију употребом неког од следећих корисничких налога + + + help.role_user + обични/а корисник/ца + + + help.role_admin + администратор/ка + + + help.reload_fixtures + Уколико пријављивање неким од наведених корисничких налога не ради, поново учитајте демо податке покретањем ове наредбе у терминалу: + + + help.add_user + Уколико желите да креирате нове кориснике покрените ову команду: + + + help.more_information + Symfony документацију.]]> + + + help.post_summary + Сажетак не може садржати Markdown или HTML код већ само обичан текст. + + + help.post_publication + Уколико желите да закажете објављивање овог чланка изаберите неки будући датум. + + + help.post_content + За форматирање садржаја чланка користите Markdown. HTML је такође дозвољен. + + + help.comment_content + Коментари који нису у складу са нашим Кодексом понашања биће модерирани. + + + + info.change_password + Након промене ложинке бићете одјављени из апликације. + + + + rss.title + Блог Symfony Demo + + + rss.description + Најновији чланци објављени на Symfony Demo блогу + + + + paginator.previous + Претходна + + + paginator.next + Следећа + + + paginator.current + (тренутна) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Latn.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Latn.xlf new file mode 100644 index 00000000..f429fb9a --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.sr_Latn.xlf @@ -0,0 +1,446 @@ + + + + + + note + NAPOMENA + + + tip + SAVET + + + not_available + Nije dostupno + + + mit_license + MIT licenca + + + + http_error.name + Greška {status_code, number} + + + http_error.description + Desila se nepoznata greška (HTTP {status_code, number}) koja je sprečila izvršavanje Vašeg zahteva. + + + http_error.suggestion + vratite na početnu stranicu.]]> + + + http_error_403.description + Nemate dozvolu za pristup ovom resursu. + + + http_error_403.suggestion + Tražite od administratora sistema da Vam odobri pristup ovom resursu. + + + http_error_404.description + Nismo mogli da pronađemo stranicu koju ste tražili. + + + http_error_404.suggestion + vratite na početnu stranicu..]]> + + + http_error_500.description + Došlo je do interne serverske greške (500). + + + http_error_500.suggestion + vratite na početnu stranicu.]]> + + + + title.homepage + Symfony Demo aplikaciju]]> + + + title.source_code + Izvorni kod korišćen za prikaz ove stranice + + + title.controller_code + Kod za kontroler + + + title.twig_template_code + Kod za Twig šablon + + + title.login + Bezbedno prijavljivanje + + + title.post_list + Lista članaka + + + title.edit_post + Izmena članka #{id, number} + + + title.add_comment + Ostavi komentar + + + title.comment_error + Došlo je do greške pri objavljivanju Vašeg komentara + + + title.edit_user + Promena podataka o korisniku/ici + + + title.change_password + Promena lozinke + + + + action.show + Prikaži + + + action.show_post + Prikaži članak + + + action.show_code + Prikaži kod + + + action.edit + Izmeni + + + action.edit_post + Izmeni članak + + + action.save + Sačuvaj izmene + + + action.delete_post + Obriši članak + + + delete_post_modal.title + Da li sigurno želite da obrišete ovaj članak? + + + delete_post_modal.body + Ova akcija se ne može poništiti. + + + label.delete_post + Obriši članak + + + label.cancel + Otkaži + + + action.create_post + Napiši novi članak + + + label.create_post + Sačuvaj članak + + + label.save_and_create_new + Sačuvaj i napiši novi članak + + + action.back_to_list + Nazad na listu članaka + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijavi me + + + action.browse_app + Istraži apllikaciju + + + action.browse_admin + Istraži administratorski deo + + + action.edit_user + Uredi korisnika/cu + + + action.change_password + Promeni lozinku + + + action.close + Zatvori + + + + label.title + Naslov + + + label.author + Autor/ka + + + label.author_email + E-pošta autora/ke + + + label.username + Korisničko ime + + + label.fullname + Puno ime + + + label.email + E-pošta + + + label.password + Lozinka + + + label.current_password + Trenutna lozinka + + + label.new_password + Nova lozinka + + + label.new_password_confirm + Potvrdite lozinku + + + label.role + Uloga + + + label.content + Sadržaj + + + label.summary + Sažetak + + + label.published_at + Objavljeno + + + label.tags + Oznake + + + label.actions + Akcije + + + title.post_new + Novi članak + + + action.edit_contents + Izmeni sadržaj + + + + menu.toggle_nav + Uključi/isključi navigaciju + + + menu.choose_language + Izaberite jezik + + + menu.post_list + Lista članaka + + + menu.back_to_blog + Nazad na blog + + + menu.homepage + Početna stranica + + + menu.admin + Administracija + + + menu.user + Nalog + + + menu.logout + Odjavi me + + + menu.rss + RSS članaka na blogu + + + menu.search + Traži + + + post.to_publish_a_comment + da objaviš komentar + + + post.num_comments + {count, plural, one {# komentar} other {# komentara}} + + + post.commented_on + komentar objavljen + + + post.no_comments + Napiši prvi komentar na ovaj članak. + + + post.no_posts_found + Nije pronađen nijedan članak. + + + post.created_successfully + Članak je uspešno sačuvan! + + + post.updated_successfully + Članak je uspešno ažuriran! + + + post.deleted_successfully + Članak je uspešno obrisan! + + + post.search_for + Tražim... + + + post.search_no_results + Ništa nije pronađeno + + + + user.updated_successfully + Podaci o korisniku/ci su uspešno ažurirani!! + + + + notification.comment_created + Napisan je komentar na Vaš članak! + + + notification.comment_created.description + ovom linku]]> + + + + help.app_description + demo aplikacija je napravljena u radnom okviru Symfony kao ilustracija preporučenog načina razvoja Symfony aplikacija.]]> + + + help.show_code + kontrolera i šablona korišćenih za prikaz ove stranice.]]> + + + help.browse_app + javni deo ove demo aplikacije.]]> + + + help.browse_admin + administratorski deo ove demo aplikacije.]]> + + + help.login_users + Testirajte aplikaciju upotrebom nekog od sledećih korisničkih naloga + + + help.role_user + obični/a korisnik/ca + + + help.role_admin + administrator/ka + + + help.reload_fixtures + Ukoliko prijavljivanje nekim od navedenih korisničkih naloga ne radi, ponovo učitajte demo podatke pokretanjem ove naredbe u terminalu: + + + help.add_user + Ukoliko želite da kreirate nove korisnike pokrenite ovu komandu: + + + help.more_information + Symfony dokumentaciju.]]> + + + help.post_summary + Sažetak ne može sadržati Markdown ili HTML kod već samo običan tekst. + + + help.post_publication + Ukoliko želite da zakažete objavljivanje ovog članka izaberite neki budući datum. + + + help.post_content + Za formatiranje sadržaja članka koristite Markdown. HTML je takođe dozvoljen. + + + help.comment_content + Komentari koji nisu u skladu sa našim Kodeksom ponašanja biće moderirani. + + + + info.change_password + Nakon promene ložinke bićete odjavljeni iz aplikacije. + + + + rss.title + Blog Symfony Demo + + + rss.description + Najnoviji članci objavljeni na Symfony Demo blogu + + + + paginator.previous + Prethodna + + + paginator.next + Sledeća + + + paginator.current + (trenutna) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.tr.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.tr.xlf new file mode 100644 index 00000000..00b85323 --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.tr.xlf @@ -0,0 +1,368 @@ + + + + + + note + NOT + + + tip + TÜYO + + + not_available + Uygun değil + + + mit_license + MİT Lisansı + + + + http_error.name + Hata {status_code, number} + + + http_error.description + İsteğinizi tamamlamayı engelleyen bilinmeyen bir hata oluştu (HTTP {status_code}). + + + http_error.suggestion + ana sayfaya geri dönmeyi deneyin.]]> + + + http_error_403.description + Bu kaynağa erişim izniniz yok. + + + http_error_403.suggestion + Yöneticinize veya sistem yöneticinize bu kaynağa erişim izni vermesini isteyin. + + + http_error_404.description + İstediğiniz sayfayı bulamadık. + + + http_error_404.suggestion + ana sayfaya geri dönün.]]> + + + http_error_500.description + Bir iç sunucu hatası vardı. + + + http_error_500.suggestion + ana sayfaya geri dönmeyi deneyin.]]> + + + + title.homepage + Symfony Demo uygulamasına hoş geldiniz]]> + + + title.source_code + Bu sayfayı oluşturmak için kullanılan kaynak kodu + + + title.controller_code + Denetleyici kodu + + + title.twig_template_code + Twig şablon kodu + + + title.login + Güvenli Giriş + + + title.post_list + Gönderi Listesi + + + title.edit_post + Gönderiyi düzenle #{id, number} + + + title.add_comment + Yorum ekle + + + title.comment_error + Yorumunuz yayınlanırken bir hata oluştu + + + + action.show + Göster + + + action.show_post + Gönderiyi göster + + + action.show_code + Kodu göster + + + action.edit + Düzenle + + + action.edit_post + Gönderiyi düzenle + + + action.save + Değişiklikleri kaydet + + + action.delete_post + Gönderiyi sil + + + delete_post_modal.title + Bu gönderiyi silmek istediğinizden emin misiniz? + + + delete_post_modal.body + Bu işlem geri alınamaz. + + + label.delete_post + Gönderiyi sil + + + label.cancel + İptal + + + action.create_post + Yeni bir gönderi oluştur + + + label.create_post + Gönderi oluştur + + + label.save_and_create_new + Kaydet ve yeni oluştur + + + action.back_to_list + Gönderi listesine geri dön + + + action.publish_comment + Yorumu yayınla + + + action.sign_in + Giriş yap + + + action.browse_app + Uygulamaya göz at + + + action.browse_admin + Yönetim paneline göz at + + + + label.title + Başlık + + + action.close + Kapat + + + label.author + Yazar + + + label.author_email + Yazar e-postası + + + label.username + Kullanıcı adı + + + label.password + Şifre + + + label.role + Rol + + + label.content + İçerik + + + label.summary + Özet + + + label.published_at + Yayınlandı + + + label.tags + Etiketler + + + label.actions + İşlemler + + + title.post_new + Gönderi oluluşturma + + + action.edit_contents + İçeriği düzenle + + + + menu.toggle_nav + Navigasyonu değiştir + + + menu.choose_language + Dil seç + + + menu.post_list + Gönderi listesi + + + menu.back_to_blog + Blog'a dön + + + menu.homepage + Anasayfa + + + menu.admin + Yönetim paneli + + + menu.logout + Çıkış + + + menu.rss + Blog Yazıları RSS + + + menu.search + Arama + + + + post.to_publish_a_comment + yorum ekle + + + post.num_comments + {count} yorum + + + post.commented_on + yorum yaptı + + + post.no_comments + Bu yazıya ilk yorum yapan siz olun. + + + post.no_posts_found + Gönderi bulunamadı. + + + post.created_successfully + Gönderi başarıyla oluşturuldu! + + + post.updated_successfully + Gönderi başarıyla güncellendi! + + + post.deleted_successfully + Gönderi başarıyla silindi! + + + post.search_for + Arama... + + + post.search_no_results + Sonuç bulunamadı + + + + notification.comment_created + Gönderiniz bir yorum aldı! + + + notification.comment_created.description + bu bağlantıyı takip ederek okuyabilirsiniz.]]> + + + + help.app_description + demo uygulamasıdır.]]> + + + help.show_code + Denetleyici ve şablon kaynak kodunu göstermek için bu butona tıklayın.]]> + + + help.browse_app + genel bölümüne göz atın.]]> + + + help.browse_admin + yönetim paneline göz atın.]]> + + + help.login_users + Aşağıdaki kullanıcılardan birini deneyin + + + help.role_user + normal kullanıcı + + + help.role_admin + yönetici + + + help.reload_fixtures + Bu kullanıcılar işe yaramazsa, bu komutu terminalden çalıştırarak uygulama datasını yeniden yükleyin: + + + help.add_user + Yeni kullanıcılar oluşturmak isterseniz, bu komutu çalıştırın: + + + help.more_information + Symfony doc sayfasına bakın..]]> + + + + rss.title + Symfony Demo blogu + + + rss.description + Symfony Demo blogunda yayınlanan son yazılar + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.uk.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.uk.xlf new file mode 100644 index 00000000..cba9037f --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.uk.xlf @@ -0,0 +1,447 @@ + + + + + + note + ПРИМІТКА + + + tip + ПОРАДА + + + not_available + Недоступно + + + mit_license + MIT Ліцензія + + + + http_error.name + Помилка {status_code, number} + + + http_error.description + Виникла невідма помилка (HTTP {status_code, number}), котра завадила виконати ваш запит. + + + http_error.suggestion + поверніться на головну сторінку.]]> + + + http_error_403.description + У вас немає дозволу на доступ до цього ресурсу. + + + http_error_403.suggestion + Зробіть запит на доступ до цього ресурсу у вашого менеджера або системного адміністратора. + + + http_error_404.description + Ми не змогли знайти сторінку що ви запросили. + + + http_error_404.suggestion + поверніться на головну сторінку.]]> + + + http_error_500.description + Виникла внутрішня помилка сервера. + + + http_error_500.suggestion + поверніться на головну сторінку.]]> + + + + title.homepage + Symfony Demo додатку]]> + + + title.source_code + Вихідний код, який використовувався для побудови цієї сторінки + + + title.controller_code + Код контролеру + + + title.twig_template_code + Код шаблону Twig + + + title.login + Авторизація + + + title.post_list + Список записів + + + title.edit_post + Редагування запису #{id, number} + + + title.add_comment + Додати коментар + + + title.comment_error + Виникла помилка під час публікації вашого коментаря + + + title.edit_user + Редагувати користувача + + + title.change_password + Змінити пароль + + + + action.show + Показати + + + action.show_post + Показати запис + + + action.show_code + Показати код + + + action.edit + Редагувати + + + action.edit_post + Редагувати запис + + + action.save + Зберегти зміни + + + action.delete_post + Видалити запис + + + delete_post_modal.title + Ви впевнені, що хочете видалити цей запис? + + + delete_post_modal.body + Ця дія не може бути скасована. + + + label.delete_post + Видалити запис + + + label.cancel + Скасувати + + + action.create_post + Створити новий запис + + + label.create_post + Створити запис + + + label.save_and_create_new + Зберегти та створити новий + + + action.back_to_list + Назад до списку записів + + + action.publish_comment + Опублікувати коментар + + + action.sign_in + Ввійти + + + action.browse_app + Перейти до публічного розділу + + + action.browse_admin + Перейти до панелі керування + + + action.edit_user + Редагувати користувача + + + action.change_password + Змінити пароль + + + + label.title + Назва + + + action.close + Закрити + + + label.author + Автор + + + label.author_email + Email автора + + + label.username + Логін + + + label.fullname + Повне ім'я + + + label.email + Email + + + label.password + Пароль + + + label.current_password + Поточний пароль + + + label.new_password + Новий пароль + + + label.new_password_confirm + Підтвердіть пароль + + + label.role + Роль + + + label.content + Зміст + + + label.summary + Короткий зміст + + + label.published_at + Опубліковано + + + label.tags + Теги + + + label.actions + Дії + + + title.post_new + Створення запису + + + action.edit_contents + Редагувати зміст + + + + menu.toggle_nav + Переключити навігацію + + + menu.choose_language + Вибрати мову + + + menu.post_list + Список записів + + + menu.back_to_blog + Назад до блогу + + + menu.homepage + Головна сторінка + + + menu.admin + Панель керування + + + menu.user + Обліковий запис + + + menu.logout + Вийти + + + menu.rss + RSS Записів Блогу + + + menu.search + Пошук + + + + post.to_publish_a_comment + опублікувати коментар + + + post.num_comments + {count, plural, one {# коментар} many {# коментаря} other {# коментарів}} + + + post.commented_on + прокоментовано + + + post.no_comments + Будьте першими, хто прокоментує цей запис. + + + post.no_posts_found + Жодного запису не знайдено. + + + post.created_successfully + Запис успішно створений! + + + post.updated_successfully + Запис успішно оновлений! + + + post.deleted_successfully + Запис успішно видалений! + + + post.search_for + Шукати... + + + post.search_no_results + Нічого не знайдено + + + + user.updated_successfully + Користувача оновлено успішно! + + + + notification.comment_created + Ваш запис отримав коментар! + + + notification.comment_created.description + цим посиланням]]> + + + + help.app_description + демо додаток створено на основі Symfony фреймворку для того, щоб показати рекомендований спосіб розробки Symfony додатків.]]> + + + help.show_code + контролеру та шаблону, які використовувалися для побудови цієї сторінки.]]> + + + help.browse_app + публічного розділу демо додатку.]]> + + + help.browse_admin + панелі керування демо додатку.]]> + + + help.login_users + Використовуйте будь-якого з наступних користувачів + + + help.role_user + звичайний користувач + + + help.role_admin + адміністратор + + + help.reload_fixtures + Якщо ці користувачі не працюють, перезавантажте фікстури додатку, виконавши в консолі наступну команду: + + + help.add_user + Якщо ви хочете створити нових користувачів, скористайтеся наступною командою: + + + help.more_information + Symfony документації.]]> + + + help.post_summary + Короткий зміст не може містити Markdown розмітку або HTML контент; лише звичайний текст. + + + help.post_publication + Встановіть дату в майбутньому, щоб запланувати публікацію запису. + + + help.post_content + Використовуйте Markdown розмітку для форматування змісту запису. HTML також дозволений. + + + help.comment_content + Коментарі, які не відповідають нашому Кодексу поведінки, будуть модеровані. + + + + info.change_password + Після зміни пароля, ви вийдете із програми. + + + + rss.title + Symfony Demo блог + + + rss.description + Найновіші записи, опубліковані в Symfony Demo блозі + + + + paginator.previous + Назад + + + paginator.next + Далі + + + paginator.current + (поточна) + + + + diff --git a/integration/testdata/symfony_app/translations/messages+intl-icu.zh_CN.xlf b/integration/testdata/symfony_app/translations/messages+intl-icu.zh_CN.xlf new file mode 100644 index 00000000..1110991f --- /dev/null +++ b/integration/testdata/symfony_app/translations/messages+intl-icu.zh_CN.xlf @@ -0,0 +1,443 @@ + + + + + + note + 注意 + + + tip + 提示 + + + not_available + 不可用 + + + mit_license + MIT License + + + + http_error.name + 错误 {status_code, number} + + + http_error.description + 有未知错误 (HTTP {status_code, number}) 阻止你的请求. + + + http_error.suggestion + 返回首页.]]> + + + http_error_403.description + 你没有权限访问这个资源. + + + http_error_403.suggestion + 请联系系统管理员给你访问这个资源的权限. + + + http_error_404.description + 无法找到请求的页面. + + + http_error_404.suggestion + 返回首页.]]> + + + http_error_500.description + 服务器错误. + + + http_error_500.suggestion + 返回首页.]]> + + + + title.homepage + Symfony 示例 应用]]> + + + title.source_code + 渲染此页面的源代码 + + + title.controller_code + Controller 控制器代码 + + + title.twig_template_code + Twig 模板代码 + + + title.login + 登录 + + + title.post_list + 文章列表 + + + title.edit_post + 编辑文章 #{id, number} + + + title.add_comment + 发表评论 + + + title.comment_error + 发表评论出错 + + + title.edit_user + 编辑用户 + + + + action.show + 展示 + + + action.show_post + 展示文章 + + + action.show_code + 展示代码 + + + action.edit + 编辑 + + + action.edit_post + 编辑文章 + + + action.save + 保存修改 + + + action.delete_post + 删除文章 + + + delete_post_modal.title + 确定要删除此文章吗? + + + delete_post_modal.body + 这个操作无法撤销. + + + label.delete_post + 删除文章 + + + label.cancel + 取消 + + + action.create_post + 添加一篇新文章 + + + label.create_post + 保存文章 + + + label.save_and_create_new + 保存并添加新文章 + + + label.fullname + 全名 + + + label.email + 邮箱 + + + label.current_password + 当前密码 + + + label.new_password + 新密码 + + + label.new_password_confirm + 确认密码 + + + + action.back_to_list + 返回文章列表 + + + action.publish_comment + 发表评论 + + + action.sign_in + 登录 + + + action.browse_app + 浏览博客前台 + + + action.browse_admin + 浏览管理后台 + + + action.change_password + 修改密码 + + + + label.title + 标题 + + + action.close + + + + label.author + 作者 + + + label.author_email + 作者邮箱 + + + label.username + 用户名 + + + label.password + 密码 + + + label.role + 角色 + + + label.content + 内容 + + + label.summary + 摘要 + + + label.published_at + 发布于 + + + label.tags + 标签 + + + label.actions + 操作 + + + title.post_new + 文章创建者 + + + title.change_password + 修改密码 + + + action.edit_contents + 编辑内容 + + + action.edit_user + 编辑用户 + + + + menu.toggle_nav + 切换导航 + + + menu.choose_language + 选择语言 + + + menu.post_list + 文章列表 + + + menu.back_to_blog + 返回博客 + + + menu.homepage + 主页 + + + menu.admin + 后台 + + + menu.logout + 登出 + + + menu.rss + 博客文章 RSS + + + menu.search + 搜索 + + + menu.user + 帐户 + + + + post.to_publish_a_comment + 发表评论 + + + post.num_comments + {count} 评论 + + + post.commented_on + 评论于 + + + post.no_comments + 成为文章的第一个评论者. + + + post.no_posts_found + 没有评论. + + + post.created_successfully + 评论发表成功! + + + post.updated_successfully + 评论更新成功! + + + post.deleted_successfully + 评论删除成功! + + + post.search_for + 输入关键字... + + + post.search_no_results + 没有匹配到结果! + + + + notification.comment_created + 收到一条新评论! + + + notification.comment_created.description + 查看评论]]> + + + + help.app_description + 示例应用 , 用以介绍开发Symfony应用的推荐方式.]]> + + + help.show_code + Controller 控制器 和 Twig 模板 的源代码.]]> + + + help.browse_app + 公共部分 .]]> + + + help.browse_admin + 管理后台 .]]> + + + help.login_users + 使用以下用户登录 + + + help.role_user + 普通用户 + + + help.role_admin + 管理员 + + + help.reload_fixtures + 如果这些用户无法使用, 在终端中使用以下命令来重新加载应用数据: + + + help.add_user + 如果你想要创建用户, 使用命令: + + + help.more_information + Symfony 文档 .]]> + + + help.comment_content + 不符合我们行为准则的评论将被审核。 + + + help.post_summary + 摘要不能包含 Markdown 或 HTML 内容,仅纯文本。 + + + help.post_content + 使用 Markdown 格式化博客文章内容,也允许 HTML。 + + + help.post_publication + 设置博客文章的发布日期。 + + + + rss.title + Symfony Demo blog + + + rss.description + Symfony 示例博客上发布的最新文章 + + + + paginator.previous + 上一页 + + + paginator.current + 当前页 + + + paginator.next + 下一页 + + + + info.change_password + 更改密码后,您将退出应用程序。 + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.ar.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.ar.xlf new file mode 100644 index 00000000..602f3425 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.ar.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + تم استخدام هذا العنوان بالفعل في مشاركة مدونة أخرى، ولكن يجب أن يكون فريدًا. + + + post.blank_summary + اعطى لمنشورك تلخيصا! + + + post.blank_content + منشورك يجب ان يحتوى على محتوى! + + + post.too_short_content + محتوى منشورك صغير جدا ({ limit } اقل عدد احرف مطلوب) + + + post.too_many_tags + علامات كثيره جدا (اضف { limit } علامات او اقل) + + + comment.blank + من فضلك لا تترك تعليقك فارغا! + + + comment.too_short + التعليق صغير جدا ({ limit }اقل عدد احرف مطلوب) + + + comment.too_long + التعليق كبير جدا ({ limit } اقصى عدد احرف مسموح به) + + + comment.is_spam + يعتبر محتوى هذا التعليق غير مرغوب فيه. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.bg.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.bg.xlf new file mode 100644 index 00000000..72aa1ce1 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.bg.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Напишете обобщение на публикацията си! + + + post.blank_content + Публикацията трябва да има съдържание! + + + post.too_short_content + Съдержанието на публикацията е прекалено малко ({ limit } минимум символа) + + + post.too_many_tags + Прекалено много тагове (добави { limit } тага или по-малко) + + + comment.blank + Моля не оставяйте коментара празен! + + + comment.too_short + Коментара е пркалено кратък ({ limit } симвала минимум) + + + comment.too_long + Коментара е прекалено дълъг ({ limit } симвала максимум) + + + comment.is_spam + Съдържанието на коментара се разглежда като спам. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.ca.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.ca.xlf new file mode 100644 index 00000000..b1e0f808 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.ca.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + No és possible deixar buit el resum de l'article. + + + post.blank_content + No és possible deixar buit el contingut de l'article. + + + post.too_short_content + El contingut de l'article és massa curt ({ limit } caràcters com a mínim) + + + comment.blank + No és possible deixar buit el contingut del comentari. + + + comment.too_short + El comentari és massa curt ({ limit } caràcters com a mínim) + + + comment.too_long + El comentari és massa llarg ({ limit } caràcters com a màxim) + + + comment.is_spam + El contingut del comentari es considera spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.cs.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.cs.xlf new file mode 100644 index 00000000..10d404bf --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.cs.xlf @@ -0,0 +1,31 @@ + + + + + + post.blank_summary + Napište shrnutí příspěvku! + + + post.too_short_content + Příspěvek je příliš krátký (musí mít minimálně { limit } znak)|Příspěvek je příliš krátký (musí mít minimálně { limit } znaky)|Příspěvek je příliš krátký (musí mít minimálně { limit } znaků) + + + comment.blank + Prosím, napište text komentáře! + + + comment.too_short + Komentář je příliš krátký (musí mít minimálně { limit } znak)|Komentář je příliš krátký (musí mít minimálně { limit } znaky)|Komentář je příliš krátký (musí mít minimálně { limit } znaků) + + + comment.too_long + Komentář je příliš dlouhý (musí mít maximálně { limit } znak)|Komentář je příliš dlouhý (musí mít maximálně { limit } znaky)|Komentář je příliš dlouhý (musí mít maximálně { limit } znaků) + + + comment.is_spam + Obsah tohoto komentáře je považován za spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.de.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.de.xlf new file mode 100644 index 00000000..0da643f3 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.de.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Gib deinem Beitrag eine Zusammenfassung! + + + post.blank_content + Dein Beitrag sollte einen Inhalt haben! + + + post.too_short_content + Der Beitragsinhalt ist zu kurz (mindestens { limit } Zeichen) + + + comment.blank + Bitte gib einen Kommentar ein! + + + comment.too_short + Der Kommentar ist zu kurz (mindestens { limit } Zeichen) + + + comment.too_long + Der Kommentar ist zu lang (maximal { limit } Zeichen) + + + comment.is_spam + Der Inhalt des Kommentars wird als Spam eingestuft. + + + post.too_many_tags + Zu viele Tags (höchstens { limit } Tags sind erlaubt) + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.en.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.en.xlf new file mode 100644 index 00000000..d27c627d --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.en.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + This title was already used in another blog post, but they must be unique. + + + post.blank_summary + Give your post a summary! + + + post.blank_content + Your post should have some content! + + + post.too_short_content + Post content is too short ({ limit } characters minimum) + + + post.too_many_tags + Too many tags (add { limit } tags or less) + + + comment.blank + Please don't leave your comment blank! + + + comment.too_short + Comment is too short ({ limit } characters minimum) + + + comment.too_long + Comment is too long ({ limit } characters maximum) + + + comment.is_spam + The content of this comment is considered spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.es.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.es.xlf new file mode 100644 index 00000000..3e02e5bc --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.es.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Este título ya se usó en otro artículo y ambos deben ser únicos. + + + post.blank_summary + No es posible dejar el resumen del artículo vacío. + + + post.blank_content + No es posible dejar el contenido del artículo vacío. + + + post.too_short_content + El contenido del artículo es demasiado corto ({ limit } caracteres como mínimo) + + + post.too_many_tags + Demasiadas etiquetas (añade { limit } como máximo) + + + comment.blank + No es posible dejar el contenido del comentario vacío. + + + comment.too_short + El comentario es demasiado corto ({ limit } caracteres como mínimo) + + + comment.too_long + El comentario es demasiado largo ({ limit } caracteres como máximo) + + + comment.is_spam + El contenido del comentario se considera spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.fr.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.fr.xlf new file mode 100644 index 00000000..09b37ec6 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.fr.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Veuillez donner un résumé à votre post. + + + post.blank_content + Veuillez donner un contenu à votre post. + + + post.too_short_content + Le contenu de votre post est trop court ({ limit } caractères minimum) + + + comment.blank + Veuillez ne pas laisser votre commentaire vide. + + + comment.too_short + Votre commentaire est trop court ({ limit } caractères minimum) + + + comment.too_long + Votre commentaire est trop long ({ limit } caractères maximum) + + + comment.is_spam + Le contenu de votre commentaire est considéré comme du spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.hr.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.hr.xlf new file mode 100644 index 00000000..76b02c7e --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.hr.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Dodajte sažetak svojem članku! + + + post.blank_content + Vaš članak treba imati sadržaj! + + + post.too_short_content + Sadržaj članka je prekratak (koristiti minimalno { limit } slova ili simbola) + + + post.too_many_tags + Previše oznaka (dodaj najviše { limit } oznaka ili manje) + + + comment.blank + Molim ne ostavljajte svoj komentar praznim! + + + comment.too_short + Komentar je prekratak (potrebno je minimalno { limit } slova ili simbola) + + + comment.too_long + Komentar je predugačak (koristiti maksimalno { limit } slova ili simbola) + + + comment.is_spam + Sadržaj ovog komentara smatra se spam sadržajem. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.id.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.id.xlf new file mode 100644 index 00000000..50df8cc5 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.id.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Beri posting anda ringkasan! + + + post.blank_content + Posting anda harus mempunyai konten! + + + post.too_short_content + Konten terlalu singkat (Minimal { limit } karakter) + + + comment.blank + Mohon jangan tinggalkan komentar kosong! + + + comment.too_short + Komentar terlalu singkat (Minimal { limit } karakter) + + + comment.too_long + Komentar terlalu panjang (Maksimal { limit } karakter) + + + comment.is_spam + Konten komentar ini dianggap sebagai spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.it.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.it.xlf new file mode 100644 index 00000000..401ca522 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.it.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Da' una descrizione al tuo post! + + + post.blank_content + Da' un contenuto al tuo post! + + + post.too_short_content + Il contenuto del post è troppo breve (minimo { limit } caratteri) + + + comment.blank + Per favore non lasciare in bianco il tuo commento! + + + comment.too_short + Il commento è troppo breve (minimo { limit } caratteri) + + + comment.too_long + Il commento è troppo lungo (massimo { limit } caratteri) + + + comment.is_spam + Il contenuto di questo commento è considerato come spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.ja.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.ja.xlf new file mode 100644 index 00000000..4eea7d94 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.ja.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + 要約を入力してください。 + + + post.blank_content + 本文を入力してください。 + + + post.too_short_content + 本文が短すぎます ({ limit } 文字以上必要です) + + + comment.blank + コメントを入力してください。 + + + comment.too_short + コメントが短すぎます ({ limit } 文字以上必要です) + + + comment.too_long + コメントが長すぎます ({ limit } 文字以下にしてください) + + + comment.is_spam + コメントの内容がスパムと判定されました。 + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.lt.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.lt.xlf new file mode 100644 index 00000000..9f6a45bd --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.lt.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Įrašo santrauka negali būti tuščia + + + post.blank_content + Įrašo turinys negali būti tuščias + + + post.too_short_content + Per trumpas įrašo turinys (nesiekia { limit } simbolių) + + + post.too_many_tags + Per daug žymų (viršyja { limit }) + + + comment.blank + Komentaras negali būti tuščias + + + comment.too_short + Per trumpas komentaras (nesiekia { limit } simbolių) + + + comment.too_long + Per ilgas komentaras (viršyja { limit } simbolių) + + + comment.is_spam + Komentaras traktuojamas kaip brukalas. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.nl.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.nl.xlf new file mode 100644 index 00000000..19a7c640 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.nl.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Geef uw bericht een samenvatting. + + + post.blank_content + Uw bericht heeft nog geen inhoud. + + + post.too_short_content + Bericht inhoud is te kort (minimaal { limit } karakters) + + + comment.blank + Vul alstublieft een reactie in. + + + comment.too_short + Reactie is te kort (minimaal { limit } karakters) + + + comment.too_long + Reactie is te lang (maximaal { limit } karakters) + + + comment.is_spam + De inhoud van deze reactie wordt als spam gemarkeerd. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.pl.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.pl.xlf new file mode 100644 index 00000000..68bb9ee4 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.pl.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Dodaj podsumowanie Twojego artykułu! + + + post.blank_content + Treść artykułu nie może być pusta! + + + post.too_short_content + Treść artykułu jest za krótka (minimum: { limit } znak)|Treść artykułu jest za krótka (minimum: { limit } znaki)|Treść artykułu jest za krótka (minimum: { limit } znaków) + + + comment.blank + Pole komentarza nie może być puste! + + + comment.too_short + Twój komentarz jest za krótki (minimum: { limit } znak)|Twój komentarz jest za krótki (minimum: { limit } znaki)|Twój komentarz jest za krótki (minimum: { limit } znaków) + + + comment.too_long + Twój komentarz jest za długi (maksimum: { limit } znak)|Twój komentarz jest za długi (maksimum: { limit } znaki)|Twój komentarz jest za długi (maksimum: { limit } znaków) + + + comment.is_spam + Twój komentarz został uznany za spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.pt_BR.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.pt_BR.xlf new file mode 100644 index 00000000..f6e2ac6c --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.pt_BR.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Informe um sumário para o seu post! + + + post.blank_content + Informe um conteúdo para o seu post! + + + post.too_short_content + O conteúdo do post está muito curto (mínimo de { limit } caracteres) + + + post.too_many_tags + Tags demais (adicione { limit } tags ou menos) + + + comment.blank + Por favor, não deixe seu comentário vazio! + + + comment.too_short + O comentário está muito curto (mínimo de { limit } caracteres) + + + comment.too_long + O comentário está muito grande (máximo de { limit } caracteres) + + + comment.is_spam + O conteúdo desse comentário é considerado spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.ro.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.ro.xlf new file mode 100644 index 00000000..087ef1e5 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.ro.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Dă articolului tău un rezumat! + + + post.blank_content + Articolul ar trebui să aibe conținut! + + + post.too_short_content + Conţinutul articolului este prea scurt (minimum { limit } caractere) + + + comment.blank + Te rugăm nu lăsa comentariul tău necompletat! + + + comment.too_short + Comentariul este prea scurt (minimum { limit } caractere) + + + comment.too_long + Comentariul este prea lung (maximum { limit } caractere) + + + comment.is_spam + Conţinutul acestui comentariu este considerat spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.ru.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.ru.xlf new file mode 100644 index 00000000..3cca24d3 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.ru.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Такой заголовок уже используется в другой записи в блоге. Пожалуйста, используйте уникальный заголовок. + + + post.blank_summary + Введите краткое содержание вашей записи! + + + post.blank_content + Ваша запись должна содержать хоть какое-то содержание! + + + post.too_short_content + Содержание записи слишком короткое (минимум { limit } символов). + + + post.too_many_tags + Слишком много тегов (добавьте { limit } тегов или меньше) + + + comment.blank + Пожалуйста, не оставляйте текст комментария пустым! + + + comment.too_short + Комментарий слишком короткий, (минимум { limit } символов). + + + comment.too_long + Комментарий слишком длинный, (максимум { limit } символов). + + + comment.is_spam + Содержание этого комментария было расценено как спам. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.sl.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.sl.xlf new file mode 100644 index 00000000..c9aaec04 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.sl.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Dodajte vaši objavi povzetek! + + + post.blank_content + Vaša objava mora imeti nekaj vsebine! + + + post.too_short_content + Vsebina objave je prekratka (vsaj { limit } znakov) + + + post.too_many_tags + Preveč značk (dodajte { limit } ali manj značk) + + + comment.blank + Ne pustite vašega komentarja praznega! + + + comment.too_short + Komentar je prekratek (vsaj { limit } znakov) + + + comment.too_long + Komentar je predolg (največ { limit } znakov) + + + comment.is_spam + Vsebina tega komentarja se smatra za spam. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.tr.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.tr.xlf new file mode 100644 index 00000000..04dfff72 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.tr.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Gönderiniz için bir özet giriniz! + + + post.blank_content + Gönderiniz bir içeriğe sahip olmalı! + + + post.too_short_content + Yayın içeriği çok kısa ({ limit } minimum karakter) + + + post.too_many_tags + Çok fazla etiket var ({ limit } etiketini veya daha azını ekleyin) + + + comment.blank + Lütfen yorumunuzu boş bırakmayın! + + + comment.too_short + Yorum çok kısa ({ limit } minimum karakter) + + + comment.too_long + Yorum çok uzun ({ limit } maksimum karakter) + + + comment.is_spam + Bu yorumun içeriği spam olarak kabul edilir. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.uk.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.uk.xlf new file mode 100644 index 00000000..d1c22d34 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.uk.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Цей заголовок вже використовується в іншому записі, але повинен бути унікальним. + + + post.blank_summary + Введіть короткий зміст вашого запису! + + + post.blank_content + Ваш запис повинен містити хоч якийсь зміст! + + + post.too_short_content + Зміст запису занадто короткий (мінімум { limit } символів). + + + post.too_many_tags + Занадто багато тегів (додайте { limit } тегів або менше) + + + comment.blank + Будь ласка, не залишайте текст коментаря порожнім! + + + comment.too_short + Коментар занадто короткий, (мінімум { limit } символів). + + + comment.too_long + Коментар занадто довгий, (максимум { limit } символів). + + + comment.is_spam + Зміст цього коментаря було розцінено як спам. + + + + diff --git a/integration/testdata/symfony_app/translations/validators+intl-icu.zh_CN.xlf b/integration/testdata/symfony_app/translations/validators+intl-icu.zh_CN.xlf new file mode 100644 index 00000000..b7676c93 --- /dev/null +++ b/integration/testdata/symfony_app/translations/validators+intl-icu.zh_CN.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + 请填写文章摘要! + + + post.blank_content + 请填写文章内容! + + + post.too_short_content + 文章内容太少 最少 ({ limit } 个字 ) + + + post.too_many_tags + 标签太多 (最多 { limit } 个标签) + + + comment.blank + 评论内容不能为空! + + + comment.too_short + 评论内容太少 (最少 { limit } 个字) + + + comment.too_long + 评论内容太多 (最多 { limit } 个字) + + + comment.is_spam + 非法评论. + + + + diff --git a/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php new file mode 100644 index 00000000..5ed1bef2 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php @@ -0,0 +1,21 @@ + 'Xl1iA5v', + 'container.build_id' => '11c92bab', + 'container.build_time' => 1671035864, +], __DIR__.\DIRECTORY_SEPARATOR.'ContainerXl1iA5v'); diff --git a/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.lock b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.lock new file mode 100644 index 00000000..e69de29b diff --git a/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.meta b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.php.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb4bff290611cc5cd916cf71f01a224376c6e627 GIT binary patch literal 30494 zcmdU2TXWks7S3ggy^;dC4;D;|x`{j$gzTeB&@OyIga>iGynSSJp)m*KZn z>@dCF&UsP1drXT`FJ*`3*wUOHNAv!BY*C*9^`CF%cRo)QFSGpiTCV^C*uvA#%RjU% z(`tjL7VcA^oqhEa)G}VGH)md1NctU-mH9?G_FW7IrsLfs7!3(_e{kp)q@m^7m^a|_yEMN3e%w9MTrM!zFXm1ShAzkeC-t4uTrK*VIM3>miM|p_G+(AMzbw_=3lVTYX$yMmaDh()MhODT;9#)$*8ua%e;#e zSg+69#-P1KgDC&ay39U6Y9?LYSBao??&6B`P|-#X7t2aTz-N22QqpC`W@5cmb6vE_ zoxnQm7u&J5SBG}I;_?f>*Tqb7`JjJz;){8eL$j{(#dgk4*}38iey1{7=IK)3mAWYJ zDjYgbV|~|)Ja>0InN2J`u~=4|zl$@xNm%knQB6s*s2vE5U20tyf1Vt!X} zo56+jZRZiJ18}iNAozqwSa7K5bhmy{t4ofsx-IW4vSl{Uy4v%y_V<*%=h?ahud2f` z7q!4ADb7O6b)J?_oy}j?;6nZ2XvGQn$0j?z*?)LhvwMolDZiy1t_d$|ZcnjTUz?I* zhwK-%x8xLW=bILHt2{H?$}+sDp*_h|!2?*uc?Xr;Ebn;!;YF=&bOZ-Me&}l|AKXp{R*G7nO9Y7S8m?4E`+X(eq5z`&rM!fZg7?Ast;o5S!^pnU8|fyVEr3B zRQ&G@BRVPeZAaRUfnUL&vPF0dW$8Dom2Ks)1yWnH?=0%d^kA>PW3>lf zJlNZW;BAD&$T$=_F_H=*kkSEu9S^BsQKAV82v;Ge5#d-#MyaBqBw&i6XDxD7 zVc)Q$LurB?>^|2a-}Dj)PRWi0K3{ue3>8tKHY|)(oJbZb9)u(kQc{j%6QH2N(AB4X z!|)XOt6Y~xEY2r?+v|>uUBoHFf<`|jHKHt?F4 z{C)aZuAy6c213z%o(j6!d+9EF+gWyGbW&s$hWiZ$k<^-B{Ezw5gINNER#3{Hxv_; zPzC=}NuBE*@C`c#aq*zkIU0Umi$dn90Qd9lgO*=D>HnXXhuLYYXf(7 zayzh-k?|EKj-rs_L?QyQyucP>p5O@Sm>5*!>tz;(9VMF^3>zu^H7iq-R`txy)u|Bf z%IjveMsoZ2GBU;*X~Y>gIs%gzWH}*$)L4Km1-}(xR>`oJIU5S(J57e$z;Q$Dsi1{q zey{NMY++%dWhN&+ln>a^g|kmufj*YyP4+R@ zM(4R!zhsin_2dBC@^&Aa;}&`wkIT%1_>d8P{ol1Ax24sx0m^!=#T{4 zZrVmQ+eXoeq!riF>biPuau5u>U2bHg0)r4z$Ut&H1(L;vfPtknHV}1UL~5kG%<#lR zy;(L(;E=L0gF9Db05@=&ZutG1Jm*h0*=O6Qb>F!*5t6p)!HT6ra%VfY1KSxHX&%TJ z;uvIBvpvCkJ9F+K&$}c)UD}v9L z9vQ)qsw7|uS5ojW5tK;CnEpuC!Gv}-6?)vuGUj(Ox)F&PW-l3 z9T~TnL&gVl#Nt>a0@8Mg2_h&ria-zsu}7slz0CX^XWwkLdO}g#vTw~=BV(i^o4GN< z5Q-TS5adHkh9Hro@QLFpCr-S~-VFACT5t0szfYI0>Ad-vfG99 zq1)|sN5)Qb8^d9&6l6yej)EAo1SiTUER7Ojg`JmK7XqeZ(3{-Q&_;BdZ&N{6SD-cv z*~o44ZDizF6ah?xlNh=#B4M>8Wg%fevfD!xit$q zMd=nC87)J!p|PNGh``brlps#DCQ%{D?U}>svzui1 zHdDGK;Z%^-_RK-nv+T&o84)WET`xuxq?Li%tzkkzIWL09jD}S&8uc?Pa!AU4E7N%~ z`;gfLz0D2s5?ax|!U&Velw(-Sn_Ky|cjb}sOQIwaG*J;Y2?@i*3Zj)lrDY5qGF3+m z^)e?C9jdxl__YHECK9-y_ChMm+SNwJNwUcH2x=S)sJAl1lQ7aIR+>D?WgR{To}xJmU1n_6ocNd4s8&#TCe_y9-1R zr``q1w(Gn|zk)upqa9%@;D(%fldaPyB8I~X31kzQ4B`;lHYpDnNdg3zL<;g9aI^+C zeCiq|%ilf9`Pv$FyH{lI^FIKi?M;+cwo;uwRwsts6i?f3J{W(!Tb6LnvZ2#Svqmjx z?YvCt@;so+o{zi(4Z3w!>e^M*AyD5iV>N6PetiV(p8b4l&S*FkYjzH0Rue>zL+km9 ztA<0tSB7VI851D#;b*sVZTAjaJx)}5Z?Q##2ne|sZ&}S0X^%-du08IER{zS)AXUq_ zmKZJt;SVteL)cQoBw#3i6wQp4+52Wtz>jX|%IMT_VZJ}qu>*ehvPwM^xv1tO&)OLZ zuc|>PvzB_JQ^^I?{!nSq;cuzX@=z1!PQyaX#jpMlXK<>{4ht3a`HqHz8VgX&zNY$H zrIW|eMPQZEE9SySe@JyAA6?hehbH197oqt>90u;$Ayw4O(wQ|M&c#SB8uEu$c7Wwx zT0K`tAF2r^6Y-I&!ums-!84yb`luf5(r{5rxv>ozbKbE(G#adbwp3^hnoTT?&ODWd z_RMu2Y@69(o)V}sJ?Hr5P7ifZKj)llJ9ln$)^ULb^UakW%7*N)jvL3<@XpjukY~>H z;5eD*9Q1E3U`Vtbfs#+dN3n1IG?VA{^BW?ayj*eUkRr?!K~_mb;5J2gJ_ zhjyOfL|o;WcO64mwU2%(L z9JM=g-f&h+&9R;D*fZyQa3DrYh1U571866zy<6IWY7;S(XI}U*4Ao>M>w$Bxs)2J2 zGue)bmXxD2)c?0n{((cA|3r-Bn@>KJC)x3(7M3jM;UCXD@)JuWHXGnxurv)1C7$`? z1d9EKteZ^*zNFLN(hXof?eJyaqcxp_u-Oj|N9?b+SfipogHp* zM9sPX9$Q6Mn|5r1i`z;v;4P+=i&KB?du2#f9IxMZ;iz<6<$uqPnqq9{t(M*QtR!A` z^_IsaxZ$4_bXC#KhON1ejAY)+u1(gy8NvSvr1= 7.4 when preloading is desired + +use Symfony\Component\DependencyInjection\Dumper\Preloader; + +if (in_array(PHP_SAPI, ['cli', 'phpdbg'], true)) { + return; +} + +require dirname(__DIR__, 3).'/vendor/autoload.php'; +(require __DIR__.'/App_KernelDevDebugContainer.php')->set(\ContainerXl1iA5v\App_KernelDevDebugContainer::class, null); +require __DIR__.'/ContainerXl1iA5v/EntityManager_51e8656.php'; +require __DIR__.'/ContainerXl1iA5v/getWebpackEncore_TagRendererService.php'; +require __DIR__.'/ContainerXl1iA5v/getWebpackEncore_ExceptionListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getWebpackEncore_EntrypointLookupDefaultService.php'; +require __DIR__.'/ContainerXl1iA5v/getWebProfiler_Controller_RouterService.php'; +require __DIR__.'/ContainerXl1iA5v/getWebProfiler_Controller_ProfilerService.php'; +require __DIR__.'/ContainerXl1iA5v/getWebProfiler_Controller_ExceptionPanelService.php'; +require __DIR__.'/ContainerXl1iA5v/getValidator_WhenService.php'; +require __DIR__.'/ContainerXl1iA5v/getValidator_NotCompromisedPasswordService.php'; +require __DIR__.'/ContainerXl1iA5v/getValidator_ExpressionLanguageService.php'; +require __DIR__.'/ContainerXl1iA5v/getValidator_ExpressionService.php'; +require __DIR__.'/ContainerXl1iA5v/getValidator_EmailService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Runtime_SecurityCsrfService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Runtime_MarkdownService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Runtime_HttpkernelService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Mailer_MessageListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Form_RendererService.php'; +require __DIR__.'/ContainerXl1iA5v/getTwig_Form_EngineService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_YmlService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_XliffService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_ResService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_QtService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_PoService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_PhpService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_MoService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_JsonService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_IniService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_DatService.php'; +require __DIR__.'/ContainerXl1iA5v/getTranslation_Loader_CsvService.php'; +require __DIR__.'/ContainerXl1iA5v/getSession_FactoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getServicesResetterService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Validator_UserPasswordService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_UserPasswordHasherService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_User_Provider_Concrete_DatabaseUsersService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_PasswordHasherFactoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Logout_Listener_Default_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Logout_Listener_CsrfTokenClearingService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_UserProviderService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_UserChecker_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_Session_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_RememberMe_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_PasswordMigratingService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_Main_UserProviderService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_CsrfProtectionService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_CheckRememberMeConditions_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Listener_CheckAuthenticatorCredentialsService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_HttpUtilsService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Firewall_Map_Context_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Firewall_Map_Context_DevService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_ChannelListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Authenticator_RememberMeHandler_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Authenticator_RememberMe_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_Authenticator_FormLogin_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_AuthenticationUtilsService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_AccessMapService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurity_AccessListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecrets_VaultService.php'; +require __DIR__.'/ContainerXl1iA5v/getRouting_LoaderService.php'; +require __DIR__.'/ContainerXl1iA5v/getPropertyAccessorService.php'; +require __DIR__.'/ContainerXl1iA5v/getMonolog_Logger_MailerService.php'; +require __DIR__.'/ContainerXl1iA5v/getMonolog_LoggerService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_TransportsService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_TransportFactory_SmtpService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_TransportFactory_SendmailService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_TransportFactory_NullService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_TransportFactory_NativeService.php'; +require __DIR__.'/ContainerXl1iA5v/getMailer_MailerService.php'; +require __DIR__.'/ContainerXl1iA5v/getHtmlSanitizer_Sanitizer_DefaultService.php'; +require __DIR__.'/ContainerXl1iA5v/getFragment_Renderer_InlineService.php'; +require __DIR__.'/ContainerXl1iA5v/getFragment_Renderer_HincludeService.php'; +require __DIR__.'/ContainerXl1iA5v/getFragment_Renderer_EsiService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeGuesser_ValidatorService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeGuesser_DoctrineService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Upload_ValidatorService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Password_PasswordHasherService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_ValidatorService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_TransformationFailureHandlingService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_PasswordHasherService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_HttpFoundationService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_HtmlSanitizerService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_Form_DataCollectorService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_TypeExtension_CsrfService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Type_FormService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Type_FileService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Type_EntityService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Type_ColorService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Type_ChoiceService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_ServerParamsService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_RegistryService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_Listener_PasswordHasherService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_FactoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getForm_ChoiceListFactory_CachedService.php'; +require __DIR__.'/ContainerXl1iA5v/getErrorHandler_ErrorRenderer_HtmlService.php'; +require __DIR__.'/ContainerXl1iA5v/getErrorControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_UuidGeneratorService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_UlidGeneratorService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_Orm_Validator_UniqueService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_Orm_Listeners_DoctrineTokenProviderSchemaSubscriberService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_Orm_Listeners_DoctrineDbalCacheAdapterSchemaSubscriberService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_Orm_DefaultListeners_AttachEntityListenersService.php'; +require __DIR__.'/ContainerXl1iA5v/getDoctrine_Orm_DefaultEntityManager_PropertyInfoExtractorService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_Voter_VoteListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_Voter_Security_Access_RoleHierarchyVoterService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_Voter_Security_Access_ExpressionVoterService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_Voter_Security_Access_AuthenticatedVoterService.php'; +require __DIR__.'/ContainerXl1iA5v/getPostVoterService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_UserValueResolverService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Security_Firewall_Authenticator_MainService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_FileLinkFormatter_UrlFormatService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_Doctrine_Orm_EntityValueResolverService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_VariadicService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_SessionService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_ServiceService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_RequestAttributeService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_RequestService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_NotTaggedControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_DefaultService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_DatetimeService.php'; +require __DIR__.'/ContainerXl1iA5v/getDebug_ArgumentResolver_BackedEnumResolverService.php'; +require __DIR__.'/ContainerXl1iA5v/getDataCollector_Request_SessionCollectorService.php'; +require __DIR__.'/ContainerXl1iA5v/getController_TemplateAttributeListenerService.php'; +require __DIR__.'/ContainerXl1iA5v/getContainer_GetenvService.php'; +require __DIR__.'/ContainerXl1iA5v/getContainer_GetRoutingConditionServiceService.php'; +require __DIR__.'/ContainerXl1iA5v/getContainer_EnvVarProcessorsLocatorService.php'; +require __DIR__.'/ContainerXl1iA5v/getContainer_EnvVarProcessorService.php'; +require __DIR__.'/ContainerXl1iA5v/getCache_SystemClearerService.php'; +require __DIR__.'/ContainerXl1iA5v/getCache_GlobalClearerService.php'; +require __DIR__.'/ContainerXl1iA5v/getCache_AppClearerService.php'; +require __DIR__.'/ContainerXl1iA5v/getTemplateControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getRedirectControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getProfilerControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getUserRepositoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getTagRepositoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getPostRepositoryService.php'; +require __DIR__.'/ContainerXl1iA5v/getUserTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getTagsInputTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getDateTimePickerTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getChangePasswordTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getPostTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getCommentTypeService.php'; +require __DIR__.'/ContainerXl1iA5v/getCommentNotificationSubscriberService.php'; +require __DIR__.'/ContainerXl1iA5v/getCheckRequirementsSubscriberService.php'; +require __DIR__.'/ContainerXl1iA5v/getUserControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getSecurityControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/getBlogController2Service.php'; +require __DIR__.'/ContainerXl1iA5v/getBlogControllerService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_Y4Zrx_Service.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_VQH8NxCService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_SgTy1ZService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_RvMNZGhService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_CkGzNSRService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_Y36a2hSService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_PYF7PhYService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_OfDrtWWService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_J7n8HxcService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_Ge47UTUService.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_F1lnlr1Service.php'; +require __DIR__.'/ContainerXl1iA5v/get_ServiceLocator_9doj5sCService.php'; +require __DIR__.'/ContainerXl1iA5v/get_Security_RequestMatcher_KLbKLHaService.php'; + +$classes = []; +$classes[] = 'Symfony\Bundle\FrameworkBundle\FrameworkBundle'; +$classes[] = 'Symfony\Bundle\SecurityBundle\SecurityBundle'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\DoctrineBundle'; +$classes[] = 'Symfony\Bundle\MonologBundle\MonologBundle'; +$classes[] = 'Symfony\Bundle\TwigBundle\TwigBundle'; +$classes[] = 'Symfony\Bundle\DebugBundle\DebugBundle'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\WebProfilerBundle'; +$classes[] = 'Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle'; +$classes[] = 'Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle'; +$classes[] = 'Symfony\WebpackEncoreBundle\WebpackEncoreBundle'; +$classes[] = 'Symfony\Bundle\MakerBundle\MakerBundle'; +$classes[] = 'Twig\Extra\TwigExtraBundle\TwigExtraBundle'; +$classes[] = 'Symfony\Component\HttpKernel\Profiler\Profiler'; +$classes[] = 'Symfony\Component\HttpKernel\Profiler\FileProfilerStorage'; +$classes[] = 'Symfony\Bridge\Monolog\Logger'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\TimeDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\MemoryDataCollector'; +$classes[] = 'Symfony\Component\Validator\DataCollector\ValidatorDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\AjaxDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\ExceptionDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\EventDataCollector'; +$classes[] = 'Symfony\Component\Cache\DataCollector\CacheDataCollector'; +$classes[] = 'Symfony\Component\Translation\DataCollector\TranslationDataCollector'; +$classes[] = 'Symfony\Bundle\SecurityBundle\DataCollector\SecurityDataCollector'; +$classes[] = 'Symfony\Bridge\Twig\DataCollector\TwigDataCollector'; +$classes[] = 'Symfony\Component\HttpClient\DataCollector\HttpClientDataCollector'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector'; +$classes[] = 'Symfony\Component\Mailer\DataCollector\MessageDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector'; +$classes[] = 'Symfony\Component\HttpClient\TraceableHttpClient'; +$classes[] = 'Symfony\Contracts\HttpClient\HttpClientInterface'; +$classes[] = 'Symfony\Component\HttpClient\HttpClient'; +$classes[] = 'Symfony\Component\HttpFoundation\ChainRequestMatcher'; +$classes[] = 'Symfony\Component\HttpFoundation\RequestMatcher\PathRequestMatcher'; +$classes[] = 'Symfony\Component\DependencyInjection\ServiceLocator'; +$classes[] = 'App\Controller\Admin\BlogController'; +$classes[] = 'App\Controller\BlogController'; +$classes[] = 'App\Controller\SecurityController'; +$classes[] = 'App\Controller\UserController'; +$classes[] = 'App\EventSubscriber\CheckRequirementsSubscriber'; +$classes[] = 'App\EventSubscriber\CommentNotificationSubscriber'; +$classes[] = 'App\EventSubscriber\ControllerSubscriber'; +$classes[] = 'App\EventSubscriber\RedirectToPreferredLocaleSubscriber'; +$classes[] = 'App\Form\CommentType'; +$classes[] = 'App\Form\PostType'; +$classes[] = 'App\Form\Type\ChangePasswordType'; +$classes[] = 'App\Form\Type\DateTimePickerType'; +$classes[] = 'App\Utils\MomentFormatConverter'; +$classes[] = 'App\Form\Type\TagsInputType'; +$classes[] = 'App\Form\UserType'; +$classes[] = 'App\Repository\PostRepository'; +$classes[] = 'App\Repository\TagRepository'; +$classes[] = 'App\Repository\UserRepository'; +$classes[] = 'App\Twig\SourceCodeExtension'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Controller\ProfilerController'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Controller\TemplateController'; +$classes[] = 'Symfony\WebpackEncoreBundle\EventListener\ResetAssetsEventListener'; +$classes[] = 'Symfony\Component\Cache\Adapter\PhpArrayAdapter'; +$classes[] = 'Doctrine\Common\Annotations\PsrCachedReader'; +$classes[] = 'Doctrine\Common\Annotations\AnnotationReader'; +$classes[] = 'Doctrine\Common\Annotations\AnnotationRegistry'; +$classes[] = 'Symfony\Component\Asset\Packages'; +$classes[] = 'Symfony\Component\Asset\PathPackage'; +$classes[] = 'Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy'; +$classes[] = 'Symfony\Component\Asset\Context\RequestStackContext'; +$classes[] = 'Symfony\Component\Cache\Adapter\TraceableAdapter'; +$classes[] = 'Symfony\Component\Cache\Adapter\AdapterInterface'; +$classes[] = 'Symfony\Component\Cache\Adapter\AbstractAdapter'; +$classes[] = 'Symfony\Component\Cache\Adapter\FilesystemAdapter'; +$classes[] = 'Symfony\Component\Cache\Marshaller\DefaultMarshaller'; +$classes[] = 'Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer'; +$classes[] = 'Symfony\Component\Cache\Adapter\ArrayAdapter'; +$classes[] = 'Symfony\Component\Config\Resource\SelfCheckingResourceChecker'; +$classes[] = 'Symfony\Component\Config\ResourceCheckerConfigCacheFactory'; +$classes[] = 'Symfony\Component\DependencyInjection\EnvVarProcessor'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\CacheAttributeListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener'; +$classes[] = 'Symfony\Component\ExpressionLanguage\ExpressionLanguage'; +$classes[] = 'Symfony\Bridge\Twig\EventListener\TemplateAttributeListener'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\DumpDataCollector'; +$classes[] = 'Symfony\Component\Form\Extension\DataCollector\FormDataCollector'; +$classes[] = 'Symfony\Component\Form\Extension\DataCollector\FormDataExtractor'; +$classes[] = 'Symfony\Component\HttpKernel\DataCollector\RequestDataCollector'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\BackedEnumValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\DateTimeValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\NotTaggedControllerValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\SessionValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\DebugHandlersListener'; +$classes[] = 'Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Debug\FileLinkFormatter'; +$classes[] = 'Symfony\Bridge\Monolog\Processor\DebugProcessor'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\TraceableAccessDecisionManager'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\AccessDecisionManager'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\Strategy\AffirmativeStrategy'; +$classes[] = 'Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener'; +$classes[] = 'Symfony\Component\Security\Http\Authenticator\Debug\TraceableAuthenticatorManagerListener'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\AuthenticatorManagerListener'; +$classes[] = 'Symfony\Component\Security\Http\Authentication\AuthenticatorManager'; +$classes[] = 'Symfony\Component\Security\Http\Controller\UserValueResolver'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\Voter\TraceableVoter'; +$classes[] = 'App\Security\PostVoter'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\ExpressionLanguage'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter'; +$classes[] = 'Symfony\Bundle\SecurityBundle\EventListener\VoteListener'; +$classes[] = 'Symfony\Component\Stopwatch\Stopwatch'; +$classes[] = 'Symfony\Component\Validator\Validator\TraceableValidator'; +$classes[] = 'Symfony\Component\Validator\Validator\ValidatorInterface'; +$classes[] = 'Symfony\Component\DependencyInjection\Config\ContainerParametersResourceChecker'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Registry'; +$classes[] = 'Doctrine\DBAL\Connection'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\ConnectionFactory'; +$classes[] = 'Doctrine\DBAL\Configuration'; +$classes[] = 'Doctrine\DBAL\Logging\Middleware'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Middleware\DebugMiddleware'; +$classes[] = 'Symfony\Bridge\Doctrine\ContainerAwareEventManager'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Middleware\BacktraceDebugDataHolder'; +$classes[] = 'Doctrine\ORM\Mapping\Driver\AttributeDriver'; +$classes[] = 'Doctrine\ORM\Proxy\Autoloader'; +$classes[] = 'Doctrine\ORM\EntityManager'; +$classes[] = 'Doctrine\ORM\Configuration'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Mapping\MappingDriver'; +$classes[] = 'Doctrine\Persistence\Mapping\Driver\MappingDriverChain'; +$classes[] = 'Doctrine\ORM\Mapping\UnderscoreNamingStrategy'; +$classes[] = 'Doctrine\ORM\Mapping\DefaultQuoteStrategy'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Mapping\ContainerEntityListenerResolver'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Repository\ContainerRepositoryFactory'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\ManagerConfigurator'; +$classes[] = 'Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor'; +$classes[] = 'Doctrine\ORM\Tools\AttachEntityListenersListener'; +$classes[] = 'Symfony\Bridge\Doctrine\SchemaListener\DoctrineDbalCacheAdapterSchemaSubscriber'; +$classes[] = 'Symfony\Bridge\Doctrine\SchemaListener\RememberMeTokenProviderDoctrineSchemaSubscriber'; +$classes[] = 'Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator'; +$classes[] = 'Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator'; +$classes[] = 'Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ErrorController'; +$classes[] = 'Symfony\Bridge\Twig\ErrorRenderer\TwigErrorRenderer'; +$classes[] = 'Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer'; +$classes[] = 'Symfony\Component\HttpKernel\HttpCache\Esi'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\SurrogateListener'; +$classes[] = 'Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher'; +$classes[] = 'Symfony\Component\EventDispatcher\EventDispatcher'; +$classes[] = 'Monolog\Handler\NullHandler'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\ErrorListener'; +$classes[] = 'Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator'; +$classes[] = 'Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator'; +$classes[] = 'Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory'; +$classes[] = 'Symfony\Component\Form\FormFactory'; +$classes[] = 'Symfony\Component\Form\Extension\PasswordHasher\EventListener\PasswordHasherListener'; +$classes[] = 'Symfony\Component\Form\FormRegistry'; +$classes[] = 'Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension'; +$classes[] = 'Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy'; +$classes[] = 'Symfony\Component\Form\ResolvedFormTypeFactory'; +$classes[] = 'Symfony\Component\Form\Util\ServerParams'; +$classes[] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType'; +$classes[] = 'Symfony\Component\Form\Extension\Core\Type\ColorType'; +$classes[] = 'Symfony\Bridge\Doctrine\Form\Type\EntityType'; +$classes[] = 'Symfony\Component\Form\Extension\Core\Type\FileType'; +$classes[] = 'Symfony\Component\Form\Extension\Core\Type\FormType'; +$classes[] = 'Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension'; +$classes[] = 'Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension'; +$classes[] = 'Symfony\Component\Form\Extension\HtmlSanitizer\Type\TextTypeHtmlSanitizerExtension'; +$classes[] = 'Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension'; +$classes[] = 'Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler'; +$classes[] = 'Symfony\Component\Form\Extension\PasswordHasher\Type\FormTypePasswordHasherExtension'; +$classes[] = 'Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension'; +$classes[] = 'Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension'; +$classes[] = 'Symfony\Component\Form\Extension\PasswordHasher\Type\PasswordTypePasswordHasherExtension'; +$classes[] = 'Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension'; +$classes[] = 'Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension'; +$classes[] = 'Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension'; +$classes[] = 'Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser'; +$classes[] = 'Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\FragmentListener'; +$classes[] = 'Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer'; +$classes[] = 'Symfony\Component\HttpKernel\Fragment\HIncludeFragmentRenderer'; +$classes[] = 'Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer'; +$classes[] = 'Symfony\Component\HtmlSanitizer\HtmlSanitizer'; +$classes[] = 'Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig'; +$classes[] = 'Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner'; +$classes[] = 'Symfony\Component\Runtime\Runner\Symfony\ResponseRunner'; +$classes[] = 'Symfony\Component\Runtime\SymfonyRuntime'; +$classes[] = 'Symfony\Component\HttpKernel\HttpKernel'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\TraceableControllerResolver'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\TraceableArgumentResolver'; +$classes[] = 'Symfony\Component\HttpKernel\Controller\ArgumentResolver'; +$classes[] = 'Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory'; +$classes[] = 'App\Kernel'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\LocaleAwareListener'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\LocaleListener'; +$classes[] = 'Symfony\Component\Mailer\EventListener\EnvelopeListener'; +$classes[] = 'Symfony\Component\Mailer\Mailer'; +$classes[] = 'Symfony\Component\Mailer\EventListener\MessageLoggerListener'; +$classes[] = 'Symfony\Component\Mailer\EventListener\MessengerTransportListener'; +$classes[] = 'Symfony\Component\Mailer\Transport\NativeTransportFactory'; +$classes[] = 'Symfony\Component\Mailer\Transport\NullTransportFactory'; +$classes[] = 'Symfony\Component\Mailer\Transport\SendmailTransportFactory'; +$classes[] = 'Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory'; +$classes[] = 'Symfony\Component\Mailer\Transport\Transports'; +$classes[] = 'Symfony\Component\Mailer\Transport'; +$classes[] = 'Symfony\Bridge\Monolog\Handler\ConsoleHandler'; +$classes[] = 'Monolog\Handler\StreamHandler'; +$classes[] = 'Monolog\Processor\PsrLogMessageProcessor'; +$classes[] = 'Symfony\Component\DependencyInjection\ParameterBag\ContainerBag'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\ProfilerListener'; +$classes[] = 'Symfony\Component\PropertyAccess\PropertyAccessor'; +$classes[] = 'Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor'; +$classes[] = 'Symfony\Component\HttpFoundation\RequestStack'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\ResponseListener'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Routing\Router'; +$classes[] = 'Symfony\Component\Routing\Matcher\ExpressionLanguageProvider'; +$classes[] = 'Symfony\Component\Routing\RequestContext'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\RouterListener'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader'; +$classes[] = 'Symfony\Component\Config\Loader\LoaderResolver'; +$classes[] = 'Symfony\Component\Routing\Loader\XmlFileLoader'; +$classes[] = 'Symfony\Component\HttpKernel\Config\FileLocator'; +$classes[] = 'Symfony\Component\Routing\Loader\YamlFileLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\PhpFileLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\GlobFileLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\DirectoryLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\ContainerLoader'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Routing\AnnotatedRouteControllerLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\AnnotationDirectoryLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\AnnotationFileLoader'; +$classes[] = 'Symfony\Component\Routing\Loader\Psr4DirectoryLoader'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Secrets\SodiumVault'; +$classes[] = 'Symfony\Component\String\LazyString'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\AccessListener'; +$classes[] = 'Symfony\Component\Security\Http\AccessMap'; +$classes[] = 'Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolver'; +$classes[] = 'Symfony\Component\Security\Http\Authentication\AuthenticationUtils'; +$classes[] = 'Symfony\Component\Security\Http\Authenticator\FormLoginAuthenticator'; +$classes[] = 'Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler'; +$classes[] = 'Symfony\Component\Security\Http\Authentication\DefaultAuthenticationFailureHandler'; +$classes[] = 'Symfony\Component\Security\Http\Authenticator\RememberMeAuthenticator'; +$classes[] = 'Symfony\Component\Security\Http\RememberMe\SignatureRememberMeHandler'; +$classes[] = 'Symfony\Component\Security\Core\Signature\SignatureHasher'; +$classes[] = 'Symfony\Component\Security\Core\Authorization\AuthorizationChecker'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\ChannelListener'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\ContextListener'; +$classes[] = 'Symfony\Component\Security\Csrf\CsrfTokenManager'; +$classes[] = 'Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator'; +$classes[] = 'Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage'; +$classes[] = 'Symfony\Bundle\SecurityBundle\Security\FirewallMap'; +$classes[] = 'Symfony\Bundle\SecurityBundle\Security\FirewallContext'; +$classes[] = 'Symfony\Bundle\SecurityBundle\Security\FirewallConfig'; +$classes[] = 'Symfony\Bundle\SecurityBundle\Security\LazyFirewallContext'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\ExceptionListener'; +$classes[] = 'Symfony\Component\Security\Http\Firewall\LogoutListener'; +$classes[] = 'Symfony\Component\Security\Http\HttpUtils'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\CheckCredentialsListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\CheckRememberMeConditionsListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\CsrfProtectionListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\UserProviderListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\PasswordMigratingListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\RememberMeListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\SessionStrategyListener'; +$classes[] = 'Symfony\Component\Security\Http\Session\SessionAuthenticationStrategy'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\UserCheckerListener'; +$classes[] = 'Symfony\Component\Security\Core\User\InMemoryUserChecker'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\CsrfTokenClearingLogoutListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\DefaultLogoutListener'; +$classes[] = 'Symfony\Component\Security\Http\EventListener\SessionLogoutListener'; +$classes[] = 'Symfony\Component\Security\Http\Logout\LogoutUrlGenerator'; +$classes[] = 'Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactory'; +$classes[] = 'Symfony\Component\Security\Http\RememberMe\ResponseListener'; +$classes[] = 'Symfony\Component\Security\Core\Role\RoleHierarchy'; +$classes[] = 'Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage'; +$classes[] = 'Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage'; +$classes[] = 'Symfony\Bridge\Doctrine\Security\User\EntityUserProvider'; +$classes[] = 'Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher'; +$classes[] = 'Symfony\Component\Security\Core\Validator\Constraints\UserPasswordValidator'; +$classes[] = 'Symfony\Component\DependencyInjection\ContainerInterface'; +$classes[] = 'Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter'; +$classes[] = 'Symfony\Component\HttpFoundation\Session\SessionFactory'; +$classes[] = 'Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory'; +$classes[] = 'Symfony\Component\HttpFoundation\Session\Storage\MetadataBag'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\SessionListener'; +$classes[] = 'Symfony\Component\String\Slugger\AsciiSlugger'; +$classes[] = 'Symfony\Component\Translation\Loader\CsvFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\IcuDatFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\IniFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\JsonFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\MoFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\PhpFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\PoFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\QtFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\IcuResFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\XliffFileLoader'; +$classes[] = 'Symfony\Component\Translation\Loader\YamlFileLoader'; +$classes[] = 'Symfony\Component\Translation\DataCollectorTranslator'; +$classes[] = 'Symfony\Bundle\FrameworkBundle\Translation\Translator'; +$classes[] = 'Symfony\Component\Translation\Formatter\MessageFormatter'; +$classes[] = 'Symfony\Component\Translation\IdentityTranslator'; +$classes[] = 'Twig\Cache\FilesystemCache'; +$classes[] = 'Twig\Extension\CoreExtension'; +$classes[] = 'Twig\Extension\EscaperExtension'; +$classes[] = 'Twig\Extension\OptimizerExtension'; +$classes[] = 'Twig\Extension\StagingExtension'; +$classes[] = 'Twig\ExtensionSet'; +$classes[] = 'Twig\Template'; +$classes[] = 'Twig\TemplateWrapper'; +$classes[] = 'Twig\Environment'; +$classes[] = 'Twig\Loader\FilesystemLoader'; +$classes[] = 'Symfony\Bridge\Twig\Extension\CsrfExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\LogoutUrlExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\SecurityExtension'; +$classes[] = 'Symfony\Component\Security\Http\Impersonate\ImpersonateUrlGenerator'; +$classes[] = 'Symfony\Bridge\Twig\Extension\ProfilerExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\TranslationExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\AssetExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\CodeExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\RoutingExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\YamlExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\StopwatchExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\ExpressionExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\HtmlSanitizerExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\HttpKernelExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\HttpFoundationExtension'; +$classes[] = 'Symfony\Component\HttpFoundation\UrlHelper'; +$classes[] = 'Symfony\Bridge\Twig\Extension\FormExtension'; +$classes[] = 'Symfony\Bridge\Twig\Extension\DumpExtension'; +$classes[] = 'App\Twig\AppExtension'; +$classes[] = 'Doctrine\Bundle\DoctrineBundle\Twig\DoctrineExtension'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Twig\WebProfilerExtension'; +$classes[] = 'Symfony\Component\VarDumper\Dumper\HtmlDumper'; +$classes[] = 'Symfony\WebpackEncoreBundle\Twig\EntryFilesTwigExtension'; +$classes[] = 'Symfony\WebpackEncoreBundle\Twig\StimulusTwigExtension'; +$classes[] = 'Twig\Extra\Markdown\MarkdownExtension'; +$classes[] = 'Twig\Extra\Intl\IntlExtension'; +$classes[] = 'Symfony\Bridge\Twig\AppVariable'; +$classes[] = 'Twig\RuntimeLoader\ContainerRuntimeLoader'; +$classes[] = 'Twig\Extra\TwigExtraBundle\MissingExtensionSuggestor'; +$classes[] = 'Symfony\Bundle\TwigBundle\DependencyInjection\Configurator\EnvironmentConfigurator'; +$classes[] = 'Symfony\Bridge\Twig\Form\TwigRendererEngine'; +$classes[] = 'Symfony\Component\Form\FormRenderer'; +$classes[] = 'Symfony\Component\Mailer\EventListener\MessageListener'; +$classes[] = 'Symfony\Bridge\Twig\Mime\BodyRenderer'; +$classes[] = 'Twig\Profiler\Profile'; +$classes[] = 'Symfony\Bridge\Twig\Extension\HttpKernelRuntime'; +$classes[] = 'Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler'; +$classes[] = 'Symfony\Component\HttpKernel\Fragment\FragmentUriGenerator'; +$classes[] = 'Twig\Extra\Markdown\MarkdownRuntime'; +$classes[] = 'Twig\Extra\Markdown\LeagueMarkdown'; +$classes[] = 'League\CommonMark\CommonMarkConverter'; +$classes[] = 'Twig\Extra\TwigExtraBundle\LeagueCommonMarkConverterFactory'; +$classes[] = 'Symfony\Bridge\Twig\Extension\CsrfRuntime'; +$classes[] = 'Symfony\Component\HttpKernel\UriSigner'; +$classes[] = 'Symfony\Component\HttpKernel\EventListener\ValidateRequestListener'; +$classes[] = 'Symfony\Component\Validator\ValidatorBuilder'; +$classes[] = 'Symfony\Component\Validator\Validation'; +$classes[] = 'Symfony\Component\Validator\ContainerConstraintValidatorFactory'; +$classes[] = 'Symfony\Bridge\Doctrine\Validator\DoctrineInitializer'; +$classes[] = 'Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader'; +$classes[] = 'Symfony\Component\PropertyInfo\PropertyInfoExtractor'; +$classes[] = 'Symfony\Bridge\Doctrine\Validator\DoctrineLoader'; +$classes[] = 'Symfony\Component\Validator\Constraints\EmailValidator'; +$classes[] = 'Symfony\Component\Validator\Constraints\ExpressionValidator'; +$classes[] = 'Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator'; +$classes[] = 'Symfony\Component\Validator\Constraints\WhenValidator'; +$classes[] = 'Symfony\Component\VarDumper\Cloner\VarCloner'; +$classes[] = 'Symfony\Component\VarDumper\Server\Connection'; +$classes[] = 'Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider'; +$classes[] = 'Symfony\Component\VarDumper\Dumper\ContextProvider\RequestContextProvider'; +$classes[] = 'Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Controller\ExceptionPanelController'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Controller\ProfilerController'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Controller\RouterController'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Csp\ContentSecurityPolicyHandler'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\Csp\NonceGenerator'; +$classes[] = 'Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener'; +$classes[] = 'Symfony\WebpackEncoreBundle\Asset\EntrypointLookup'; +$classes[] = 'Symfony\WebpackEncoreBundle\Asset\EntrypointLookupCollection'; +$classes[] = 'Symfony\WebpackEncoreBundle\EventListener\ExceptionListener'; +$classes[] = 'Symfony\WebpackEncoreBundle\Asset\TagRenderer'; + +$preloaded = Preloader::preload($classes); +require_once __DIR__.'/twig/66/665ba0912dbfc0f7b571a8932655f2cc.php'; +require_once __DIR__.'/twig/8c/8ced0baefde2237e4554815e0c659270.php'; +require_once __DIR__.'/twig/bb/bb5ccbe7566788c9631e076d85892d2e.php'; +require_once __DIR__.'/twig/9a/9a6512b5212dfdcf95ba2e86e3fc36af.php'; +require_once __DIR__.'/twig/89/8900b139f13b587ee73161b408648bf0.php'; +require_once __DIR__.'/twig/14/14aeef09073838e67636facf63e2d058.php'; +require_once __DIR__.'/twig/9e/9e6bd88c03700c41b31df45752b245a3.php'; +require_once __DIR__.'/twig/1a/1a59fd4af5e1c0522b441bd8c0cd093d.php'; +require_once __DIR__.'/twig/70/70c0e5ad826bfabfd9d2cc56d43a2eca.php'; +require_once __DIR__.'/twig/76/76bd95007927d2711a4fccd59d33940c.php'; +require_once __DIR__.'/twig/1d/1d089d0ff6be88ee273f364476b442a3.php'; +require_once __DIR__.'/twig/13/13d54bd3169ea43545c80fa180b15df2.php'; +require_once __DIR__.'/twig/e5/e5932924e3d8fa42e40a0165c2a0a185.php'; +require_once __DIR__.'/twig/e5/e5ab9860a53b0e3f09eb65425d0c7dd1.php'; +require_once __DIR__.'/twig/7e/7ebb928ea6ae5486fd8981e7622a8b7a.php'; +require_once __DIR__.'/twig/d8/d8112bd828ba727e7b482289df9ecbb2.php'; +require_once __DIR__.'/twig/19/199b7a35c7e3f6d06c1fa7a59f0f8712.php'; +require_once __DIR__.'/twig/7c/7cc60781fa6526be9a3e8d2631123a6f.php'; +require_once __DIR__.'/twig/b7/b74814d6939382a33d5f8595cf5980d6.php'; +require_once __DIR__.'/twig/fe/fedb0c95b84b9343db5ce2a81c4bb1c2.php'; +require_once __DIR__.'/twig/1b/1b461aded3dfac24ae1c0782cf36ce2a.php'; +require_once __DIR__.'/twig/2b/2b6e16c02a7ab191d025e69f71e11b6d.php'; +require_once __DIR__.'/twig/4b/4b29b0c5c808bf78b1fe2f34b2597935.php'; +require_once __DIR__.'/twig/d3/d3c1259423bb68505fee06ae5af9b3be.php'; +require_once __DIR__.'/twig/67/67ad1239f00c71dc9c2b954f8ab9f10a.php'; +require_once __DIR__.'/twig/e1/e16d8148fb82e617674cdbdc337c2a61.php'; +require_once __DIR__.'/twig/60/6075c11b8ac6811173fc7e3ab8bd53e1.php'; +require_once __DIR__.'/twig/29/29a9b7471af79aa46f5f5fe70e794032.php'; +require_once __DIR__.'/twig/c3/c3c6401054117b9e78e58ecb05750595.php'; +require_once __DIR__.'/twig/dc/dc08fd817b961782230d4792a6c4ad8f.php'; +require_once __DIR__.'/twig/f2/f27d62c99d9be5874346448feccb71f9.php'; +require_once __DIR__.'/twig/ab/ab8a9af4b71de96781e69a9949811173.php'; +require_once __DIR__.'/twig/8f/8f97fc8c593a2285dbc08207bb6482b5.php'; +require_once __DIR__.'/twig/fb/fb8b84d45b43b82ed8e2ed530292abe6.php'; +require_once __DIR__.'/twig/95/95d6a6e7e9747b5e46d21feabca0d3d5.php'; +require_once __DIR__.'/twig/3d/3ddcd1d2eec9879ce62557f014b11637.php'; +require_once __DIR__.'/twig/08/08a8ffc95eefb41f9db4506ee1fcff59.php'; +require_once __DIR__.'/twig/44/4420fa54b79f8d0058bba6f6ef2f6603.php'; +require_once __DIR__.'/twig/c6/c6e0314f38dbc3cf4365e5a22768de87.php'; +require_once __DIR__.'/twig/c1/c1f2fb235a950bd0336355966bef31f7.php'; +require_once __DIR__.'/twig/14/141c365ea6a3de77074c849bb0f6caeb.php'; +require_once __DIR__.'/twig/66/663b38edce4ba4ccd20fda3f9a37e2e4.php'; +require_once __DIR__.'/twig/df/df9bbc219a547912a43cf7c131e95410.php'; +require_once __DIR__.'/twig/b4/b44a52a49e25df011744c2c41316cfa4.php'; +require_once __DIR__.'/twig/50/50826456531e4b68770d227997547ab9.php'; +require_once __DIR__.'/twig/29/296be7448e04c04ee6555ee6bcca55bb.php'; +require_once __DIR__.'/twig/15/15206d1eb9338590a262a879bf4ac734.php'; +require_once __DIR__.'/twig/77/778932e4720a61d13913048266d03960.php'; +require_once __DIR__.'/twig/92/921aab956917ae115b94ba22e41d71ea.php'; +require_once __DIR__.'/twig/a3/a3ddb5fca9eeee4fd7c2a204f93f2421.php'; +require_once __DIR__.'/twig/8e/8e2a8c0800722bda95ed8329e4c35881.php'; +require_once __DIR__.'/twig/72/725ae3a17f5c26776ea68445ebe2491c.php'; +require_once __DIR__.'/twig/d9/d986e36514c02aece51eaaaf5fc9dd32.php'; +require_once __DIR__.'/twig/a8/a897ae319fae7c566e70f434037afee7.php'; +require_once __DIR__.'/twig/fb/fba439008abcf597731d05c8f878b4c4.php'; +require_once __DIR__.'/twig/5c/5cda452ab8405bbbb65f65abe5bedd3a.php'; +require_once __DIR__.'/twig/c1/c18afb22a1708c939e7418160888faf3.php'; +require_once __DIR__.'/twig/36/36234b5b5e870b5bdf1690336b9972e8.php'; +require_once __DIR__.'/twig/21/21e9b59c6905838aad2dac475341c415.php'; +require_once __DIR__.'/twig/41/41cc59eb912980187c0e26a55918292a.php'; +require_once __DIR__.'/twig/59/59734be8bca74a1d6c2f75be54714a2a.php'; +require_once __DIR__.'/twig/15/15b2dc5dc404857c9083c90973719106.php'; +require_once __DIR__.'/twig/a9/a9a9dd6854f81849b44a8a1492232e24.php'; +require_once __DIR__.'/twig/47/47efb2fb4f3a33e992904ffd6158759d.php'; +require_once __DIR__.'/twig/b5/b57cf7706ea4881ad3480feb0ba28f9c.php'; +require_once __DIR__.'/twig/cb/cb45bde8c10f0bc4389e9c527cfcc879.php'; +require_once __DIR__.'/twig/af/afa8bc5fa41398a5e3dd151fd688017c.php'; +require_once __DIR__.'/twig/48/48c3dd77a6a03361071d48c8ffdacf8b.php'; +require_once __DIR__.'/twig/ff/ff040c7416af66cc072adf597a6e8a3c.php'; +require_once __DIR__.'/twig/7c/7c8ad7c707904382826c468b156e2472.php'; +require_once __DIR__.'/twig/23/23bd3672b1c06f9387fe24672ff1b351.php'; +require_once __DIR__.'/twig/3c/3c351c870dc68002e778eff87ccbbf3d.php'; +require_once __DIR__.'/twig/ad/ad1bfca3c36e699a2832b0a945242dfe.php'; +require_once __DIR__.'/twig/79/7959f1654ed22e5e80e7516f5a1b9f29.php'; +require_once __DIR__.'/twig/52/52cedb02c4810f1d2387f6f07d283e1f.php'; +require_once __DIR__.'/twig/c0/c0f0a9a9107e7516cadbfde75d8a155f.php'; +require_once __DIR__.'/twig/0d/0da7cb828bd4598323bbb5d1526fdb2a.php'; +require_once __DIR__.'/twig/15/15c0c26aa423957ef2c440c8eaabcfd7.php'; +require_once __DIR__.'/twig/7b/7bb1c2e42adcde20e15da09ccf71b743.php'; +require_once __DIR__.'/twig/99/990d9efadf60bfd65f7d315799e29b4d.php'; +require_once __DIR__.'/twig/13/13da71717fa1439f860831e04ccece34.php'; +require_once __DIR__.'/twig/23/23d93b9f93a1c232ac6ead061598b31e.php'; +require_once __DIR__.'/twig/74/7491be78822fbf9362bac747d2875671.php'; +require_once __DIR__.'/twig/62/629cd57dd6b650ff7ce86d936e5641e7.php'; +require_once __DIR__.'/twig/ba/ba9e049225e780f0001e2d3cc3a1961c.php'; +require_once __DIR__.'/twig/69/69ad721df3f613700ac08c0e7011f781.php'; +require_once __DIR__.'/twig/91/91ed8333e9f0c03d40c2fe9709db503f.php'; +require_once __DIR__.'/twig/5e/5e51f7e37fde0845b4178d2602ac71b5.php'; +require_once __DIR__.'/twig/42/42e9756a26b880ba562e01e4a78ad308.php'; +require_once __DIR__.'/twig/cf/cf01b988e477f7158a24c50472c3a311.php'; +require_once __DIR__.'/twig/00/00381e3da30b8c4332e715ca03b84464.php'; +require_once __DIR__.'/twig/6e/6e545a9c4ea611e0954c90b261e4a927.php'; +require_once __DIR__.'/twig/a2/a2e369a914cafad874218df0d2acfe29.php'; +require_once __DIR__.'/twig/92/926293bb390dd338dd296620e6984644.php'; +require_once __DIR__.'/twig/ac/ac2a5a7253e26ec2f0461ebdabcfaa0a.php'; +require_once __DIR__.'/twig/60/6060f5d07980f1ff67ac59caa70b40a4.php'; +require_once __DIR__.'/twig/ad/ad0505656f59e2c941711480a375bea7.php'; +require_once __DIR__.'/twig/b9/b910e6b3277ba049c95a5b02265eab24.php'; +require_once __DIR__.'/twig/03/03959297bdce38f89d2b2710a93c9611.php'; +require_once __DIR__.'/twig/b5/b5261abe544c3ca16fd6d8949fa452f5.php'; +require_once __DIR__.'/twig/ff/ffab8d13742e029b99493bc19b267773.php'; +require_once __DIR__.'/twig/e8/e8557b6a47f2bf49473cd0443a547fd4.php'; +require_once __DIR__.'/twig/e3/e320541a077ab44c0614a880844fa979.php'; +require_once __DIR__.'/twig/12/12a6d1516ca14a026343d383c45162b5.php'; +require_once __DIR__.'/twig/3e/3e11f98d4ea13ba8d254d1a2909de6ac.php'; +require_once __DIR__.'/twig/63/63d5873310fe029021154e53e31c3743.php'; +require_once __DIR__.'/twig/be/be71cdd88b978fc3baed84a6668ec245.php'; +require_once __DIR__.'/twig/3f/3f6d557e306918fd2a2540f6c10a9194.php'; +require_once __DIR__.'/twig/d2/d261693afac7b271272ed1c3cd76bcda.php'; +require_once __DIR__.'/twig/10/108fd84697bc9ba8fb73bf90fcff3179.php'; +require_once __DIR__.'/twig/a0/a024cf89b34be259e1182a90f9902078.php'; +require_once __DIR__.'/twig/66/667493a4c3967c4078d8c0bf3c7af94a.php'; +require_once __DIR__.'/twig/ae/ae3351de1d85df94705cbfee59996f70.php'; +require_once __DIR__.'/twig/1f/1f74ca99a0667c75076f2118cabea585.php'; +require_once __DIR__.'/twig/cb/cb17208e17429fc2976fc637f449eeed.php'; +require_once __DIR__.'/twig/37/3794610900bfc9c30f9d6ad9924132d5.php'; +require_once __DIR__.'/twig/6f/6f5f4a93f58591133ee819f564a126dd.php'; +require_once __DIR__.'/twig/b2/b2b1ebecb1760e7dfe3dc55b06bcc936.php'; +require_once __DIR__.'/twig/c6/c627f5452acdaba554b45c1c34e45b84.php'; +require_once __DIR__.'/twig/59/59011b4914920b83775c13a5ca6ca997.php'; +require_once __DIR__.'/twig/5b/5b9ab672d5067c7d43db6e0493fb0c1a.php'; +require_once __DIR__.'/twig/f6/f6264ae7d15adb2d2fabff3331d4fae6.php'; +require_once __DIR__.'/twig/72/7296f18123827458a45afb51fe36248e.php'; +require_once __DIR__.'/twig/56/5611c87c1ee054eb36438e59485de87b.php'; +require_once __DIR__.'/twig/c6/c691b40012e125ffec964e07c7491ef5.php'; +require_once __DIR__.'/twig/f0/f00bfbd66ed8eb71fe626e30a2aefa52.php'; +require_once __DIR__.'/twig/ae/aeaf0a232039cfdb61d3bc034fe496f8.php'; +require_once __DIR__.'/twig/be/be372da755e463c4a6a083a1e345a632.php'; +require_once __DIR__.'/twig/fa/faf307a4a2e20a2b3e5208c8311928be.php'; +require_once __DIR__.'/twig/b4/b44780c9e69132280641c3204f741df2.php'; +require_once __DIR__.'/twig/1f/1fb1f02a29163986607b63f2ea6e16e4.php'; +require_once __DIR__.'/twig/91/91dfac14e67c8e81ead8658f8d3399f5.php'; +require_once __DIR__.'/twig/6b/6b702eb04e380bfdbe7e0c04618e7bcd.php'; +require_once __DIR__.'/twig/ea/ea442b372ce45780d79825f2c6b04ce0.php'; +require_once __DIR__.'/twig/bf/bfa2190ed7c41a9b8b3e493e96ea98a9.php'; +require_once __DIR__.'/twig/70/70b696762b98ed91a7053ee2394f9d3c.php'; +require_once __DIR__.'/twig/91/91ab9327434923c56610909a17794f8e.php'; +require_once __DIR__.'/twig/a2/a25570883cf5041e94927279e61fbc44.php'; +require_once __DIR__.'/twig/7b/7bb69e6d70a61f7f81c188c2024e4f1a.php'; +require_once __DIR__.'/twig/7b/7b50fd213631df72c80821f856151140.php'; +require_once __DIR__.'/twig/cf/cf6c7fce77fb372817dd0ef5bb307997.php'; +require_once __DIR__.'/twig/4e/4e1a38576949c1d1e3df5c0191a2aa7c.php'; +require_once __DIR__.'/twig/74/74536bc00b9de13596a1deb4aecfbfe9.php'; + +$classes = []; +$classes[] = 'Symfony\\Component\\Routing\\Generator\\CompiledUrlGenerator'; +$classes[] = 'Symfony\\Bundle\\FrameworkBundle\\Routing\\RedirectableCompiledUrlMatcher'; +$classes[] = 'Symfony\\Component\\Validator\\Mapping\\ClassMetadata'; +$classes[] = 'Symfony\\Component\\Form\\Extension\\Validator\\Constraints\\Form'; +$preloaded = Preloader::preload($classes, $preloaded); diff --git a/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml new file mode 100644 index 00000000..6f3c93c8 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml @@ -0,0 +1,8125 @@ + + + + /app/example-symfony-api + dev + %env(default:kernel.environment:APP_RUNTIME_ENV)% + true + /app/example-symfony-api/var/cache/dev + /app/example-symfony-api/var/cache/dev + /app/example-symfony-api/var/log + + Symfony\Bundle\FrameworkBundle\FrameworkBundle + Symfony\Bundle\SecurityBundle\SecurityBundle + Doctrine\Bundle\DoctrineBundle\DoctrineBundle + Symfony\Bundle\MonologBundle\MonologBundle + Symfony\Bundle\TwigBundle\TwigBundle + Symfony\Bundle\DebugBundle\DebugBundle + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle + Symfony\WebpackEncoreBundle\WebpackEncoreBundle + Symfony\Bundle\MakerBundle\MakerBundle + Twig\Extra\TwigExtraBundle\TwigExtraBundle + + + + /app/example-symfony-api/vendor/symfony/framework-bundle + Symfony\Bundle\FrameworkBundle + + + /app/example-symfony-api/vendor/symfony/security-bundle + Symfony\Bundle\SecurityBundle + + + /app/example-symfony-api/vendor/doctrine/doctrine-bundle + Doctrine\Bundle\DoctrineBundle + + + /app/example-symfony-api/vendor/symfony/monolog-bundle + Symfony\Bundle\MonologBundle + + + /app/example-symfony-api/vendor/symfony/twig-bundle + Symfony\Bundle\TwigBundle + + + /app/example-symfony-api/vendor/symfony/debug-bundle + Symfony\Bundle\DebugBundle + + + /app/example-symfony-api/vendor/symfony/web-profiler-bundle + Symfony\Bundle\WebProfilerBundle + + + /app/example-symfony-api/vendor/doctrine/doctrine-migrations-bundle + Doctrine\Bundle\MigrationsBundle + + + /app/example-symfony-api/vendor/doctrine/doctrine-fixtures-bundle + Doctrine\Bundle\FixturesBundle + + + /app/example-symfony-api/vendor/symfony/webpack-encore-bundle/src + Symfony\WebpackEncoreBundle + + + /app/example-symfony-api/vendor/symfony/maker-bundle/src + Symfony\Bundle\MakerBundle + + + /app/example-symfony-api/vendor/twig/extra-bundle + Twig\Extra\TwigExtraBundle + + + UTF-8 + App_KernelDevDebugContainer + en + ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn + anonymous@example.com + + console.command + console.error + console.signal + console.terminate + form.pre_submit + form.submit + form.post_submit + form.pre_set_data + form.post_set_data + kernel.controller_arguments + kernel.controller + kernel.response + kernel.finish_request + kernel.request + kernel.view + kernel.exception + kernel.terminate + security.authentication.success + security.interactive_login + security.switch_user + + null + /_fragment + %env(APP_SECRET)% + false + false + + en + + error_controller + null + null + null + false + /app/example-symfony-api/translations + -1 + /app/example-symfony-api/var/cache/dev/App_KernelDevDebugContainer.xml + localhost + http + + kernel::loadRoutes + /app/example-symfony-api/var/cache/dev + 80 + 443 + _/app/example-symfony-api.App_KernelDevDebugContainer + _sf2_meta + + 0 + auto + true + lax + 1 + + /app/example-symfony-api/var/cache/dev/sessions + 0 + true + _token + /app/example-symfony-api/var/cache/dev/validation.php + validators + false + false + file:/app/example-symfony-api/var/cache/dev/profiler + + + ROLE_USER + + + null + true + migrate + true + + dev + main + + Doctrine\DBAL\Logging\LoggerChain + Doctrine\DBAL\Logging\DebugStack + Symfony\Bridge\Doctrine\Logger\DbalLogger + Doctrine\DBAL\Configuration + Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector + Symfony\Bridge\Doctrine\ContainerAwareEventManager + Doctrine\Bundle\DoctrineBundle\ConnectionFactory + Doctrine\DBAL\Event\Listeners\MysqlSessionInit + Doctrine\DBAL\Event\Listeners\OracleSessionInit + Doctrine\Bundle\DoctrineBundle\Registry + + doctrine.orm.default_entity_manager + + default + + + doctrine.dbal.default_connection + + default + Doctrine\ORM\Configuration + Doctrine\ORM\EntityManager + Doctrine\Bundle\DoctrineBundle\ManagerConfigurator + Doctrine\Common\Cache\ArrayCache + Doctrine\Common\Cache\ApcCache + Doctrine\Common\Cache\MemcacheCache + localhost + 11211 + Memcache + Doctrine\Common\Cache\MemcachedCache + localhost + 11211 + Memcached + Doctrine\Common\Cache\RedisCache + localhost + 6379 + Redis + Doctrine\Common\Cache\XcacheCache + Doctrine\Common\Cache\WinCacheCache + Doctrine\Common\Cache\ZendDataCache + Doctrine\Persistence\Mapping\Driver\MappingDriverChain + Doctrine\ORM\Mapping\Driver\AnnotationDriver + Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver + Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver + Doctrine\ORM\Mapping\Driver\PHPDriver + Doctrine\ORM\Mapping\Driver\StaticPHPDriver + Doctrine\ORM\Mapping\Driver\AttributeDriver + Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer + Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser + Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator + Symfony\Bridge\Doctrine\Validator\DoctrineInitializer + Symfony\Bridge\Doctrine\Security\User\EntityUserProvider + Doctrine\ORM\Tools\ResolveTargetEntityListener + Doctrine\ORM\Tools\AttachEntityListenersListener + Doctrine\ORM\Mapping\DefaultNamingStrategy + Doctrine\ORM\Mapping\UnderscoreNamingStrategy + Doctrine\ORM\Mapping\DefaultQuoteStrategy + Doctrine\ORM\Mapping\AnsiQuoteStrategy + Doctrine\Bundle\DoctrineBundle\Mapping\ContainerEntityListenerResolver + Doctrine\ORM\Cache\DefaultCacheFactory + Doctrine\ORM\Cache\Region\DefaultRegion + Doctrine\ORM\Cache\Region\FileLockRegion + Doctrine\ORM\Cache\Logging\CacheLoggerChain + Doctrine\ORM\Cache\Logging\StatisticsCacheLogger + Doctrine\ORM\Cache\CacheConfiguration + Doctrine\ORM\Cache\RegionsConfiguration + true + /app/example-symfony-api/var/cache/dev/doctrine/orm/Proxies + Proxies + true + + + + exclusive + + event + doctrine + console + + + + exclusive + + event + + + + + form_div_layout.html.twig + form/layout.html.twig + form/fields.html.twig + + /app/example-symfony-api/templates + 127.0.0.1:9912 + false + 2 + null + null + + + request + @WebProfiler/Collector/request.html.twig + + + time + @WebProfiler/Collector/time.html.twig + + + memory + @WebProfiler/Collector/memory.html.twig + + + validator + @WebProfiler/Collector/validator.html.twig + + + ajax + @WebProfiler/Collector/ajax.html.twig + + + form + @WebProfiler/Collector/form.html.twig + + + exception + @WebProfiler/Collector/exception.html.twig + + + logger + @WebProfiler/Collector/logger.html.twig + + + events + @WebProfiler/Collector/events.html.twig + + + router + @WebProfiler/Collector/router.html.twig + + + cache + @WebProfiler/Collector/cache.html.twig + + + translation + @WebProfiler/Collector/translation.html.twig + + + security + @Security/Collector/security.html.twig + + + twig + @WebProfiler/Collector/twig.html.twig + + + http_client + @WebProfiler/Collector/http_client.html.twig + + + db + @Doctrine/Collector/db.html.twig + + + dump + @Debug/Profiler/dump.html.twig + + + mailer + @WebProfiler/Collector/mailer.html.twig + + + config + @WebProfiler/Collector/config.html.twig + + + + + + + + + + + + + + + + + + + + + + app:add-user + + + Creates users and stores them in the database + + + + + + + + + + + app:delete-user + + + Deletes users from the database + + + + + + + anonymous@example.com + + + app:list-users + + + + app:users + + + + Lists all the existing users + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + anonymous@example.com + + + + + + + + + + + ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn + + + + + + + + + + + UTF-8 + false + + + + + + + + en + + false + + + + + + + + + + + + + error_controller + + + + + + + + error_controller + + true + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + true + + + + /app/example-symfony-api/var/cache/dev/http_cache + + + + + + + + + true + /app/example-symfony-api/var/cache/dev/App_KernelDevDebugContainerDeprecations.log + + + + + + + + + + %env(APP_SECRET)% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + ?reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + disableUsageTracking + setToken + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + reset + + + + + + + + + + + + + + + + + + + + + + + + + en + + + + + + getEnv + + + + + + + + get + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + /_fragment + + + + + + + + + /_fragment + + + + + + + null + + /_fragment + + + + + + + + + /_fragment + + + + + + + true + + + + UTF-8 + + /app/example-symfony-api + + + + + + + + + + + + + + + + + + + + + + + about + + + Display information about the current project + + + + + + + /app/example-symfony-api + + assets:install + + + Install bundle's web assets under a public directory + + + + + + + + + cache:clear + + + Clear the cache + + + + + + + + cache.app + cache.system + cache.validator + cache.serializer + cache.annotations + cache.property_info + cache.validator_expression_language + cache.security_expression_language + cache.security_is_granted_attribute_expression_language + cache.security_token_verifier + cache.doctrine.orm.default.result + cache.doctrine.orm.default.query + cache.webpack_encore + + + cache:pool:clear + + + Clear cache pools + + + + + + + + cache:pool:prune + + + Prune cache pools + + + + + + + + cache:pool:invalidate-tags + + + Invalidate cache tags for all or a specific pool + + + + + + + + cache.app + cache.system + cache.validator + cache.serializer + cache.annotations + cache.property_info + cache.validator_expression_language + cache.security_expression_language + cache.security_is_granted_attribute_expression_language + cache.security_token_verifier + cache.doctrine.orm.default.result + cache.doctrine.orm.default.query + cache.webpack_encore + + + cache:pool:delete + + + Delete an item from a cache pool + + + + + + + cache.app + cache.system + cache.validator + cache.serializer + cache.annotations + cache.property_info + cache.validator_expression_language + cache.security_expression_language + cache.security_is_granted_attribute_expression_language + cache.security_token_verifier + cache.doctrine.orm.default.result + cache.doctrine.orm.default.query + cache.webpack_encore + + + cache:pool:list + + + List available cache pools + + + + + + + + cache:warmup + + + Warm up an empty cache + + + + + + + debug:config + + + Dump the current configuration for an extension + + + + + + + config:dump-reference + + + Dump the default configuration for an extension + + + + + + + debug:container + + + Display current services for an application + + + + + + + lint:container + + + Ensure that arguments injected into services match type declarations + + + + + + null + + + debug:autowiring + + + List classes/interfaces you can use for autowiring + + + + + + dev + /app/example-symfony-api + + debug:dotenv + + + Lists all dotenv files with variables and values + + + + + + + + debug:event-dispatcher + + + Display configured listeners for an application + + + + + + + + + debug:router + + + Display current routes for an application + + + + + + + + + router:match + + + Help debug routes by simulating a path info match + + + + + + + + + /app/example-symfony-api/translations + /app/example-symfony-api/templates + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations + /app/example-symfony-api/vendor/symfony/form/Resources/translations + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations + + + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Email + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Form + + + + debug:translation + + + Display translation messages information + + + + + + + + + en + /app/example-symfony-api/translations + /app/example-symfony-api/templates + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations + /app/example-symfony-api/vendor/symfony/form/Resources/translations + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations + + + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Email + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Form + + + + translation:extract + + + Extract missing translations keys from code to translation files. + + + + + + + + debug:validator + + + Display validation constraints for classes + + + + + + + + + en + + + + translation:pull + + + Pull translations from a given provider. + + + + + + + + + + + translation:push + + + Push translations to a given provider. + + + + + + + lint:xliff + + + Lint an XLIFF file and outputs encountered errors + + + + + + + lint:yaml + + + Lint a YAML file and outputs encountered errors + + + + + + + + Symfony\Component\Form\Extension\Core\Type + App\Form + App\Form\Type + Symfony\Bridge\Doctrine\Form\Type + + + App\Form\CommentType + App\Form\PostType + App\Form\Type\ChangePasswordType + App\Form\Type\DateTimePickerType + App\Form\Type\TagsInputType + App\Form\UserType + Symfony\Component\Form\Extension\Core\Type\FormType + Symfony\Component\Form\Extension\Core\Type\ChoiceType + Symfony\Component\Form\Extension\Core\Type\FileType + Symfony\Component\Form\Extension\Core\Type\ColorType + Symfony\Bridge\Doctrine\Form\Type\EntityType + + + Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension + Symfony\Component\Form\Extension\HtmlSanitizer\Type\TextTypeHtmlSanitizerExtension + Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension + Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension + Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension + Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension + Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension + Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension + Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension + Symfony\Component\Form\Extension\PasswordHasher\Type\FormTypePasswordHasherExtension + Symfony\Component\Form\Extension\PasswordHasher\Type\PasswordTypePasswordHasherExtension + + + Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser + Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser + + + + debug:form + + + Display form type information + + + + + + + + + secrets:set + + + Set a secret in the vault + + + + + + + + + secrets:remove + + + Remove a secret from the vault + + + + + + + + + secrets:generate-keys + + + Generate new encryption keys + + + + + + + + + secrets:list + + + List all secrets + + + + + + + + + secrets:decrypt-to-local + + + Decrypt all secrets and stores them in the local vault + + + + + + + + + secrets:encrypt-from-local + + + Encrypt all local secrets to the vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + + + + 0 + %container.build_id% + + + + + + + + + 0 + /app/example-symfony-api/var/cache/dev/pools/app + + + + + + + + PSR-6 provider service + + 0 + + + + + Redis connection service + + 0 + + + + + + + + + Redis connection service + + 0 + + + + + + + + + Memcached connection service + + 0 + + + + + + + + + DBAL connection service + + 0 + + + + + + + + + + PDO connection service + + 0 + + + + + + + + + + 0 + + + + + + null + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + base path + version strategy + + + + base URLs + version strategy + + + + version + format + + + + manifest path + + false + + + + + + + + http codes + delay ms + multiplier + max delay ms + jitter + + + + null + + + + + null://null + + + + + + + + null://null + + + + + + + + + null + null + + + + + + + + + + + + + + mailer:test + + + Test Mailer transports by sending an email + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /_fragment + + + + + + en + + + php + + + yaml + yml + + + xlf + xliff + + + po + + + mo + + + ts + + + csv + + + res + + + dat + + + ini + + + json + + + + /app/example-symfony-api/var/cache/dev/translations + true + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.af.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.af.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.af.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ar.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ar.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ar.xlf + /app/example-symfony-api/translations/messages+intl-icu.ar.xlf + /app/example-symfony-api/translations/validators+intl-icu.ar.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.az.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.az.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.az.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.be.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.be.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.be.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.bg.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.bg.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.bg.xlf + /app/example-symfony-api/translations/messages+intl-icu.bg.xlf + /app/example-symfony-api/translations/validators+intl-icu.bg.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.bs.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.bs.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.bs.xlf + /app/example-symfony-api/translations/messages+intl-icu.bs.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ca.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ca.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ca.xlf + /app/example-symfony-api/translations/messages+intl-icu.ca.xlf + /app/example-symfony-api/translations/validators+intl-icu.ca.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.cs.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.cs.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.cs.xlf + /app/example-symfony-api/translations/messages+intl-icu.cs.xlf + /app/example-symfony-api/translations/validators+intl-icu.cs.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.cy.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.da.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.da.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.da.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.de.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.de.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.de.xlf + /app/example-symfony-api/translations/messages+intl-icu.de.xlf + /app/example-symfony-api/translations/validators+intl-icu.de.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.el.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.el.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.el.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.en.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.en.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.en.xlf + /app/example-symfony-api/translations/messages+intl-icu.en.xlf + /app/example-symfony-api/translations/validators+intl-icu.en.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.es.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.es.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.es.xlf + /app/example-symfony-api/translations/messages+intl-icu.es.xlf + /app/example-symfony-api/translations/validators+intl-icu.es.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.et.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.et.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.et.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.eu.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.eu.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.eu.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.fa.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.fa.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.fa.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.fi.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.fi.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.fi.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.fr.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.fr.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.fr.xlf + /app/example-symfony-api/translations/messages+intl-icu.fr.xlf + /app/example-symfony-api/translations/validators+intl-icu.fr.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.gl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.gl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.gl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.he.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.he.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.he.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.hr.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.hr.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.hr.xlf + /app/example-symfony-api/translations/messages+intl-icu.hr.xlf + /app/example-symfony-api/translations/validators+intl-icu.hr.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.hu.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.hu.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.hu.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.hy.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.hy.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.hy.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.id.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.id.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.id.xlf + /app/example-symfony-api/translations/messages+intl-icu.id.xlf + /app/example-symfony-api/translations/validators+intl-icu.id.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.it.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.it.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.it.xlf + /app/example-symfony-api/translations/messages+intl-icu.it.xlf + /app/example-symfony-api/translations/validators+intl-icu.it.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ja.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ja.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ja.xlf + /app/example-symfony-api/translations/messages+intl-icu.ja.xlf + /app/example-symfony-api/translations/validators+intl-icu.ja.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.lb.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.lb.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.lb.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.lt.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.lt.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.lt.xlf + /app/example-symfony-api/translations/messages+intl-icu.lt.xlf + /app/example-symfony-api/translations/validators+intl-icu.lt.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.lv.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.lv.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.lv.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.mn.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.mn.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.mn.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.my.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.my.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.my.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.nb.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.nb.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.nb.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.nl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.nl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.nl.xlf + /app/example-symfony-api/translations/messages+intl-icu.nl.xlf + /app/example-symfony-api/translations/validators+intl-icu.nl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.nn.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.nn.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.nn.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.no.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.no.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.no.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.pl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.pl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.pl.xlf + /app/example-symfony-api/translations/messages+intl-icu.pl.xlf + /app/example-symfony-api/translations/validators+intl-icu.pl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.pt.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.pt.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.pt.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.pt_BR.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.pt_BR.xlf + /app/example-symfony-api/translations/messages+intl-icu.pt_BR.xlf + /app/example-symfony-api/translations/validators+intl-icu.pt_BR.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ro.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ro.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ro.xlf + /app/example-symfony-api/translations/messages+intl-icu.ro.xlf + /app/example-symfony-api/translations/validators+intl-icu.ro.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ru.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ru.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ru.xlf + /app/example-symfony-api/translations/messages+intl-icu.ru.xlf + /app/example-symfony-api/translations/validators+intl-icu.ru.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sk.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sk.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sk.xlf + /app/example-symfony-api/translations/messages+intl-icu.sk.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sl.xlf + /app/example-symfony-api/translations/messages+intl-icu.sl.xlf + /app/example-symfony-api/translations/validators+intl-icu.sl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sq.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sq.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sq.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sr_Cyrl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sr_Cyrl.xlf + /app/example-symfony-api/translations/messages+intl-icu.sr_Cyrl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sr_Latn.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sr_Latn.xlf + /app/example-symfony-api/translations/messages+intl-icu.sr_Latn.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.sv.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.sv.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.sv.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.th.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.th.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.th.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.tl.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.tl.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.tl.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.tr.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.tr.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.tr.xlf + /app/example-symfony-api/translations/messages+intl-icu.tr.xlf + /app/example-symfony-api/translations/validators+intl-icu.tr.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.uk.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.uk.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.uk.xlf + /app/example-symfony-api/translations/messages+intl-icu.uk.xlf + /app/example-symfony-api/translations/validators+intl-icu.uk.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.ur.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.ur.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.ur.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.uz.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.uz.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.uz.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.vi.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.vi.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.vi.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.zh_CN.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.zh_CN.xlf + /app/example-symfony-api/translations/messages+intl-icu.zh_CN.xlf + /app/example-symfony-api/translations/validators+intl-icu.zh_CN.xlf + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf + /app/example-symfony-api/vendor/symfony/form/Resources/translations/validators.zh_TW.xlf + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations/security.zh_TW.xlf + + + + /app/example-symfony-api/vendor/symfony/validator/Resources/translations + /app/example-symfony-api/vendor/symfony/form/Resources/translations + /app/example-symfony-api/vendor/symfony/security-core/Resources/translations + /app/example-symfony-api/translations + /app/example-symfony-api/vendor/symfony/framework-bundle/translations + /app/example-symfony-api/vendor/symfony/security-bundle/translations + /app/example-symfony-api/vendor/doctrine/doctrine-bundle/translations + /app/example-symfony-api/vendor/symfony/monolog-bundle/translations + /app/example-symfony-api/vendor/symfony/twig-bundle/translations + /app/example-symfony-api/vendor/symfony/debug-bundle/translations + /app/example-symfony-api/vendor/symfony/web-profiler-bundle/translations + /app/example-symfony-api/vendor/doctrine/doctrine-migrations-bundle/translations + /app/example-symfony-api/vendor/doctrine/doctrine-fixtures-bundle/translations + /app/example-symfony-api/vendor/symfony/webpack-encore-bundle/src/translations + /app/example-symfony-api/vendor/symfony/maker-bundle/src/translations + /app/example-symfony-api/vendor/twig/extra-bundle/translations + + + + vendor/symfony/validator/Resources/translations + vendor/symfony/form/Resources/translations + vendor/symfony/security-core/Resources/translations + translations + vendor/symfony/framework-bundle/translations + vendor/symfony/security-bundle/translations + vendor/doctrine/doctrine-bundle/translations + vendor/symfony/monolog-bundle/translations + vendor/symfony/twig-bundle/translations + vendor/symfony/debug-bundle/translations + vendor/symfony/web-profiler-bundle/translations + vendor/doctrine/doctrine-migrations-bundle/translations + vendor/doctrine/doctrine-fixtures-bundle/translations + vendor/symfony/webpack-encore-bundle/src/translations + vendor/symfony/maker-bundle/src/translations + vendor/twig/extra-bundle/translations + + + + + + + + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xliff + + + + + + + + + + + + + yaml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Expression + Email + NotCompromisedPassword + When + UserPassword + + + + + + php + + + + yaml + + + + yml + + + + xlf + + + + xliff + + + + po + + + + mo + + + + ts + + + + csv + + + + res + + + + dat + + + + ini + + + + json + + + + + + php + + + + twig + + + + + + php + + + + xlf + + + + xliff + + + + po + + + + mo + + + + yml + + + + yaml + + + + ts + + + + csv + + + + ini + + + + json + + + + res + + + + + + + + + + + en + + + + + + + + + + + + + + + + + + + null + + null + -1 + true + true + + + + null + + /app/example-symfony-api + + + + + true + + + + event_dispatcher.dispatcher + + + + + + + + kernel.controller + + + onKernelController + + 0 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 1024 + + + kernel.response + + + onKernelResponse + + 0 + + + kernel.exception + + + onKernelException + + 0 + + + console.error + + + handleConsoleError + + 0 + + + kernel.exception + + + handleKernelException + + 0 + + + App\Event\CommentCreatedEvent + + + onCommentCreated + + 0 + + + kernel.controller + + + registerCurrentController + + 0 + + + kernel.request + + + onKernelRequest + + 0 + + + kernel.response + + + onKernelResponse + + 0 + + + kernel.request + + + setDefaultLocale + + 100 + + + kernel.request + + + onKernelRequest + + 16 + + + kernel.finish_request + + + onKernelFinishRequest + + 0 + + + kernel.request + + + onKernelRequest + + 256 + + + kernel.response + + + onResponse + + -255 + + + kernel.controller_arguments + + + onControllerArguments + + 0 + + + kernel.exception + + + logKernelException + + 0 + + + kernel.exception + + + onKernelException + + -128 + + + kernel.response + + + removeCspHeader + + -128 + + + kernel.controller + + + onKernelController + + 10 + + + kernel.response + + + onKernelResponse + + -10 + + + kernel.request + + + onKernelRequest + + 15 + + + kernel.finish_request + + + onKernelFinishRequest + + -15 + + + console.error + + + onConsoleError + + -128 + + + console.terminate + + + onConsoleTerminate + + -128 + + + console.error + + + onConsoleError + + 0 + + + Symfony\Component\Mailer\Event\MessageEvent + + + onMessage + + -255 + + + Symfony\Component\Mailer\Event\MessageEvent + + + onMessage + + -255 + + + Symfony\Component\Mailer\Event\MessageEvent + + + onMessage + + 0 + + + kernel.response + + + onKernelResponse + + 0 + + + kernel.request + + + onKernelRequest + + 48 + + + kernel.request + + + configure + + 2048 + + + console.command + + + configure + + 2048 + + + kernel.request + + + onKernelRequest + + 32 + + + kernel.finish_request + + + onKernelFinishRequest + + 0 + + + kernel.exception + + + onKernelException + + -64 + + + kernel.request + + + onKernelRequest + + 128 + + + kernel.response + + + onKernelResponse + + -1000 + + + kernel.response + + + onKernelResponse + + -100 + + + kernel.exception + + + onKernelException + + 0 + + + kernel.terminate + + + onKernelTerminate + + -1024 + + + kernel.controller + + + onKernelController + + 0 + + + kernel.response + + + onKernelResponse + + 0 + + + kernel.controller_arguments + + + onKernelControllerArguments + + 10 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 0 + + + Symfony\Component\Security\Http\Event\LoginSuccessEvent + + + onLoginSuccess + + 0 + + + debug.security.authorization.vote + + + onVoterVote + + 0 + + + kernel.request + + + configureLogoutUrlGenerator + + 8 + + + kernel.request + + + onKernelRequest + + 8 + + + kernel.finish_request + + + onKernelFinishRequest + + 0 + + + kernel.response + + + onKernelResponse + + 0 + + + console.command + + + onCommand + + 255 + + + console.terminate + + + onTerminate + + -255 + + + kernel.view + + + onKernelView + + -128 + + + Symfony\Component\Mailer\Event\MessageEvent + + + onMessage + + 0 + + + console.command + + + configure + + 1024 + + + kernel.response + + + onKernelResponse + + -128 + + + kernel.finish_request + + + resetAssets + + 0 + + + console.error + + + onConsoleError + + 0 + + + console.terminate + + + onConsoleTerminate + + 0 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 512 + + + Symfony\Component\Security\Http\Event\LogoutEvent + + + onLogout + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dev + + + + + dev + + + + + dev + + + + + dev + + + + + dev + + + + + dev + + + + + dev + + + + + + + + + + + + + + + + + + + true + + + + + + + + kernel::loadRoutes + + /app/example-symfony-api/var/cache/dev + true + Symfony\Component\Routing\Generator\CompiledUrlGenerator + Symfony\Component\Routing\Generator\Dumper\CompiledUrlGeneratorDumper + Symfony\Bundle\FrameworkBundle\Routing\RedirectableCompiledUrlMatcher + Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper + true + service + + + + + en + + + + + + + + + + localhost + http + 80 + 443 + + _functions + + + + + + + + + + + + + + + + + + + + + + + /app/example-symfony-api + true + + + + + + + + + + + + + + + + + + + + required + + + + + + class_exists + + + + + + + + + + true + + + + + 0 + Cache-Directory + + + + + /app/example-symfony-api/var/cache/dev/annotations.php + #^Symfony\\(?:Component\\HttpKernel\\|Bundle\\FrameworkBundle\\Controller\\(?!.*Controller$))# + true + + + + /app/example-symfony-api/var/cache/dev/annotations.php + + + + + 3 + 2 + + + + + + + /app/example-symfony-api/config/secrets/%env(default:kernel.environment:APP_RUNTIME_ENV)% + + + + + base64:default::SYMFONY_DECRYPTION_SECRET + + + + /app/example-symfony-api/.env.dev.local + + + + + + + + + + + + + + + + + + + + + + + + + + + redis://localhost + + true + + + + + memcached://localhost + + true + + + + + 0 + false + + + + + + + onSessionUsage + + + + %session.storage.options% + null + + + _sf2_meta + 0 + + + true + + + null + + + _sf2_meta + 0 + + + true + + + /app/example-symfony-api/var/cache/dev/sessions + MOCKSESSID + + + _sf2_meta + 0 + + + + + + + /app/example-symfony-api/var/cache/dev/sessions + + + + + A string or a connection object + + + + + + + + + + true + %session.storage.options% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + validators + + + + + true + _token + + validators + + + + + + + + + + + validators + + + + /app/example-symfony-api/vendor/symfony/form/Resources/config/validation.xml + + + + true + + + + + + loadValidatorMetadata + + + + + + + + + + + + + + + + + + /app/example-symfony-api/var/cache/dev/validation.php + + + /app/example-symfony-api/var/cache/dev/validation.php + + + + + + + + + + + + + + + + + + + + + html5 + + + + + UTF-8 + true + null + + + + + + + + + + + {^App\\Entity\\} + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file:/app/example-symfony-api/var/cache/dev/profiler + + + + + + + null + false + false + null + + + + + + + + + + + + + + + + + + collectSessionUsage + + + + + + + + + + + + + + + + + + + /app/example-symfony-api/var/cache/dev/App_KernelDevDebugContainer + + + + + + + + + + + + + + + + + + + cache.app + + + + cache.system + + + + cache.validator + + + + cache.serializer + + + + cache.annotations + + + + cache.property_info + + + + cache.validator_expression_language + + + + cache.security_expression_language + + + + cache.security_is_granted_attribute_expression_language + + + + cache.security_token_verifier + + + + cache.doctrine.orm.default.result + + + + cache.doctrine.orm.default.query + + + + cache.webpack_encore + + + + + + + + cache.validator + cache.serializer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http_client + + + + + + + false + + + + + + null + + + false + + + + + + null + + + false + + + + + + + + + + + + + + + false + false + + + + + + + + + + + + null + + + + + + migrate + + + none + + + + + + + + + + %security.role_hierarchy.roles% + + + + + + + + + + + + + + + + + + + + + + + + + + null + + + + + + LogoutListener + FirewallConfig + + + + + LogoutListener + FirewallConfig + + + + name + user_checker + request_matcher + false + false + null + null + null + null + null + + null + null + + + + + + + main + security_logout + logout + logout + + null + + + + firewall + + + + security.ldap.ldap + base dn + search dn + search password + default_roles + uid key + filter + password_attribute + extra_fields (email etc) + + + + + + {^https?://%%s$}i + {^https://%%s$}i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + + sha512 + 40 + false + true + 5000 + null + null + null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ROLE_ADMIN + + null + + + + + + + + + Provider Key + + + + + + enableUsageTracking + + + + + + event dispatcher + + + + + + + target url + + + + + + + + Provider-shared Key + + + + + + + + The custom success handler service + + Provider-shared Key + + + + + + + + The custom failure handler service + + + + + + + + + + + + + + + Provider-shared Key + + null + + + false + + + + + User Provider + User Checker + Provider Key + + + _switch_user + ROLE_ALLOWED_TO_SWITCH + + false + + Target Route + + + + + + + false + + + + + + + + + authenticators + + + provider key + + true + true + required badges + + + + + + + + + + + + + authenticator manager + + + + + + + + + + + user provider + + + + + + + user checker + + + + + + + request rate limiter + + + + realm name + user provider + + + + + user provider + authentication success handler + authentication failure handler + options + + + + user provider + authentication success handler + authentication failure handler + options + + + + + + + + user provider + + firewall name + user key + credentials key + + + + + user provider + + firewall name + user key + + + + + + + access token handler + access token extractor + null + null + null + null + + + + + + access token extractors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %security.firewalls% + + + + + + + + + false + + debug:firewall + + + Display information about your security firewall(s) + + + + + App\Entity\User + username + null + + + dev + security.user_checker + .security.request_matcher.kLbKLHa + false + false + null + null + null + null + null + + null + null + + + ^/(_(profiler|wdt)|css|images|js)/ + + + + + + + + + null + null + + + + main + security.user_checker + null + true + false + security.user.provider.concrete.database_users + main + security.authenticator.form_login.main + null + null + + form_login + remember_me + + null + + security_logout + homepage + logout + security.csrf.token_manager + true + logout + true + + + + + + + + + event_dispatcher.dispatcher + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 2048 + + + Symfony\Component\Security\Http\Event\LoginSuccessEvent + + + onSuccessfulLogin + + 0 + + + Symfony\Component\Security\Http\Event\LogoutEvent + + + onLogout + + 64 + + + Symfony\Component\Security\Http\Event\LogoutEvent + + + onLogout + + 0 + + + Symfony\Component\Security\Http\Event\LoginSuccessEvent + + + onSuccessfulLogin + + -32 + + + Symfony\Component\Security\Http\Event\LoginSuccessEvent + + + onSuccessfulLogin + + -64 + + + Symfony\Component\Security\Http\Event\LoginFailureEvent + + + clearCookie + + 0 + + + Symfony\Component\Security\Http\Event\LogoutEvent + + + clearCookie + + 0 + + + Symfony\Component\Security\Http\Event\TokenDeauthenticatedEvent + + + clearCookie + + 0 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + preCheckCredentials + + 256 + + + security.authentication.success + + + postCheckCredentials + + 256 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 1024 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 0 + + + Symfony\Component\Security\Http\Event\LoginSuccessEvent + + + onLoginSuccess + + 0 + + + Symfony\Component\Security\Http\Event\CheckPassportEvent + + + checkPassport + + 512 + + + Symfony\Component\Security\Http\Event\LogoutEvent + + + onLogout + + 0 + + + + + + + + + + + + + + main + + + + + + enableUsageTracking + + + + + + + + + + + + logout + logout + security_logout + + + + + + + homepage + + + + + + + + + + + security_login + security_login + true + false + false + _username + _password + _csrf_token + authenticate + true + false + + + + + + + + + security_login + blog_index + false + _target_path + false + + + + main + + + + + + + + + + security_login + null + false + _failure_path + + + + + + + + + + signature properties + %env(APP_SECRET)% + null + null + + + + signature hasher + user provider + + options + + + + + token provider + %env(APP_SECRET)% + user provider + + options + + token verifier + + + + + + + + options + + + + + remember me handler + + + + + remember me handler + %env(APP_SECRET)% + + options + + + + + + + + + + + password + + %env(APP_SECRET)% + null + null + + + + + + + + %env(APP_SECRET)% + 604800 + + true + + password + + REMEMBERME + / + null + null + true + lax + false + _remember_me + + + + + + + false + _remember_me + + + + + + + + + + + %env(APP_SECRET)% + + REMEMBERME + + + + + + + + + + + main + + true + true + + + + + + + + + + + + + + main + + null + null + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ^/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin + + + + + + + + + + + + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface + + + security:hash-password + + + Hash a user password + + + + + + + + null + + + + + + true + + + + + + + + + + + + + + + + %doctrine.connections% + %doctrine.entity_managers% + default + default + + + + + + + + + + + + + + doctrine:database:create + + + + + + + + doctrine:database:drop + + + + + + + + doctrine:query:sql + + + + + + + + dbal:run-sql + + + + + + + + + + + + + + + + + + + + + + default + + + + + + + + + + doctrine.orm.listeners.doctrine_dbal_cache_adapter_schema_subscriber + doctrine.orm.listeners.doctrine_token_provider_schema_subscriber + + + loadClassMetadata + + doctrine.orm.default_listeners.attach_entity_listeners + + + + + + %env(resolve:DATABASE_URL)% + pdo_mysql + localhost + null + root + null + + + + + + + + + + + + + + %doctrine.connections% + %doctrine.entity_managers% + default + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + true + + + + + + null + + + + null + + + + + + + + + + + doctrine:cache:clear-metadata + + + + + + + + doctrine:cache:clear-query + + + + + + + + doctrine:cache:clear-result + + + + + + + + doctrine:cache:clear-collection-region + + + + + + + + doctrine:mapping:convert + + + + + + + + doctrine:schema:create + + + + + + + + doctrine:schema:drop + + + + + + + + doctrine:ensure-production-settings + + + + + + + + doctrine:cache:clear-entity-region + + + + + + + + doctrine:mapping:info + + + + + + + + doctrine:cache:clear-query-region + + + + + + + + doctrine:query:dql + + + + + + + + doctrine:schema:update + + + + + + + + doctrine:schema:validate + + + + + + + %kernel.bundles% + + doctrine:mapping:import + + + + + + + App\Entity + + + + + + + + + + + + + + + + /app/example-symfony-api/var/cache/dev/doctrine/orm/Proxies + + + Proxies + + + true + + + + + + Doctrine\Bundle\DoctrineBundle\Mapping\ClassMetadataFactory + + + Doctrine\ORM\EntityRepository + + + + + + + + + + + + + + + + + /app/example-symfony-api/src/Entity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {^App\\Entity\\} + + + app + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + /app/example-symfony-api/var/log/dev.log + 100 + true + null + false + + + + + + + + + null + true + + + + + + + + + + + + + + + name + /app/example-symfony-api/var/cache/dev/twig + UTF-8 + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app + + + + + + + + + suggestFilter + + + + + + suggestFunction + + + + + + suggestTag + + + + + + + dev + + + true + + + + + + + + + + + + email + null + + /app/example-symfony-api/templates + + + + + + + + + + + + /app/example-symfony-api + + /app/example-symfony-api/vendor/symfony/security-bundle/Resources/views + Security + + + /app/example-symfony-api/vendor/symfony/security-bundle/Resources/views + !Security + + + /app/example-symfony-api/vendor/doctrine/doctrine-bundle/Resources/views + Doctrine + + + /app/example-symfony-api/vendor/doctrine/doctrine-bundle/Resources/views + !Doctrine + + + /app/example-symfony-api/templates/bundles/TwigBundle + Twig + + + /app/example-symfony-api/templates/bundles/TwigBundle + !Twig + + + /app/example-symfony-api/vendor/symfony/debug-bundle/Resources/views + Debug + + + /app/example-symfony-api/vendor/symfony/debug-bundle/Resources/views + !Debug + + + /app/example-symfony-api/vendor/symfony/web-profiler-bundle/Resources/views + WebProfiler + + + /app/example-symfony-api/vendor/symfony/web-profiler-bundle/Resources/views + !WebProfiler + + + /app/example-symfony-api/vendor/doctrine/doctrine-migrations-bundle/Resources/views + DoctrineMigrations + + + /app/example-symfony-api/vendor/doctrine/doctrine-migrations-bundle/Resources/views + !DoctrineMigrations + + + /app/example-symfony-api/templates + + + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Email + email + + + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Email + !email + + + /app/example-symfony-api/vendor/symfony/twig-bridge/Resources/views/Form + + + + + + + + + + + + + + + + + + + + + + + + + + /app/example-symfony-api + UTF-8 + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F j, Y H:i + %d days + null + 0 + . + , + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + %twig.form.resources% + + + + + + + + + + + + /app/example-symfony-api + %kernel.bundles_metadata% + /app/example-symfony-api/templates + + + debug:twig + + + Show a list of twig functions, filters, globals and tests + + + + + + + + *.twig + + + lint:twig + + + Lint a Twig template and outputs encountered errors + + + + + null + + + + + + + + + + + + + + + UTF-8 + + + + + + + + + + + + + 2500 + + + 1 + + + -1 + + + + Symfony\Component\VarDumper\Caster\ReflectionCaster::unsetClosureFileInfo + + + + + + + + + UTF-8 + /app/example-symfony-api + + + + + + + null + UTF-8 + 0 + + + + + + + + tcp://%env(VAR_DUMPER_SERVER)% + + + + UTF-8 + /app/example-symfony-api + + + + + + + + + + + + + + + + tcp://%env(VAR_DUMPER_SERVER)% + + + + + + + + + + + + + + + + + + + + server:dump + + + Start a dump server that collects and displays dumps in a single place + + + + + + + server:log + + + Start a log server that displays logs in real time + + + + + + + %data_collector.templates% + + /app/example-symfony-api + + + + + + null + + + + + + + + + + + + + + + + null + UTF-8 + 1 + + + 4096 + + + + + + + + + _profiler_open_file + ?file=%%f&line=%%l#line%%l + + + + + + + false + 2 + + ^/((index|app(_[\w]+)?)\.php/)?_wdt + + + + + + + + + Doctrine\Migrations\Version\MigrationFactory + + + + + + + + + + + + + + + + + + + + DoctrineMigrations + /app/example-symfony-api/migrations + + + false + + + true + + + true + + + + + + + + + + + + + + doctrine:migrations:diff + + doctrine:migrations:diff + + + + + + + doctrine:migrations:sync-metadata-storage + + doctrine:migrations:sync-metadata-storage + + + + + + + doctrine:migrations:versions + + doctrine:migrations:list + + + + + + + doctrine:migrations:current + + doctrine:migrations:current + + + + + + + doctrine:migrations:dump-schema + + doctrine:migrations:dump-schema + + + + + + + doctrine:migrations:execute + + doctrine:migrations:execute + + + + + + + doctrine:migrations:generate + + doctrine:migrations:generate + + + + + + + doctrine:migrations:latest + + doctrine:migrations:latest + + + + + + + doctrine:migrations:migrate + + doctrine:migrations:migrate + + + + + + + doctrine:migrations:rollup + + doctrine:migrations:rollup + + + + + + + doctrine:migrations:status + + doctrine:migrations:status + + + + + + + doctrine:migrations:up-to-date + + doctrine:migrations:up-to-date + + + + + + + doctrine:migrations:version + + doctrine:migrations:version + + + + + + + + + + + + + doctrine:fixtures:load + + + + + + + + + + + + + + + + + + + + + + + + + + _default + + + + + + + + true + + + + + + + + + + + + + + + /app/example-symfony-api/public/build/entrypoints.json + + /app/example-symfony-api/var/cache/dev/webpack_encore.cache.php + + + /app/example-symfony-api/var/cache/dev/webpack_encore.cache.php + + + + + + + + + + + + + _default + + + + + + + + _default + + + + + /app/example-symfony-api/public/build/entrypoints.json + null + _default + true + + + + + + + + + + + + /app/example-symfony-api + /app/example-symfony-api/templates + + + App + + + + + + + + + + + + + + + + App\Entity + + + + + App\Entity + + + + + + + + + + + + + App + null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + null + + + + + + + + + + + + + + + The "%service_id%" service is deprecated, use "maker.maker.make_test" instead. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The "%service_id%" service is deprecated, use "maker.maker.make_test" instead. + + + + + + + + + + + + + + + + + + /app/example-symfony-api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make:auth + + + Creates a Guard authenticator of different flavors + + + + + + + + + + make:command + + + Creates a new console command class + + + + + + + + + + make:twig-component + + + Creates a twig (or live) component + + + + + + + + + + make:controller + + + Creates a new controller class + + + + + + + + + + make:crud + + + Creates CRUD for Doctrine entity class + + + + + + + + + + make:docker:database + + + Adds a database container to your docker-compose.yaml file + + + + + + + + + + make:entity + + + Creates or updates a Doctrine entity class, and optionally an API Platform resource + + + + + + + + + + make:fixtures + + + Creates a new class to load Doctrine fixtures + + + + + + + + + + make:form + + + Creates a new form class + + + + + + + + + + make:message + + + Creates a new message and handler + + + + + + + + + + make:messenger-middleware + + + Creates a new messenger middleware + + + + + + + + + + make:registration-form + + + Creates a new registration form system + + + + + + + + + + make:reset-password + + + Create controller, entity, and repositories for use with symfonycasts/reset-password-bundle + + + + + + + + + + make:serializer:encoder + + + Creates a new serializer encoder class + + + + + + + + + + make:serializer:normalizer + + + Creates a new serializer normalizer class + + + + + + + + + + make:subscriber + + + Creates a new event subscriber class + + + + + + + + + + make:twig-extension + + + Creates a new Twig extension with its runtime class + + + + + + + + + + + + make:test + + + + make:unit-test + make:functional-test + + + + Creates a new test class + + + + + + + + + + make:validator + + + Creates a new validator and constraint class + + + + + + + + + + make:voter + + + Creates a new security voter class + + + + + + + + + + make:user + + + Creates a new security user class + + + + + + + + + + make:migration + + + Creates a new migration based on database changes + + + + + + + + + + make:stimulus-controller + + + Creates a new Stimulus controller + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + + + + request + + + + + + + + + + + + + console + + + + + + + + + + cache + + + + + + + + + + + + + http_client + + + + + + + + + + + + + mailer + + + + + + + + + + + + + translation + + + + + + + + + + + + + php + + + + + + + + + + + + + event + + + + + + + + + + router + + + + + + + + + + + + + profiler + + + + + + + + + + + + + security + + + + + + + + + + + + + doctrine + + + + + + + + + + debug + + + + + + + + + + + + + deprecation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + App\Controller\Admin\BlogController + + + + + + App\Controller\BlogController + + + + + + App\Controller\SecurityController + + + + + + App\Controller\UserController + + + + + + + + + + + + translation.warmer + + + + + + + + + + + + router.default + + + + + + + + + + + + router.cache_warmer + + + + + + + + + + + + twig.template_cache_warmer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + null + UTF-8 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + App\Entity + + + + + + + + + + + + app:add-user + + Creates users and stores them in the database + false + + + + app:delete-user + + Deletes users from the database + false + + + + app:list-users + + app:users + + Lists all the existing users + false + + + + about + + Display information about the current project + false + + + + assets:install + + Install bundle's web assets under a public directory + false + + + + cache:clear + + Clear the cache + false + + + + cache:pool:clear + + Clear cache pools + false + + + + cache:pool:prune + + Prune cache pools + false + + + + cache:pool:invalidate-tags + + Invalidate cache tags for all or a specific pool + false + + + + cache:pool:delete + + Delete an item from a cache pool + false + + + + cache:pool:list + + List available cache pools + false + + + + cache:warmup + + Warm up an empty cache + false + + + + debug:config + + Dump the current configuration for an extension + false + + + + config:dump-reference + + Dump the default configuration for an extension + false + + + + debug:container + + Display current services for an application + false + + + + lint:container + + Ensure that arguments injected into services match type declarations + false + + + + debug:autowiring + + List classes/interfaces you can use for autowiring + false + + + + debug:dotenv + + Lists all dotenv files with variables and values + false + + + + debug:event-dispatcher + + Display configured listeners for an application + false + + + + debug:router + + Display current routes for an application + false + + + + router:match + + Help debug routes by simulating a path info match + false + + + + debug:translation + + Display translation messages information + false + + + + translation:extract + + Extract missing translations keys from code to translation files. + false + + + + debug:validator + + Display validation constraints for classes + false + + + + translation:pull + + Pull translations from a given provider. + false + + + + translation:push + + Push translations to a given provider. + false + + + + lint:xliff + + Lint an XLIFF file and outputs encountered errors + false + + + + lint:yaml + + Lint a YAML file and outputs encountered errors + false + + + + debug:form + + Display form type information + false + + + + secrets:set + + Set a secret in the vault + false + + + + secrets:remove + + Remove a secret from the vault + false + + + + secrets:generate-keys + + Generate new encryption keys + false + + + + secrets:list + + List all secrets + false + + + + secrets:decrypt-to-local + + Decrypt all secrets and stores them in the local vault + false + + + + secrets:encrypt-from-local + + Encrypt all local secrets to the vault + false + + + + mailer:test + + Test Mailer transports by sending an email + false + + + + debug:firewall + + Display information about your security firewall(s) + false + + + + security:hash-password + + Hash a user password + false + + + + debug:twig + + Show a list of twig functions, filters, globals and tests + false + + + + lint:twig + + Lint a Twig template and outputs encountered errors + false + + + + server:dump + + Start a dump server that collects and displays dumps in a single place + false + + + + server:log + + Start a log server that displays logs in real time + false + + + + make:auth + + Creates a Guard authenticator of different flavors + false + + + + make:command + + Creates a new console command class + false + + + + make:twig-component + + Creates a twig (or live) component + false + + + + make:controller + + Creates a new controller class + false + + + + make:crud + + Creates CRUD for Doctrine entity class + false + + + + make:docker:database + + Adds a database container to your docker-compose.yaml file + false + + + + make:entity + + Creates or updates a Doctrine entity class, and optionally an API Platform resource + false + + + + make:fixtures + + Creates a new class to load Doctrine fixtures + false + + + + make:form + + Creates a new form class + false + + + + make:message + + Creates a new message and handler + false + + + + make:messenger-middleware + + Creates a new messenger middleware + false + + + + make:registration-form + + Creates a new registration form system + false + + + + make:reset-password + + Create controller, entity, and repositories for use with symfonycasts/reset-password-bundle + false + + + + make:serializer:encoder + + Creates a new serializer encoder class + false + + + + make:serializer:normalizer + + Creates a new serializer normalizer class + false + + + + make:subscriber + + Creates a new event subscriber class + false + + + + make:twig-extension + + Creates a new Twig extension with its runtime class + false + + + + make:test + + make:unit-test + make:functional-test + + Creates a new test class + false + + + + make:validator + + Creates a new validator and constraint class + false + + + + make:voter + + Creates a new security voter class + false + + + + make:user + + Creates a new security user class + false + + + + make:migration + + Creates a new migration based on database changes + false + + + + make:stimulus-controller + + Creates a new Stimulus controller + false + + + + + + + App\Command\AddUserCommand + App\Command\DeleteUserCommand + App\Command\ListUsersCommand + App\Command\ListUsersCommand + console.command.about + console.command.assets_install + console.command.cache_clear + console.command.cache_pool_clear + console.command.cache_pool_prune + console.command.cache_pool_invalidate_tags + console.command.cache_pool_delete + console.command.cache_pool_list + console.command.cache_warmup + console.command.config_debug + console.command.config_dump_reference + console.command.container_debug + console.command.container_lint + console.command.debug_autowiring + console.command.dotenv_debug + console.command.event_dispatcher_debug + console.command.router_debug + console.command.router_match + console.command.translation_debug + console.command.translation_extract + console.command.validator_debug + console.command.translation_pull + console.command.translation_push + console.command.xliff_lint + console.command.yaml_lint + console.command.form_debug + console.command.secrets_set + console.command.secrets_remove + console.command.secrets_generate_key + console.command.secrets_list + console.command.secrets_decrypt_to_local + console.command.secrets_encrypt_from_local + console.command.mailer_test + security.command.debug_firewall + security.command.user_password_hash + doctrine.database_create_command + doctrine.database_drop_command + doctrine.query_sql_command + Doctrine\DBAL\Tools\Console\Command\RunSqlCommand + doctrine.cache_clear_metadata_command + doctrine.cache_clear_query_cache_command + doctrine.cache_clear_result_command + doctrine.cache_collection_region_command + doctrine.mapping_convert_command + doctrine.schema_create_command + doctrine.schema_drop_command + doctrine.ensure_production_settings_command + doctrine.clear_entity_region_command + doctrine.mapping_info_command + doctrine.clear_query_region_command + doctrine.query_dql_command + doctrine.schema_update_command + doctrine.schema_validate_command + doctrine.mapping_import_command + twig.command.debug + twig.command.lint + var_dumper.command.server_dump + monolog.command.server_log + doctrine_migrations.diff_command + doctrine_migrations.sync_metadata_command + doctrine_migrations.versions_command + doctrine_migrations.current_command + doctrine_migrations.dump_schema_command + doctrine_migrations.execute_command + doctrine_migrations.generate_command + doctrine_migrations.latest_command + doctrine_migrations.migrate_command + doctrine_migrations.rollup_command + doctrine_migrations.status_command + doctrine_migrations.up_to_date_command + doctrine_migrations.version_command + doctrine.fixtures_load_command + maker.auto_command.make_auth + maker.auto_command.make_command + maker.auto_command.make_twig_component + maker.auto_command.make_controller + maker.auto_command.make_crud + maker.auto_command.make_docker_database + maker.auto_command.make_entity + maker.auto_command.make_fixtures + maker.auto_command.make_form + maker.auto_command.make_message + maker.auto_command.make_messenger_middleware + maker.auto_command.make_registration_form + maker.auto_command.make_reset_password + maker.auto_command.make_serializer_encoder + maker.auto_command.make_serializer_normalizer + maker.auto_command.make_subscriber + maker.auto_command.make_twig_extension + maker.auto_command.make_test + maker.auto_command.make_test + maker.auto_command.make_test + maker.auto_command.make_validator + maker.auto_command.make_voter + maker.auto_command.make_user + maker.auto_command.make_migration + maker.auto_command.make_stimulus_controller + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hI3evCGRxU + 0 + /app/example-symfony-api/var/cache/dev/pools/app + + + + + + + wlhEAsZmW+ + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + lt1odsFEqw + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + G7V1bm8wCw + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + 7vSq-pbvNu + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + YPXHWXiWPh + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + Fq-8PpgkL6 + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + WtkKu21WVp + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + 4rV8IY6Etg + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + rU1NW6p4Mg + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + + + bnxVM9qYHa + 0 + %container.build_id% + /app/example-symfony-api/var/cache/dev/pools/system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The "%alias_id%" service alias is deprecated, use "Symfony\Bundle\SecurityBundle\Security" instead. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml.meta b/integration/testdata/symfony_app/var/cache/dev/App_KernelDevDebugContainer.xml.meta new file mode 100644 index 0000000000000000000000000000000000000000..fb4bff290611cc5cd916cf71f01a224376c6e627 GIT binary patch literal 30494 zcmdU2TXWks7S3ggy^;dC4;D;|x`{j$gzTeB&@OyIga>iGynSSJp)m*KZn z>@dCF&UsP1drXT`FJ*`3*wUOHNAv!BY*C*9^`CF%cRo)QFSGpiTCV^C*uvA#%RjU% z(`tjL7VcA^oqhEa)G}VGH)md1NctU-mH9?G_FW7IrsLfs7!3(_e{kp)q@m^7m^a|_yEMN3e%w9MTrM!zFXm1ShAzkeC-t4uTrK*VIM3>miM|p_G+(AMzbw_=3lVTYX$yMmaDh()MhODT;9#)$*8ua%e;#e zSg+69#-P1KgDC&ay39U6Y9?LYSBao??&6B`P|-#X7t2aTz-N22QqpC`W@5cmb6vE_ zoxnQm7u&J5SBG}I;_?f>*Tqb7`JjJz;){8eL$j{(#dgk4*}38iey1{7=IK)3mAWYJ zDjYgbV|~|)Ja>0InN2J`u~=4|zl$@xNm%knQB6s*s2vE5U20tyf1Vt!X} zo56+jZRZiJ18}iNAozqwSa7K5bhmy{t4ofsx-IW4vSl{Uy4v%y_V<*%=h?ahud2f` z7q!4ADb7O6b)J?_oy}j?;6nZ2XvGQn$0j?z*?)LhvwMolDZiy1t_d$|ZcnjTUz?I* zhwK-%x8xLW=bILHt2{H?$}+sDp*_h|!2?*uc?Xr;Ebn;!;YF=&bOZ-Me&}l|AKXp{R*G7nO9Y7S8m?4E`+X(eq5z`&rM!fZg7?Ast;o5S!^pnU8|fyVEr3B zRQ&G@BRVPeZAaRUfnUL&vPF0dW$8Dom2Ks)1yWnH?=0%d^kA>PW3>lf zJlNZW;BAD&$T$=_F_H=*kkSEu9S^BsQKAV82v;Ge5#d-#MyaBqBw&i6XDxD7 zVc)Q$LurB?>^|2a-}Dj)PRWi0K3{ue3>8tKHY|)(oJbZb9)u(kQc{j%6QH2N(AB4X z!|)XOt6Y~xEY2r?+v|>uUBoHFf<`|jHKHt?F4 z{C)aZuAy6c213z%o(j6!d+9EF+gWyGbW&s$hWiZ$k<^-B{Ezw5gINNER#3{Hxv_; zPzC=}NuBE*@C`c#aq*zkIU0Umi$dn90Qd9lgO*=D>HnXXhuLYYXf(7 zayzh-k?|EKj-rs_L?QyQyucP>p5O@Sm>5*!>tz;(9VMF^3>zu^H7iq-R`txy)u|Bf z%IjveMsoZ2GBU;*X~Y>gIs%gzWH}*$)L4Km1-}(xR>`oJIU5S(J57e$z;Q$Dsi1{q zey{NMY++%dWhN&+ln>a^g|kmufj*YyP4+R@ zM(4R!zhsin_2dBC@^&Aa;}&`wkIT%1_>d8P{ol1Ax24sx0m^!=#T{4 zZrVmQ+eXoeq!riF>biPuau5u>U2bHg0)r4z$Ut&H1(L;vfPtknHV}1UL~5kG%<#lR zy;(L(;E=L0gF9Db05@=&ZutG1Jm*h0*=O6Qb>F!*5t6p)!HT6ra%VfY1KSxHX&%TJ z;uvIBvpvCkJ9F+K&$}c)UD}v9L z9vQ)qsw7|uS5ojW5tK;CnEpuC!Gv}-6?)vuGUj(Ox)F&PW-l3 z9T~TnL&gVl#Nt>a0@8Mg2_h&ria-zsu}7slz0CX^XWwkLdO}g#vTw~=BV(i^o4GN< z5Q-TS5adHkh9Hro@QLFpCr-S~-VFACT5t0szfYI0>Ad-vfG99 zq1)|sN5)Qb8^d9&6l6yej)EAo1SiTUER7Ojg`JmK7XqeZ(3{-Q&_;BdZ&N{6SD-cv z*~o44ZDizF6ah?xlNh=#B4M>8Wg%fevfD!xit$q zMd=nC87)J!p|PNGh``brlps#DCQ%{D?U}>svzui1 zHdDGK;Z%^-_RK-nv+T&o84)WET`xuxq?Li%tzkkzIWL09jD}S&8uc?Pa!AU4E7N%~ z`;gfLz0D2s5?ax|!U&Velw(-Sn_Ky|cjb}sOQIwaG*J;Y2?@i*3Zj)lrDY5qGF3+m z^)e?C9jdxl__YHECK9-y_ChMm+SNwJNwUcH2x=S)sJAl1lQ7aIR+>D?WgR{To}xJmU1n_6ocNd4s8&#TCe_y9-1R zr``q1w(Gn|zk)upqa9%@;D(%fldaPyB8I~X31kzQ4B`;lHYpDnNdg3zL<;g9aI^+C zeCiq|%ilf9`Pv$FyH{lI^FIKi?M;+cwo;uwRwsts6i?f3J{W(!Tb6LnvZ2#Svqmjx z?YvCt@;so+o{zi(4Z3w!>e^M*AyD5iV>N6PetiV(p8b4l&S*FkYjzH0Rue>zL+km9 ztA<0tSB7VI851D#;b*sVZTAjaJx)}5Z?Q##2ne|sZ&}S0X^%-du08IER{zS)AXUq_ zmKZJt;SVteL)cQoBw#3i6wQp4+52Wtz>jX|%IMT_VZJ}qu>*ehvPwM^xv1tO&)OLZ zuc|>PvzB_JQ^^I?{!nSq;cuzX@=z1!PQyaX#jpMlXK<>{4ht3a`HqHz8VgX&zNY$H zrIW|eMPQZEE9SySe@JyAA6?hehbH197oqt>90u;$Ayw4O(wQ|M&c#SB8uEu$c7Wwx zT0K`tAF2r^6Y-I&!ums-!84yb`luf5(r{5rxv>ozbKbE(G#adbwp3^hnoTT?&ODWd z_RMu2Y@69(o)V}sJ?Hr5P7ifZKj)llJ9ln$)^ULb^UakW%7*N)jvL3<@XpjukY~>H z;5eD*9Q1E3U`Vtbfs#+dN3n1IG?VA{^BW?ayj*eUkRr?!K~_mb;5J2gJ_ zhjyOfL|o;WcO64mwU2%(L z9JM=g-f&h+&9R;D*fZyQa3DrYh1U571866zy<6IWY7;S(XI}U*4Ao>M>w$Bxs)2J2 zGue)bmXxD2)c?0n{((cA|3r-Bn@>KJC)x3(7M3jM;UCXD@)JuWHXGnxurv)1C7$`? z1d9EKteZ^*zNFLN(hXof?eJyaqcxp_u-Oj|N9?b+SfipogHp* zM9sPX9$Q6Mn|5r1i`z;v;4P+=i&KB?du2#f9IxMZ;iz<6<$uqPnqq9{t(M*QtR!A` z^_IsaxZ$4_bXC#KhON1ejAY)+u1(gy8NvSvr1";}}s:5:"count";i:1;}i:1;a:6:{s:4:"type";i:16384;s:7:"message";s:224:"The "Symfony\Bridge\Doctrine\Logger\DbalLogger" class implements "Doctrine\DBAL\Logging\SQLLogger" that is deprecated Use {@see \Doctrine\DBAL\Logging\Middleware} or implement {@see \Doctrine\DBAL\Driver\Middleware} instead.";s:4:"file";s:74:"/app/example-symfony-api/vendor/symfony/error-handler/DebugClassLoader.php";s:4:"line";i:333;s:5:"trace";a:1:{i:0;a:3:{s:4:"file";s:82:"/app/example-symfony-api/vendor/symfony/config/Resource/ClassExistenceResource.php";s:4:"line";i:76;s:8:"function";s:12:"class_exists";}}s:5:"count";i:1;}} \ No newline at end of file diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AnnotationsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AnnotationsConfig.php new file mode 100644 index 00000000..daaeae31 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AnnotationsConfig.php @@ -0,0 +1,121 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default 'php_array' + * @param ParamConfigurator|'none'|'php_array'|'file' $value + * @return $this + */ + public function cache($value): static + { + $this->_usedProperties['cache'] = true; + $this->cache = $value; + + return $this; + } + + /** + * @default '%kernel.cache_dir%/annotations' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function fileCacheDir($value): static + { + $this->_usedProperties['fileCacheDir'] = true; + $this->fileCacheDir = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function debug($value): static + { + $this->_usedProperties['debug'] = true; + $this->debug = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('cache', $value)) { + $this->_usedProperties['cache'] = true; + $this->cache = $value['cache']; + unset($value['cache']); + } + + if (array_key_exists('file_cache_dir', $value)) { + $this->_usedProperties['fileCacheDir'] = true; + $this->fileCacheDir = $value['file_cache_dir']; + unset($value['file_cache_dir']); + } + + if (array_key_exists('debug', $value)) { + $this->_usedProperties['debug'] = true; + $this->debug = $value['debug']; + unset($value['debug']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['cache'])) { + $output['cache'] = $this->cache; + } + if (isset($this->_usedProperties['fileCacheDir'])) { + $output['file_cache_dir'] = $this->fileCacheDir; + } + if (isset($this->_usedProperties['debug'])) { + $output['debug'] = $this->debug; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Assets/PackageConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Assets/PackageConfig.php new file mode 100644 index 00000000..4da7d046 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Assets/PackageConfig.php @@ -0,0 +1,190 @@ +_usedProperties['strictMode'] = true; + $this->strictMode = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function versionStrategy($value): static + { + $this->_usedProperties['versionStrategy'] = true; + $this->versionStrategy = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function version($value): static + { + $this->_usedProperties['version'] = true; + $this->version = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function versionFormat($value): static + { + $this->_usedProperties['versionFormat'] = true; + $this->versionFormat = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function jsonManifestPath($value): static + { + $this->_usedProperties['jsonManifestPath'] = true; + $this->jsonManifestPath = $value; + + return $this; + } + + /** + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function basePath($value): static + { + $this->_usedProperties['basePath'] = true; + $this->basePath = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|mixed $value + * + * @return $this + */ + public function baseUrls(mixed $value): static + { + $this->_usedProperties['baseUrls'] = true; + $this->baseUrls = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('strict_mode', $value)) { + $this->_usedProperties['strictMode'] = true; + $this->strictMode = $value['strict_mode']; + unset($value['strict_mode']); + } + + if (array_key_exists('version_strategy', $value)) { + $this->_usedProperties['versionStrategy'] = true; + $this->versionStrategy = $value['version_strategy']; + unset($value['version_strategy']); + } + + if (array_key_exists('version', $value)) { + $this->_usedProperties['version'] = true; + $this->version = $value['version']; + unset($value['version']); + } + + if (array_key_exists('version_format', $value)) { + $this->_usedProperties['versionFormat'] = true; + $this->versionFormat = $value['version_format']; + unset($value['version_format']); + } + + if (array_key_exists('json_manifest_path', $value)) { + $this->_usedProperties['jsonManifestPath'] = true; + $this->jsonManifestPath = $value['json_manifest_path']; + unset($value['json_manifest_path']); + } + + if (array_key_exists('base_path', $value)) { + $this->_usedProperties['basePath'] = true; + $this->basePath = $value['base_path']; + unset($value['base_path']); + } + + if (array_key_exists('base_urls', $value)) { + $this->_usedProperties['baseUrls'] = true; + $this->baseUrls = $value['base_urls']; + unset($value['base_urls']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['strictMode'])) { + $output['strict_mode'] = $this->strictMode; + } + if (isset($this->_usedProperties['versionStrategy'])) { + $output['version_strategy'] = $this->versionStrategy; + } + if (isset($this->_usedProperties['version'])) { + $output['version'] = $this->version; + } + if (isset($this->_usedProperties['versionFormat'])) { + $output['version_format'] = $this->versionFormat; + } + if (isset($this->_usedProperties['jsonManifestPath'])) { + $output['json_manifest_path'] = $this->jsonManifestPath; + } + if (isset($this->_usedProperties['basePath'])) { + $output['base_path'] = $this->basePath; + } + if (isset($this->_usedProperties['baseUrls'])) { + $output['base_urls'] = $this->baseUrls; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AssetsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AssetsConfig.php new file mode 100644 index 00000000..217d78ac --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/AssetsConfig.php @@ -0,0 +1,237 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * Throw an exception if an entry is missing from the manifest.json + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function strictMode($value): static + { + $this->_usedProperties['strictMode'] = true; + $this->strictMode = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function versionStrategy($value): static + { + $this->_usedProperties['versionStrategy'] = true; + $this->versionStrategy = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function version($value): static + { + $this->_usedProperties['version'] = true; + $this->version = $value; + + return $this; + } + + /** + * @default '%%s?%%s' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function versionFormat($value): static + { + $this->_usedProperties['versionFormat'] = true; + $this->versionFormat = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function jsonManifestPath($value): static + { + $this->_usedProperties['jsonManifestPath'] = true; + $this->jsonManifestPath = $value; + + return $this; + } + + /** + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function basePath($value): static + { + $this->_usedProperties['basePath'] = true; + $this->basePath = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|mixed $value + * + * @return $this + */ + public function baseUrls(mixed $value): static + { + $this->_usedProperties['baseUrls'] = true; + $this->baseUrls = $value; + + return $this; + } + + public function package(string $name, array $value = []): \Symfony\Config\Framework\Assets\PackageConfig + { + if (!isset($this->packages[$name])) { + $this->_usedProperties['packages'] = true; + $this->packages[$name] = new \Symfony\Config\Framework\Assets\PackageConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "package()" has already been initialized. You cannot pass values the second time you call package().'); + } + + return $this->packages[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('strict_mode', $value)) { + $this->_usedProperties['strictMode'] = true; + $this->strictMode = $value['strict_mode']; + unset($value['strict_mode']); + } + + if (array_key_exists('version_strategy', $value)) { + $this->_usedProperties['versionStrategy'] = true; + $this->versionStrategy = $value['version_strategy']; + unset($value['version_strategy']); + } + + if (array_key_exists('version', $value)) { + $this->_usedProperties['version'] = true; + $this->version = $value['version']; + unset($value['version']); + } + + if (array_key_exists('version_format', $value)) { + $this->_usedProperties['versionFormat'] = true; + $this->versionFormat = $value['version_format']; + unset($value['version_format']); + } + + if (array_key_exists('json_manifest_path', $value)) { + $this->_usedProperties['jsonManifestPath'] = true; + $this->jsonManifestPath = $value['json_manifest_path']; + unset($value['json_manifest_path']); + } + + if (array_key_exists('base_path', $value)) { + $this->_usedProperties['basePath'] = true; + $this->basePath = $value['base_path']; + unset($value['base_path']); + } + + if (array_key_exists('base_urls', $value)) { + $this->_usedProperties['baseUrls'] = true; + $this->baseUrls = $value['base_urls']; + unset($value['base_urls']); + } + + if (array_key_exists('packages', $value)) { + $this->_usedProperties['packages'] = true; + $this->packages = array_map(function ($v) { return new \Symfony\Config\Framework\Assets\PackageConfig($v); }, $value['packages']); + unset($value['packages']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['strictMode'])) { + $output['strict_mode'] = $this->strictMode; + } + if (isset($this->_usedProperties['versionStrategy'])) { + $output['version_strategy'] = $this->versionStrategy; + } + if (isset($this->_usedProperties['version'])) { + $output['version'] = $this->version; + } + if (isset($this->_usedProperties['versionFormat'])) { + $output['version_format'] = $this->versionFormat; + } + if (isset($this->_usedProperties['jsonManifestPath'])) { + $output['json_manifest_path'] = $this->jsonManifestPath; + } + if (isset($this->_usedProperties['basePath'])) { + $output['base_path'] = $this->basePath; + } + if (isset($this->_usedProperties['baseUrls'])) { + $output['base_urls'] = $this->baseUrls; + } + if (isset($this->_usedProperties['packages'])) { + $output['packages'] = array_map(function ($v) { return $v->toArray(); }, $this->packages); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Cache/PoolConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Cache/PoolConfig.php new file mode 100644 index 00000000..1036a381 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Cache/PoolConfig.php @@ -0,0 +1,194 @@ +|mixed $value + * + * @return $this + */ + public function adapters(mixed $value): static + { + $this->_usedProperties['adapters'] = true; + $this->adapters = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function tags($value): static + { + $this->_usedProperties['tags'] = true; + $this->tags = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function public($value): static + { + $this->_usedProperties['public'] = true; + $this->public = $value; + + return $this; + } + + /** + * Default lifetime of the pool + * @example "300" for 5 minutes expressed in seconds, "PT5M" for five minutes expressed as ISO 8601 time interval, or "5 minutes" as a date expression + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultLifetime($value): static + { + $this->_usedProperties['defaultLifetime'] = true; + $this->defaultLifetime = $value; + + return $this; + } + + /** + * Overwrite the setting from the default provider for this adapter. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function provider($value): static + { + $this->_usedProperties['provider'] = true; + $this->provider = $value; + + return $this; + } + + /** + * @example "messenger.default_bus" to send early expiration events to the default Messenger bus. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function earlyExpirationMessageBus($value): static + { + $this->_usedProperties['earlyExpirationMessageBus'] = true; + $this->earlyExpirationMessageBus = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function clearer($value): static + { + $this->_usedProperties['clearer'] = true; + $this->clearer = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('adapters', $value)) { + $this->_usedProperties['adapters'] = true; + $this->adapters = $value['adapters']; + unset($value['adapters']); + } + + if (array_key_exists('tags', $value)) { + $this->_usedProperties['tags'] = true; + $this->tags = $value['tags']; + unset($value['tags']); + } + + if (array_key_exists('public', $value)) { + $this->_usedProperties['public'] = true; + $this->public = $value['public']; + unset($value['public']); + } + + if (array_key_exists('default_lifetime', $value)) { + $this->_usedProperties['defaultLifetime'] = true; + $this->defaultLifetime = $value['default_lifetime']; + unset($value['default_lifetime']); + } + + if (array_key_exists('provider', $value)) { + $this->_usedProperties['provider'] = true; + $this->provider = $value['provider']; + unset($value['provider']); + } + + if (array_key_exists('early_expiration_message_bus', $value)) { + $this->_usedProperties['earlyExpirationMessageBus'] = true; + $this->earlyExpirationMessageBus = $value['early_expiration_message_bus']; + unset($value['early_expiration_message_bus']); + } + + if (array_key_exists('clearer', $value)) { + $this->_usedProperties['clearer'] = true; + $this->clearer = $value['clearer']; + unset($value['clearer']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['adapters'])) { + $output['adapters'] = $this->adapters; + } + if (isset($this->_usedProperties['tags'])) { + $output['tags'] = $this->tags; + } + if (isset($this->_usedProperties['public'])) { + $output['public'] = $this->public; + } + if (isset($this->_usedProperties['defaultLifetime'])) { + $output['default_lifetime'] = $this->defaultLifetime; + } + if (isset($this->_usedProperties['provider'])) { + $output['provider'] = $this->provider; + } + if (isset($this->_usedProperties['earlyExpirationMessageBus'])) { + $output['early_expiration_message_bus'] = $this->earlyExpirationMessageBus; + } + if (isset($this->_usedProperties['clearer'])) { + $output['clearer'] = $this->clearer; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CacheConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CacheConfig.php new file mode 100644 index 00000000..b870c7bc --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CacheConfig.php @@ -0,0 +1,277 @@ +_usedProperties['prefixSeed'] = true; + $this->prefixSeed = $value; + + return $this; + } + + /** + * App related cache pools configuration + * @default 'cache.adapter.filesystem' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function app($value): static + { + $this->_usedProperties['app'] = true; + $this->app = $value; + + return $this; + } + + /** + * System related cache pools configuration + * @default 'cache.adapter.system' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function system($value): static + { + $this->_usedProperties['system'] = true; + $this->system = $value; + + return $this; + } + + /** + * @default '%kernel.cache_dir%/pools/app' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function directory($value): static + { + $this->_usedProperties['directory'] = true; + $this->directory = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultPsr6Provider($value): static + { + $this->_usedProperties['defaultPsr6Provider'] = true; + $this->defaultPsr6Provider = $value; + + return $this; + } + + /** + * @default 'redis://localhost' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultRedisProvider($value): static + { + $this->_usedProperties['defaultRedisProvider'] = true; + $this->defaultRedisProvider = $value; + + return $this; + } + + /** + * @default 'memcached://localhost' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultMemcachedProvider($value): static + { + $this->_usedProperties['defaultMemcachedProvider'] = true; + $this->defaultMemcachedProvider = $value; + + return $this; + } + + /** + * @default 'database_connection' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultDoctrineDbalProvider($value): static + { + $this->_usedProperties['defaultDoctrineDbalProvider'] = true; + $this->defaultDoctrineDbalProvider = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultPdoProvider($value): static + { + $this->_usedProperties['defaultPdoProvider'] = true; + $this->defaultPdoProvider = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Cache\PoolConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Cache\PoolConfig : static) + */ + public function pool(string $name, mixed $value = []): \Symfony\Config\Framework\Cache\PoolConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['pools'] = true; + $this->pools[$name] = $value; + + return $this; + } + + if (!isset($this->pools[$name]) || !$this->pools[$name] instanceof \Symfony\Config\Framework\Cache\PoolConfig) { + $this->_usedProperties['pools'] = true; + $this->pools[$name] = new \Symfony\Config\Framework\Cache\PoolConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "pool()" has already been initialized. You cannot pass values the second time you call pool().'); + } + + return $this->pools[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('prefix_seed', $value)) { + $this->_usedProperties['prefixSeed'] = true; + $this->prefixSeed = $value['prefix_seed']; + unset($value['prefix_seed']); + } + + if (array_key_exists('app', $value)) { + $this->_usedProperties['app'] = true; + $this->app = $value['app']; + unset($value['app']); + } + + if (array_key_exists('system', $value)) { + $this->_usedProperties['system'] = true; + $this->system = $value['system']; + unset($value['system']); + } + + if (array_key_exists('directory', $value)) { + $this->_usedProperties['directory'] = true; + $this->directory = $value['directory']; + unset($value['directory']); + } + + if (array_key_exists('default_psr6_provider', $value)) { + $this->_usedProperties['defaultPsr6Provider'] = true; + $this->defaultPsr6Provider = $value['default_psr6_provider']; + unset($value['default_psr6_provider']); + } + + if (array_key_exists('default_redis_provider', $value)) { + $this->_usedProperties['defaultRedisProvider'] = true; + $this->defaultRedisProvider = $value['default_redis_provider']; + unset($value['default_redis_provider']); + } + + if (array_key_exists('default_memcached_provider', $value)) { + $this->_usedProperties['defaultMemcachedProvider'] = true; + $this->defaultMemcachedProvider = $value['default_memcached_provider']; + unset($value['default_memcached_provider']); + } + + if (array_key_exists('default_doctrine_dbal_provider', $value)) { + $this->_usedProperties['defaultDoctrineDbalProvider'] = true; + $this->defaultDoctrineDbalProvider = $value['default_doctrine_dbal_provider']; + unset($value['default_doctrine_dbal_provider']); + } + + if (array_key_exists('default_pdo_provider', $value)) { + $this->_usedProperties['defaultPdoProvider'] = true; + $this->defaultPdoProvider = $value['default_pdo_provider']; + unset($value['default_pdo_provider']); + } + + if (array_key_exists('pools', $value)) { + $this->_usedProperties['pools'] = true; + $this->pools = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Cache\PoolConfig($v) : $v; }, $value['pools']); + unset($value['pools']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['prefixSeed'])) { + $output['prefix_seed'] = $this->prefixSeed; + } + if (isset($this->_usedProperties['app'])) { + $output['app'] = $this->app; + } + if (isset($this->_usedProperties['system'])) { + $output['system'] = $this->system; + } + if (isset($this->_usedProperties['directory'])) { + $output['directory'] = $this->directory; + } + if (isset($this->_usedProperties['defaultPsr6Provider'])) { + $output['default_psr6_provider'] = $this->defaultPsr6Provider; + } + if (isset($this->_usedProperties['defaultRedisProvider'])) { + $output['default_redis_provider'] = $this->defaultRedisProvider; + } + if (isset($this->_usedProperties['defaultMemcachedProvider'])) { + $output['default_memcached_provider'] = $this->defaultMemcachedProvider; + } + if (isset($this->_usedProperties['defaultDoctrineDbalProvider'])) { + $output['default_doctrine_dbal_provider'] = $this->defaultDoctrineDbalProvider; + } + if (isset($this->_usedProperties['defaultPdoProvider'])) { + $output['default_pdo_provider'] = $this->defaultPdoProvider; + } + if (isset($this->_usedProperties['pools'])) { + $output['pools'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Cache\PoolConfig ? $v->toArray() : $v; }, $this->pools); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CsrfProtectionConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CsrfProtectionConfig.php new file mode 100644 index 00000000..8827d52c --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/CsrfProtectionConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/EsiConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/EsiConfig.php new file mode 100644 index 00000000..322e8a9e --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/EsiConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ExceptionsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ExceptionsConfig.php new file mode 100644 index 00000000..c2e998a4 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ExceptionsConfig.php @@ -0,0 +1,77 @@ +_usedProperties['logLevel'] = true; + $this->logLevel = $value; + + return $this; + } + + /** + * The status code of the response. Null or 0 to let Symfony decide. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function statusCode($value): static + { + $this->_usedProperties['statusCode'] = true; + $this->statusCode = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('log_level', $value)) { + $this->_usedProperties['logLevel'] = true; + $this->logLevel = $value['log_level']; + unset($value['log_level']); + } + + if (array_key_exists('status_code', $value)) { + $this->_usedProperties['statusCode'] = true; + $this->statusCode = $value['status_code']; + unset($value['status_code']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['logLevel'])) { + $output['log_level'] = $this->logLevel; + } + if (isset($this->_usedProperties['statusCode'])) { + $output['status_code'] = $this->statusCode; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Form/CsrfProtectionConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Form/CsrfProtectionConfig.php new file mode 100644 index 00000000..745a2da3 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Form/CsrfProtectionConfig.php @@ -0,0 +1,75 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default '_token' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function fieldName($value): static + { + $this->_usedProperties['fieldName'] = true; + $this->fieldName = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('field_name', $value)) { + $this->_usedProperties['fieldName'] = true; + $this->fieldName = $value['field_name']; + unset($value['field_name']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['fieldName'])) { + $output['field_name'] = $this->fieldName; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FormConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FormConfig.php new file mode 100644 index 00000000..da40b3ca --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FormConfig.php @@ -0,0 +1,103 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default {"enabled":null,"field_name":"_token"} + */ + public function csrfProtection(array $value = []): \Symfony\Config\Framework\Form\CsrfProtectionConfig + { + if (null === $this->csrfProtection) { + $this->_usedProperties['csrfProtection'] = true; + $this->csrfProtection = new \Symfony\Config\Framework\Form\CsrfProtectionConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "csrfProtection()" has already been initialized. You cannot pass values the second time you call csrfProtection().'); + } + + return $this->csrfProtection; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @deprecated The child node "legacy_error_messages" at path "form" is deprecated. + * @return $this + */ + public function legacyErrorMessages($value): static + { + $this->_usedProperties['legacyErrorMessages'] = true; + $this->legacyErrorMessages = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('csrf_protection', $value)) { + $this->_usedProperties['csrfProtection'] = true; + $this->csrfProtection = new \Symfony\Config\Framework\Form\CsrfProtectionConfig($value['csrf_protection']); + unset($value['csrf_protection']); + } + + if (array_key_exists('legacy_error_messages', $value)) { + $this->_usedProperties['legacyErrorMessages'] = true; + $this->legacyErrorMessages = $value['legacy_error_messages']; + unset($value['legacy_error_messages']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['csrfProtection'])) { + $output['csrf_protection'] = $this->csrfProtection->toArray(); + } + if (isset($this->_usedProperties['legacyErrorMessages'])) { + $output['legacy_error_messages'] = $this->legacyErrorMessages; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FragmentsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FragmentsConfig.php new file mode 100644 index 00000000..10b20839 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/FragmentsConfig.php @@ -0,0 +1,98 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function hincludeDefaultTemplate($value): static + { + $this->_usedProperties['hincludeDefaultTemplate'] = true; + $this->hincludeDefaultTemplate = $value; + + return $this; + } + + /** + * @default '/_fragment' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function path($value): static + { + $this->_usedProperties['path'] = true; + $this->path = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('hinclude_default_template', $value)) { + $this->_usedProperties['hincludeDefaultTemplate'] = true; + $this->hincludeDefaultTemplate = $value['hinclude_default_template']; + unset($value['hinclude_default_template']); + } + + if (array_key_exists('path', $value)) { + $this->_usedProperties['path'] = true; + $this->path = $value['path']; + unset($value['path']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['hincludeDefaultTemplate'])) { + $output['hinclude_default_template'] = $this->hincludeDefaultTemplate; + } + if (isset($this->_usedProperties['path'])) { + $output['path'] = $this->path; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizer/SanitizerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizer/SanitizerConfig.php new file mode 100644 index 00000000..9fcadcde --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizer/SanitizerConfig.php @@ -0,0 +1,445 @@ +_usedProperties['allowSafeElements'] = true; + $this->allowSafeElements = $value; + + return $this; + } + + /** + * Allows all static elements and attributes from the W3C Sanitizer API standard. + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function allowStaticElements($value): static + { + $this->_usedProperties['allowStaticElements'] = true; + $this->allowStaticElements = $value; + + return $this; + } + + /** + * @return $this + */ + public function allowElement(string $name, mixed $value): static + { + $this->_usedProperties['allowElements'] = true; + $this->allowElements[$name] = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function blockElements(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['blockElements'] = true; + $this->blockElements = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function dropElements(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['dropElements'] = true; + $this->dropElements = $value; + + return $this; + } + + /** + * @return $this + */ + public function allowAttribute(string $name, mixed $value): static + { + $this->_usedProperties['allowAttributes'] = true; + $this->allowAttributes[$name] = $value; + + return $this; + } + + /** + * @return $this + */ + public function dropAttribute(string $name, mixed $value): static + { + $this->_usedProperties['dropAttributes'] = true; + $this->dropAttributes[$name] = $value; + + return $this; + } + + /** + * @return $this + */ + public function forceAttribute(string $name, ParamConfigurator|array $value): static + { + $this->_usedProperties['forceAttributes'] = true; + $this->forceAttributes[$name] = $value; + + return $this; + } + + /** + * Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function forceHttpsUrls($value): static + { + $this->_usedProperties['forceHttpsUrls'] = true; + $this->forceHttpsUrls = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function allowedLinkSchemes(ParamConfigurator|array $value): static + { + $this->_usedProperties['allowedLinkSchemes'] = true; + $this->allowedLinkSchemes = $value; + + return $this; + } + + /** + * Allows only a given list of hosts to be used in links href attributes. + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function allowedLinkHosts(mixed $value = NULL): static + { + $this->_usedProperties['allowedLinkHosts'] = true; + $this->allowedLinkHosts = $value; + + return $this; + } + + /** + * Allows relative URLs to be used in links href attributes. + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function allowRelativeLinks($value): static + { + $this->_usedProperties['allowRelativeLinks'] = true; + $this->allowRelativeLinks = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function allowedMediaSchemes(ParamConfigurator|array $value): static + { + $this->_usedProperties['allowedMediaSchemes'] = true; + $this->allowedMediaSchemes = $value; + + return $this; + } + + /** + * Allows only a given list of hosts to be used in media source attributes (img, audio, video, ...). + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function allowedMediaHosts(mixed $value = NULL): static + { + $this->_usedProperties['allowedMediaHosts'] = true; + $this->allowedMediaHosts = $value; + + return $this; + } + + /** + * Allows relative URLs to be used in media source attributes (img, audio, video, ...). + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function allowRelativeMedias($value): static + { + $this->_usedProperties['allowRelativeMedias'] = true; + $this->allowRelativeMedias = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function withAttributeSanitizers(ParamConfigurator|array $value): static + { + $this->_usedProperties['withAttributeSanitizers'] = true; + $this->withAttributeSanitizers = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function withoutAttributeSanitizers(ParamConfigurator|array $value): static + { + $this->_usedProperties['withoutAttributeSanitizers'] = true; + $this->withoutAttributeSanitizers = $value; + + return $this; + } + + /** + * The maximum length allowed for the sanitized input. + * @default 0 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxInputLength($value): static + { + $this->_usedProperties['maxInputLength'] = true; + $this->maxInputLength = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('allow_safe_elements', $value)) { + $this->_usedProperties['allowSafeElements'] = true; + $this->allowSafeElements = $value['allow_safe_elements']; + unset($value['allow_safe_elements']); + } + + if (array_key_exists('allow_static_elements', $value)) { + $this->_usedProperties['allowStaticElements'] = true; + $this->allowStaticElements = $value['allow_static_elements']; + unset($value['allow_static_elements']); + } + + if (array_key_exists('allow_elements', $value)) { + $this->_usedProperties['allowElements'] = true; + $this->allowElements = $value['allow_elements']; + unset($value['allow_elements']); + } + + if (array_key_exists('block_elements', $value)) { + $this->_usedProperties['blockElements'] = true; + $this->blockElements = $value['block_elements']; + unset($value['block_elements']); + } + + if (array_key_exists('drop_elements', $value)) { + $this->_usedProperties['dropElements'] = true; + $this->dropElements = $value['drop_elements']; + unset($value['drop_elements']); + } + + if (array_key_exists('allow_attributes', $value)) { + $this->_usedProperties['allowAttributes'] = true; + $this->allowAttributes = $value['allow_attributes']; + unset($value['allow_attributes']); + } + + if (array_key_exists('drop_attributes', $value)) { + $this->_usedProperties['dropAttributes'] = true; + $this->dropAttributes = $value['drop_attributes']; + unset($value['drop_attributes']); + } + + if (array_key_exists('force_attributes', $value)) { + $this->_usedProperties['forceAttributes'] = true; + $this->forceAttributes = $value['force_attributes']; + unset($value['force_attributes']); + } + + if (array_key_exists('force_https_urls', $value)) { + $this->_usedProperties['forceHttpsUrls'] = true; + $this->forceHttpsUrls = $value['force_https_urls']; + unset($value['force_https_urls']); + } + + if (array_key_exists('allowed_link_schemes', $value)) { + $this->_usedProperties['allowedLinkSchemes'] = true; + $this->allowedLinkSchemes = $value['allowed_link_schemes']; + unset($value['allowed_link_schemes']); + } + + if (array_key_exists('allowed_link_hosts', $value)) { + $this->_usedProperties['allowedLinkHosts'] = true; + $this->allowedLinkHosts = $value['allowed_link_hosts']; + unset($value['allowed_link_hosts']); + } + + if (array_key_exists('allow_relative_links', $value)) { + $this->_usedProperties['allowRelativeLinks'] = true; + $this->allowRelativeLinks = $value['allow_relative_links']; + unset($value['allow_relative_links']); + } + + if (array_key_exists('allowed_media_schemes', $value)) { + $this->_usedProperties['allowedMediaSchemes'] = true; + $this->allowedMediaSchemes = $value['allowed_media_schemes']; + unset($value['allowed_media_schemes']); + } + + if (array_key_exists('allowed_media_hosts', $value)) { + $this->_usedProperties['allowedMediaHosts'] = true; + $this->allowedMediaHosts = $value['allowed_media_hosts']; + unset($value['allowed_media_hosts']); + } + + if (array_key_exists('allow_relative_medias', $value)) { + $this->_usedProperties['allowRelativeMedias'] = true; + $this->allowRelativeMedias = $value['allow_relative_medias']; + unset($value['allow_relative_medias']); + } + + if (array_key_exists('with_attribute_sanitizers', $value)) { + $this->_usedProperties['withAttributeSanitizers'] = true; + $this->withAttributeSanitizers = $value['with_attribute_sanitizers']; + unset($value['with_attribute_sanitizers']); + } + + if (array_key_exists('without_attribute_sanitizers', $value)) { + $this->_usedProperties['withoutAttributeSanitizers'] = true; + $this->withoutAttributeSanitizers = $value['without_attribute_sanitizers']; + unset($value['without_attribute_sanitizers']); + } + + if (array_key_exists('max_input_length', $value)) { + $this->_usedProperties['maxInputLength'] = true; + $this->maxInputLength = $value['max_input_length']; + unset($value['max_input_length']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['allowSafeElements'])) { + $output['allow_safe_elements'] = $this->allowSafeElements; + } + if (isset($this->_usedProperties['allowStaticElements'])) { + $output['allow_static_elements'] = $this->allowStaticElements; + } + if (isset($this->_usedProperties['allowElements'])) { + $output['allow_elements'] = $this->allowElements; + } + if (isset($this->_usedProperties['blockElements'])) { + $output['block_elements'] = $this->blockElements; + } + if (isset($this->_usedProperties['dropElements'])) { + $output['drop_elements'] = $this->dropElements; + } + if (isset($this->_usedProperties['allowAttributes'])) { + $output['allow_attributes'] = $this->allowAttributes; + } + if (isset($this->_usedProperties['dropAttributes'])) { + $output['drop_attributes'] = $this->dropAttributes; + } + if (isset($this->_usedProperties['forceAttributes'])) { + $output['force_attributes'] = $this->forceAttributes; + } + if (isset($this->_usedProperties['forceHttpsUrls'])) { + $output['force_https_urls'] = $this->forceHttpsUrls; + } + if (isset($this->_usedProperties['allowedLinkSchemes'])) { + $output['allowed_link_schemes'] = $this->allowedLinkSchemes; + } + if (isset($this->_usedProperties['allowedLinkHosts'])) { + $output['allowed_link_hosts'] = $this->allowedLinkHosts; + } + if (isset($this->_usedProperties['allowRelativeLinks'])) { + $output['allow_relative_links'] = $this->allowRelativeLinks; + } + if (isset($this->_usedProperties['allowedMediaSchemes'])) { + $output['allowed_media_schemes'] = $this->allowedMediaSchemes; + } + if (isset($this->_usedProperties['allowedMediaHosts'])) { + $output['allowed_media_hosts'] = $this->allowedMediaHosts; + } + if (isset($this->_usedProperties['allowRelativeMedias'])) { + $output['allow_relative_medias'] = $this->allowRelativeMedias; + } + if (isset($this->_usedProperties['withAttributeSanitizers'])) { + $output['with_attribute_sanitizers'] = $this->withAttributeSanitizers; + } + if (isset($this->_usedProperties['withoutAttributeSanitizers'])) { + $output['without_attribute_sanitizers'] = $this->withoutAttributeSanitizers; + } + if (isset($this->_usedProperties['maxInputLength'])) { + $output['max_input_length'] = $this->maxInputLength; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizerConfig.php new file mode 100644 index 00000000..17a5b5f8 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HtmlSanitizerConfig.php @@ -0,0 +1,76 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function sanitizer(string $name, array $value = []): \Symfony\Config\Framework\HtmlSanitizer\SanitizerConfig + { + if (!isset($this->sanitizers[$name])) { + $this->_usedProperties['sanitizers'] = true; + $this->sanitizers[$name] = new \Symfony\Config\Framework\HtmlSanitizer\SanitizerConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "sanitizer()" has already been initialized. You cannot pass values the second time you call sanitizer().'); + } + + return $this->sanitizers[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('sanitizers', $value)) { + $this->_usedProperties['sanitizers'] = true; + $this->sanitizers = array_map(function ($v) { return new \Symfony\Config\Framework\HtmlSanitizer\SanitizerConfig($v); }, $value['sanitizers']); + unset($value['sanitizers']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['sanitizers'])) { + $output['sanitizers'] = array_map(function ($v) { return $v->toArray(); }, $this->sanitizers); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpCacheConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpCacheConfig.php new file mode 100644 index 00000000..30e44412 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpCacheConfig.php @@ -0,0 +1,282 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default '%kernel.debug%' + * @param ParamConfigurator|bool $value + * @return $this + */ + public function debug($value): static + { + $this->_usedProperties['debug'] = true; + $this->debug = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|'none'|'short'|'full' $value + * @return $this + */ + public function traceLevel($value): static + { + $this->_usedProperties['traceLevel'] = true; + $this->traceLevel = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function traceHeader($value): static + { + $this->_usedProperties['traceHeader'] = true; + $this->traceHeader = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function defaultTtl($value): static + { + $this->_usedProperties['defaultTtl'] = true; + $this->defaultTtl = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function privateHeaders(ParamConfigurator|array $value): static + { + $this->_usedProperties['privateHeaders'] = true; + $this->privateHeaders = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function allowReload($value): static + { + $this->_usedProperties['allowReload'] = true; + $this->allowReload = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function allowRevalidate($value): static + { + $this->_usedProperties['allowRevalidate'] = true; + $this->allowRevalidate = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function staleWhileRevalidate($value): static + { + $this->_usedProperties['staleWhileRevalidate'] = true; + $this->staleWhileRevalidate = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function staleIfError($value): static + { + $this->_usedProperties['staleIfError'] = true; + $this->staleIfError = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function terminateOnCacheHit($value): static + { + $this->_usedProperties['terminateOnCacheHit'] = true; + $this->terminateOnCacheHit = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('debug', $value)) { + $this->_usedProperties['debug'] = true; + $this->debug = $value['debug']; + unset($value['debug']); + } + + if (array_key_exists('trace_level', $value)) { + $this->_usedProperties['traceLevel'] = true; + $this->traceLevel = $value['trace_level']; + unset($value['trace_level']); + } + + if (array_key_exists('trace_header', $value)) { + $this->_usedProperties['traceHeader'] = true; + $this->traceHeader = $value['trace_header']; + unset($value['trace_header']); + } + + if (array_key_exists('default_ttl', $value)) { + $this->_usedProperties['defaultTtl'] = true; + $this->defaultTtl = $value['default_ttl']; + unset($value['default_ttl']); + } + + if (array_key_exists('private_headers', $value)) { + $this->_usedProperties['privateHeaders'] = true; + $this->privateHeaders = $value['private_headers']; + unset($value['private_headers']); + } + + if (array_key_exists('allow_reload', $value)) { + $this->_usedProperties['allowReload'] = true; + $this->allowReload = $value['allow_reload']; + unset($value['allow_reload']); + } + + if (array_key_exists('allow_revalidate', $value)) { + $this->_usedProperties['allowRevalidate'] = true; + $this->allowRevalidate = $value['allow_revalidate']; + unset($value['allow_revalidate']); + } + + if (array_key_exists('stale_while_revalidate', $value)) { + $this->_usedProperties['staleWhileRevalidate'] = true; + $this->staleWhileRevalidate = $value['stale_while_revalidate']; + unset($value['stale_while_revalidate']); + } + + if (array_key_exists('stale_if_error', $value)) { + $this->_usedProperties['staleIfError'] = true; + $this->staleIfError = $value['stale_if_error']; + unset($value['stale_if_error']); + } + + if (array_key_exists('terminate_on_cache_hit', $value)) { + $this->_usedProperties['terminateOnCacheHit'] = true; + $this->terminateOnCacheHit = $value['terminate_on_cache_hit']; + unset($value['terminate_on_cache_hit']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['debug'])) { + $output['debug'] = $this->debug; + } + if (isset($this->_usedProperties['traceLevel'])) { + $output['trace_level'] = $this->traceLevel; + } + if (isset($this->_usedProperties['traceHeader'])) { + $output['trace_header'] = $this->traceHeader; + } + if (isset($this->_usedProperties['defaultTtl'])) { + $output['default_ttl'] = $this->defaultTtl; + } + if (isset($this->_usedProperties['privateHeaders'])) { + $output['private_headers'] = $this->privateHeaders; + } + if (isset($this->_usedProperties['allowReload'])) { + $output['allow_reload'] = $this->allowReload; + } + if (isset($this->_usedProperties['allowRevalidate'])) { + $output['allow_revalidate'] = $this->allowRevalidate; + } + if (isset($this->_usedProperties['staleWhileRevalidate'])) { + $output['stale_while_revalidate'] = $this->staleWhileRevalidate; + } + if (isset($this->_usedProperties['staleIfError'])) { + $output['stale_if_error'] = $this->staleIfError; + } + if (isset($this->_usedProperties['terminateOnCacheHit'])) { + $output['terminate_on_cache_hit'] = $this->terminateOnCacheHit; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/PeerFingerprintConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/PeerFingerprintConfig.php new file mode 100644 index 00000000..910bc005 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/PeerFingerprintConfig.php @@ -0,0 +1,101 @@ +_usedProperties['sha1'] = true; + $this->sha1 = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function pinsha256(mixed $value): static + { + $this->_usedProperties['pinsha256'] = true; + $this->pinsha256 = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function md5(mixed $value): static + { + $this->_usedProperties['md5'] = true; + $this->md5 = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('sha1', $value)) { + $this->_usedProperties['sha1'] = true; + $this->sha1 = $value['sha1']; + unset($value['sha1']); + } + + if (array_key_exists('pin-sha256', $value)) { + $this->_usedProperties['pinsha256'] = true; + $this->pinsha256 = $value['pin-sha256']; + unset($value['pin-sha256']); + } + + if (array_key_exists('md5', $value)) { + $this->_usedProperties['md5'] = true; + $this->md5 = $value['md5']; + unset($value['md5']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['sha1'])) { + $output['sha1'] = $this->sha1; + } + if (isset($this->_usedProperties['pinsha256'])) { + $output['pin-sha256'] = $this->pinsha256; + } + if (isset($this->_usedProperties['md5'])) { + $output['md5'] = $this->md5; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailed/HttpCodeConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailed/HttpCodeConfig.php new file mode 100644 index 00000000..a4d7c62b --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailed/HttpCodeConfig.php @@ -0,0 +1,75 @@ +_usedProperties['code'] = true; + $this->code = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function methods(ParamConfigurator|array $value): static + { + $this->_usedProperties['methods'] = true; + $this->methods = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('code', $value)) { + $this->_usedProperties['code'] = true; + $this->code = $value['code']; + unset($value['code']); + } + + if (array_key_exists('methods', $value)) { + $this->_usedProperties['methods'] = true; + $this->methods = $value['methods']; + unset($value['methods']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['code'])) { + $output['code'] = $this->code; + } + if (isset($this->_usedProperties['methods'])) { + $output['methods'] = $this->methods; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailedConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailedConfig.php new file mode 100644 index 00000000..86ceea8e --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptions/RetryFailedConfig.php @@ -0,0 +1,233 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * service id to override the retry strategy + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function retryStrategy($value): static + { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * A list of HTTP status code that triggers a retry + * @return \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig : static) + */ + public function httpCode(string $code, array $value = []): \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes[$code] = $value; + + return $this; + } + + if (!isset($this->httpCodes[$code]) || !$this->httpCodes[$code] instanceof \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes[$code] = new \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "httpCode()" has already been initialized. You cannot pass values the second time you call httpCode().'); + } + + return $this->httpCodes[$code]; + } + + /** + * @default 3 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxRetries($value): static + { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value; + + return $this; + } + + /** + * Time in ms to delay (or the initial value when multiplier is used) + * @default 1000 + * @param ParamConfigurator|int $value + * @return $this + */ + public function delay($value): static + { + $this->_usedProperties['delay'] = true; + $this->delay = $value; + + return $this; + } + + /** + * If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries) + * @default 2 + * @param ParamConfigurator|float $value + * @return $this + */ + public function multiplier($value): static + { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value; + + return $this; + } + + /** + * Max time in ms that a retry should ever be delayed (0 = infinite) + * @default 0 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxDelay($value): static + { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value; + + return $this; + } + + /** + * Randomness in percent (between 0 and 1) to apply to the delay + * @default 0.1 + * @param ParamConfigurator|float $value + * @return $this + */ + public function jitter($value): static + { + $this->_usedProperties['jitter'] = true; + $this->jitter = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('retry_strategy', $value)) { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = $value['retry_strategy']; + unset($value['retry_strategy']); + } + + if (array_key_exists('http_codes', $value)) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig($v) : $v; }, $value['http_codes']); + unset($value['http_codes']); + } + + if (array_key_exists('max_retries', $value)) { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value['max_retries']; + unset($value['max_retries']); + } + + if (array_key_exists('delay', $value)) { + $this->_usedProperties['delay'] = true; + $this->delay = $value['delay']; + unset($value['delay']); + } + + if (array_key_exists('multiplier', $value)) { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value['multiplier']; + unset($value['multiplier']); + } + + if (array_key_exists('max_delay', $value)) { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value['max_delay']; + unset($value['max_delay']); + } + + if (array_key_exists('jitter', $value)) { + $this->_usedProperties['jitter'] = true; + $this->jitter = $value['jitter']; + unset($value['jitter']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['retryStrategy'])) { + $output['retry_strategy'] = $this->retryStrategy; + } + if (isset($this->_usedProperties['httpCodes'])) { + $output['http_codes'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailed\HttpCodeConfig ? $v->toArray() : $v; }, $this->httpCodes); + } + if (isset($this->_usedProperties['maxRetries'])) { + $output['max_retries'] = $this->maxRetries; + } + if (isset($this->_usedProperties['delay'])) { + $output['delay'] = $this->delay; + } + if (isset($this->_usedProperties['multiplier'])) { + $output['multiplier'] = $this->multiplier; + } + if (isset($this->_usedProperties['maxDelay'])) { + $output['max_delay'] = $this->maxDelay; + } + if (isset($this->_usedProperties['jitter'])) { + $output['jitter'] = $this->jitter; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptionsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptionsConfig.php new file mode 100644 index 00000000..9ed4ffd6 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/DefaultOptionsConfig.php @@ -0,0 +1,495 @@ +_usedProperties['headers'] = true; + $this->headers[$name] = $value; + + return $this; + } + + /** + * The maximum number of redirects to follow. + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxRedirects($value): static + { + $this->_usedProperties['maxRedirects'] = true; + $this->maxRedirects = $value; + + return $this; + } + + /** + * The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function httpVersion($value): static + { + $this->_usedProperties['httpVersion'] = true; + $this->httpVersion = $value; + + return $this; + } + + /** + * @return $this + */ + public function resolve(string $host, mixed $value): static + { + $this->_usedProperties['resolve'] = true; + $this->resolve[$host] = $value; + + return $this; + } + + /** + * The URL of the proxy to pass requests through or null for automatic detection. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function proxy($value): static + { + $this->_usedProperties['proxy'] = true; + $this->proxy = $value; + + return $this; + } + + /** + * A comma separated list of hosts that do not require a proxy to be reached. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function noProxy($value): static + { + $this->_usedProperties['noProxy'] = true; + $this->noProxy = $value; + + return $this; + } + + /** + * The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * @default null + * @param ParamConfigurator|float $value + * @return $this + */ + public function timeout($value): static + { + $this->_usedProperties['timeout'] = true; + $this->timeout = $value; + + return $this; + } + + /** + * The maximum execution time for the request+response as a whole. + * @default null + * @param ParamConfigurator|float $value + * @return $this + */ + public function maxDuration($value): static + { + $this->_usedProperties['maxDuration'] = true; + $this->maxDuration = $value; + + return $this; + } + + /** + * A network interface name, IP address, a host name or a UNIX socket to bind to. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function bindto($value): static + { + $this->_usedProperties['bindto'] = true; + $this->bindto = $value; + + return $this; + } + + /** + * Indicates if the peer should be verified in an SSL/TLS context. + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function verifyPeer($value): static + { + $this->_usedProperties['verifyPeer'] = true; + $this->verifyPeer = $value; + + return $this; + } + + /** + * Indicates if the host should exist as a certificate common name. + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function verifyHost($value): static + { + $this->_usedProperties['verifyHost'] = true; + $this->verifyHost = $value; + + return $this; + } + + /** + * A certificate authority file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cafile($value): static + { + $this->_usedProperties['cafile'] = true; + $this->cafile = $value; + + return $this; + } + + /** + * A directory that contains multiple certificate authority files. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function capath($value): static + { + $this->_usedProperties['capath'] = true; + $this->capath = $value; + + return $this; + } + + /** + * A PEM formatted certificate file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function localCert($value): static + { + $this->_usedProperties['localCert'] = true; + $this->localCert = $value; + + return $this; + } + + /** + * A private key file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function localPk($value): static + { + $this->_usedProperties['localPk'] = true; + $this->localPk = $value; + + return $this; + } + + /** + * The passphrase used to encrypt the "local_pk" file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function passphrase($value): static + { + $this->_usedProperties['passphrase'] = true; + $this->passphrase = $value; + + return $this; + } + + /** + * A list of SSL/TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...) + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function ciphers($value): static + { + $this->_usedProperties['ciphers'] = true; + $this->ciphers = $value; + + return $this; + } + + /** + * Associative array: hashing algorithm => hash(es). + */ + public function peerFingerprint(array $value = []): \Symfony\Config\Framework\HttpClient\DefaultOptions\PeerFingerprintConfig + { + if (null === $this->peerFingerprint) { + $this->_usedProperties['peerFingerprint'] = true; + $this->peerFingerprint = new \Symfony\Config\Framework\HttpClient\DefaultOptions\PeerFingerprintConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "peerFingerprint()" has already been initialized. You cannot pass values the second time you call peerFingerprint().'); + } + + return $this->peerFingerprint; + } + + /** + * @template TValue + * @param TValue $value + * @default {"enabled":false,"retry_strategy":null,"http_codes":[],"max_retries":3,"delay":1000,"multiplier":2,"max_delay":0,"jitter":0.1} + * @return \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig : static) + */ + public function retryFailed(mixed $value = []): \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = $value; + + return $this; + } + + if (!$this->retryFailed instanceof \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = new \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "retryFailed()" has already been initialized. You cannot pass values the second time you call retryFailed().'); + } + + return $this->retryFailed; + } + + public function __construct(array $value = []) + { + if (array_key_exists('headers', $value)) { + $this->_usedProperties['headers'] = true; + $this->headers = $value['headers']; + unset($value['headers']); + } + + if (array_key_exists('max_redirects', $value)) { + $this->_usedProperties['maxRedirects'] = true; + $this->maxRedirects = $value['max_redirects']; + unset($value['max_redirects']); + } + + if (array_key_exists('http_version', $value)) { + $this->_usedProperties['httpVersion'] = true; + $this->httpVersion = $value['http_version']; + unset($value['http_version']); + } + + if (array_key_exists('resolve', $value)) { + $this->_usedProperties['resolve'] = true; + $this->resolve = $value['resolve']; + unset($value['resolve']); + } + + if (array_key_exists('proxy', $value)) { + $this->_usedProperties['proxy'] = true; + $this->proxy = $value['proxy']; + unset($value['proxy']); + } + + if (array_key_exists('no_proxy', $value)) { + $this->_usedProperties['noProxy'] = true; + $this->noProxy = $value['no_proxy']; + unset($value['no_proxy']); + } + + if (array_key_exists('timeout', $value)) { + $this->_usedProperties['timeout'] = true; + $this->timeout = $value['timeout']; + unset($value['timeout']); + } + + if (array_key_exists('max_duration', $value)) { + $this->_usedProperties['maxDuration'] = true; + $this->maxDuration = $value['max_duration']; + unset($value['max_duration']); + } + + if (array_key_exists('bindto', $value)) { + $this->_usedProperties['bindto'] = true; + $this->bindto = $value['bindto']; + unset($value['bindto']); + } + + if (array_key_exists('verify_peer', $value)) { + $this->_usedProperties['verifyPeer'] = true; + $this->verifyPeer = $value['verify_peer']; + unset($value['verify_peer']); + } + + if (array_key_exists('verify_host', $value)) { + $this->_usedProperties['verifyHost'] = true; + $this->verifyHost = $value['verify_host']; + unset($value['verify_host']); + } + + if (array_key_exists('cafile', $value)) { + $this->_usedProperties['cafile'] = true; + $this->cafile = $value['cafile']; + unset($value['cafile']); + } + + if (array_key_exists('capath', $value)) { + $this->_usedProperties['capath'] = true; + $this->capath = $value['capath']; + unset($value['capath']); + } + + if (array_key_exists('local_cert', $value)) { + $this->_usedProperties['localCert'] = true; + $this->localCert = $value['local_cert']; + unset($value['local_cert']); + } + + if (array_key_exists('local_pk', $value)) { + $this->_usedProperties['localPk'] = true; + $this->localPk = $value['local_pk']; + unset($value['local_pk']); + } + + if (array_key_exists('passphrase', $value)) { + $this->_usedProperties['passphrase'] = true; + $this->passphrase = $value['passphrase']; + unset($value['passphrase']); + } + + if (array_key_exists('ciphers', $value)) { + $this->_usedProperties['ciphers'] = true; + $this->ciphers = $value['ciphers']; + unset($value['ciphers']); + } + + if (array_key_exists('peer_fingerprint', $value)) { + $this->_usedProperties['peerFingerprint'] = true; + $this->peerFingerprint = new \Symfony\Config\Framework\HttpClient\DefaultOptions\PeerFingerprintConfig($value['peer_fingerprint']); + unset($value['peer_fingerprint']); + } + + if (array_key_exists('retry_failed', $value)) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = \is_array($value['retry_failed']) ? new \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig($value['retry_failed']) : $value['retry_failed']; + unset($value['retry_failed']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['headers'])) { + $output['headers'] = $this->headers; + } + if (isset($this->_usedProperties['maxRedirects'])) { + $output['max_redirects'] = $this->maxRedirects; + } + if (isset($this->_usedProperties['httpVersion'])) { + $output['http_version'] = $this->httpVersion; + } + if (isset($this->_usedProperties['resolve'])) { + $output['resolve'] = $this->resolve; + } + if (isset($this->_usedProperties['proxy'])) { + $output['proxy'] = $this->proxy; + } + if (isset($this->_usedProperties['noProxy'])) { + $output['no_proxy'] = $this->noProxy; + } + if (isset($this->_usedProperties['timeout'])) { + $output['timeout'] = $this->timeout; + } + if (isset($this->_usedProperties['maxDuration'])) { + $output['max_duration'] = $this->maxDuration; + } + if (isset($this->_usedProperties['bindto'])) { + $output['bindto'] = $this->bindto; + } + if (isset($this->_usedProperties['verifyPeer'])) { + $output['verify_peer'] = $this->verifyPeer; + } + if (isset($this->_usedProperties['verifyHost'])) { + $output['verify_host'] = $this->verifyHost; + } + if (isset($this->_usedProperties['cafile'])) { + $output['cafile'] = $this->cafile; + } + if (isset($this->_usedProperties['capath'])) { + $output['capath'] = $this->capath; + } + if (isset($this->_usedProperties['localCert'])) { + $output['local_cert'] = $this->localCert; + } + if (isset($this->_usedProperties['localPk'])) { + $output['local_pk'] = $this->localPk; + } + if (isset($this->_usedProperties['passphrase'])) { + $output['passphrase'] = $this->passphrase; + } + if (isset($this->_usedProperties['ciphers'])) { + $output['ciphers'] = $this->ciphers; + } + if (isset($this->_usedProperties['peerFingerprint'])) { + $output['peer_fingerprint'] = $this->peerFingerprint->toArray(); + } + if (isset($this->_usedProperties['retryFailed'])) { + $output['retry_failed'] = $this->retryFailed instanceof \Symfony\Config\Framework\HttpClient\DefaultOptions\RetryFailedConfig ? $this->retryFailed->toArray() : $this->retryFailed; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig.php new file mode 100644 index 00000000..5e10057f --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig.php @@ -0,0 +1,636 @@ +_usedProperties['scope'] = true; + $this->scope = $value; + + return $this; + } + + /** + * The URI to resolve relative URLs, following rules in RFC 3985, section 2. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function baseUri($value): static + { + $this->_usedProperties['baseUri'] = true; + $this->baseUri = $value; + + return $this; + } + + /** + * An HTTP Basic authentication "username:password". + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function authBasic($value): static + { + $this->_usedProperties['authBasic'] = true; + $this->authBasic = $value; + + return $this; + } + + /** + * A token enabling HTTP Bearer authorization. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function authBearer($value): static + { + $this->_usedProperties['authBearer'] = true; + $this->authBearer = $value; + + return $this; + } + + /** + * A "username:password" pair to use Microsoft NTLM authentication (requires the cURL extension). + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function authNtlm($value): static + { + $this->_usedProperties['authNtlm'] = true; + $this->authNtlm = $value; + + return $this; + } + + /** + * @return $this + */ + public function query(string $key, mixed $value): static + { + $this->_usedProperties['query'] = true; + $this->query[$key] = $value; + + return $this; + } + + /** + * @return $this + */ + public function header(string $name, mixed $value): static + { + $this->_usedProperties['headers'] = true; + $this->headers[$name] = $value; + + return $this; + } + + /** + * The maximum number of redirects to follow. + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxRedirects($value): static + { + $this->_usedProperties['maxRedirects'] = true; + $this->maxRedirects = $value; + + return $this; + } + + /** + * The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function httpVersion($value): static + { + $this->_usedProperties['httpVersion'] = true; + $this->httpVersion = $value; + + return $this; + } + + /** + * @return $this + */ + public function resolve(string $host, mixed $value): static + { + $this->_usedProperties['resolve'] = true; + $this->resolve[$host] = $value; + + return $this; + } + + /** + * The URL of the proxy to pass requests through or null for automatic detection. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function proxy($value): static + { + $this->_usedProperties['proxy'] = true; + $this->proxy = $value; + + return $this; + } + + /** + * A comma separated list of hosts that do not require a proxy to be reached. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function noProxy($value): static + { + $this->_usedProperties['noProxy'] = true; + $this->noProxy = $value; + + return $this; + } + + /** + * The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * @default null + * @param ParamConfigurator|float $value + * @return $this + */ + public function timeout($value): static + { + $this->_usedProperties['timeout'] = true; + $this->timeout = $value; + + return $this; + } + + /** + * The maximum execution time for the request+response as a whole. + * @default null + * @param ParamConfigurator|float $value + * @return $this + */ + public function maxDuration($value): static + { + $this->_usedProperties['maxDuration'] = true; + $this->maxDuration = $value; + + return $this; + } + + /** + * A network interface name, IP address, a host name or a UNIX socket to bind to. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function bindto($value): static + { + $this->_usedProperties['bindto'] = true; + $this->bindto = $value; + + return $this; + } + + /** + * Indicates if the peer should be verified in an SSL/TLS context. + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function verifyPeer($value): static + { + $this->_usedProperties['verifyPeer'] = true; + $this->verifyPeer = $value; + + return $this; + } + + /** + * Indicates if the host should exist as a certificate common name. + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function verifyHost($value): static + { + $this->_usedProperties['verifyHost'] = true; + $this->verifyHost = $value; + + return $this; + } + + /** + * A certificate authority file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cafile($value): static + { + $this->_usedProperties['cafile'] = true; + $this->cafile = $value; + + return $this; + } + + /** + * A directory that contains multiple certificate authority files. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function capath($value): static + { + $this->_usedProperties['capath'] = true; + $this->capath = $value; + + return $this; + } + + /** + * A PEM formatted certificate file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function localCert($value): static + { + $this->_usedProperties['localCert'] = true; + $this->localCert = $value; + + return $this; + } + + /** + * A private key file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function localPk($value): static + { + $this->_usedProperties['localPk'] = true; + $this->localPk = $value; + + return $this; + } + + /** + * The passphrase used to encrypt the "local_pk" file. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function passphrase($value): static + { + $this->_usedProperties['passphrase'] = true; + $this->passphrase = $value; + + return $this; + } + + /** + * A list of SSL/TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...) + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function ciphers($value): static + { + $this->_usedProperties['ciphers'] = true; + $this->ciphers = $value; + + return $this; + } + + /** + * Associative array: hashing algorithm => hash(es). + */ + public function peerFingerprint(array $value = []): \Symfony\Config\Framework\HttpClient\ScopedClientConfig\PeerFingerprintConfig + { + if (null === $this->peerFingerprint) { + $this->_usedProperties['peerFingerprint'] = true; + $this->peerFingerprint = new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\PeerFingerprintConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "peerFingerprint()" has already been initialized. You cannot pass values the second time you call peerFingerprint().'); + } + + return $this->peerFingerprint; + } + + /** + * @template TValue + * @param TValue $value + * @default {"enabled":false,"retry_strategy":null,"http_codes":[],"max_retries":3,"delay":1000,"multiplier":2,"max_delay":0,"jitter":0.1} + * @return \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig : static) + */ + public function retryFailed(mixed $value = []): \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = $value; + + return $this; + } + + if (!$this->retryFailed instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "retryFailed()" has already been initialized. You cannot pass values the second time you call retryFailed().'); + } + + return $this->retryFailed; + } + + public function __construct(array $value = []) + { + if (array_key_exists('scope', $value)) { + $this->_usedProperties['scope'] = true; + $this->scope = $value['scope']; + unset($value['scope']); + } + + if (array_key_exists('base_uri', $value)) { + $this->_usedProperties['baseUri'] = true; + $this->baseUri = $value['base_uri']; + unset($value['base_uri']); + } + + if (array_key_exists('auth_basic', $value)) { + $this->_usedProperties['authBasic'] = true; + $this->authBasic = $value['auth_basic']; + unset($value['auth_basic']); + } + + if (array_key_exists('auth_bearer', $value)) { + $this->_usedProperties['authBearer'] = true; + $this->authBearer = $value['auth_bearer']; + unset($value['auth_bearer']); + } + + if (array_key_exists('auth_ntlm', $value)) { + $this->_usedProperties['authNtlm'] = true; + $this->authNtlm = $value['auth_ntlm']; + unset($value['auth_ntlm']); + } + + if (array_key_exists('query', $value)) { + $this->_usedProperties['query'] = true; + $this->query = $value['query']; + unset($value['query']); + } + + if (array_key_exists('headers', $value)) { + $this->_usedProperties['headers'] = true; + $this->headers = $value['headers']; + unset($value['headers']); + } + + if (array_key_exists('max_redirects', $value)) { + $this->_usedProperties['maxRedirects'] = true; + $this->maxRedirects = $value['max_redirects']; + unset($value['max_redirects']); + } + + if (array_key_exists('http_version', $value)) { + $this->_usedProperties['httpVersion'] = true; + $this->httpVersion = $value['http_version']; + unset($value['http_version']); + } + + if (array_key_exists('resolve', $value)) { + $this->_usedProperties['resolve'] = true; + $this->resolve = $value['resolve']; + unset($value['resolve']); + } + + if (array_key_exists('proxy', $value)) { + $this->_usedProperties['proxy'] = true; + $this->proxy = $value['proxy']; + unset($value['proxy']); + } + + if (array_key_exists('no_proxy', $value)) { + $this->_usedProperties['noProxy'] = true; + $this->noProxy = $value['no_proxy']; + unset($value['no_proxy']); + } + + if (array_key_exists('timeout', $value)) { + $this->_usedProperties['timeout'] = true; + $this->timeout = $value['timeout']; + unset($value['timeout']); + } + + if (array_key_exists('max_duration', $value)) { + $this->_usedProperties['maxDuration'] = true; + $this->maxDuration = $value['max_duration']; + unset($value['max_duration']); + } + + if (array_key_exists('bindto', $value)) { + $this->_usedProperties['bindto'] = true; + $this->bindto = $value['bindto']; + unset($value['bindto']); + } + + if (array_key_exists('verify_peer', $value)) { + $this->_usedProperties['verifyPeer'] = true; + $this->verifyPeer = $value['verify_peer']; + unset($value['verify_peer']); + } + + if (array_key_exists('verify_host', $value)) { + $this->_usedProperties['verifyHost'] = true; + $this->verifyHost = $value['verify_host']; + unset($value['verify_host']); + } + + if (array_key_exists('cafile', $value)) { + $this->_usedProperties['cafile'] = true; + $this->cafile = $value['cafile']; + unset($value['cafile']); + } + + if (array_key_exists('capath', $value)) { + $this->_usedProperties['capath'] = true; + $this->capath = $value['capath']; + unset($value['capath']); + } + + if (array_key_exists('local_cert', $value)) { + $this->_usedProperties['localCert'] = true; + $this->localCert = $value['local_cert']; + unset($value['local_cert']); + } + + if (array_key_exists('local_pk', $value)) { + $this->_usedProperties['localPk'] = true; + $this->localPk = $value['local_pk']; + unset($value['local_pk']); + } + + if (array_key_exists('passphrase', $value)) { + $this->_usedProperties['passphrase'] = true; + $this->passphrase = $value['passphrase']; + unset($value['passphrase']); + } + + if (array_key_exists('ciphers', $value)) { + $this->_usedProperties['ciphers'] = true; + $this->ciphers = $value['ciphers']; + unset($value['ciphers']); + } + + if (array_key_exists('peer_fingerprint', $value)) { + $this->_usedProperties['peerFingerprint'] = true; + $this->peerFingerprint = new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\PeerFingerprintConfig($value['peer_fingerprint']); + unset($value['peer_fingerprint']); + } + + if (array_key_exists('retry_failed', $value)) { + $this->_usedProperties['retryFailed'] = true; + $this->retryFailed = \is_array($value['retry_failed']) ? new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig($value['retry_failed']) : $value['retry_failed']; + unset($value['retry_failed']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['scope'])) { + $output['scope'] = $this->scope; + } + if (isset($this->_usedProperties['baseUri'])) { + $output['base_uri'] = $this->baseUri; + } + if (isset($this->_usedProperties['authBasic'])) { + $output['auth_basic'] = $this->authBasic; + } + if (isset($this->_usedProperties['authBearer'])) { + $output['auth_bearer'] = $this->authBearer; + } + if (isset($this->_usedProperties['authNtlm'])) { + $output['auth_ntlm'] = $this->authNtlm; + } + if (isset($this->_usedProperties['query'])) { + $output['query'] = $this->query; + } + if (isset($this->_usedProperties['headers'])) { + $output['headers'] = $this->headers; + } + if (isset($this->_usedProperties['maxRedirects'])) { + $output['max_redirects'] = $this->maxRedirects; + } + if (isset($this->_usedProperties['httpVersion'])) { + $output['http_version'] = $this->httpVersion; + } + if (isset($this->_usedProperties['resolve'])) { + $output['resolve'] = $this->resolve; + } + if (isset($this->_usedProperties['proxy'])) { + $output['proxy'] = $this->proxy; + } + if (isset($this->_usedProperties['noProxy'])) { + $output['no_proxy'] = $this->noProxy; + } + if (isset($this->_usedProperties['timeout'])) { + $output['timeout'] = $this->timeout; + } + if (isset($this->_usedProperties['maxDuration'])) { + $output['max_duration'] = $this->maxDuration; + } + if (isset($this->_usedProperties['bindto'])) { + $output['bindto'] = $this->bindto; + } + if (isset($this->_usedProperties['verifyPeer'])) { + $output['verify_peer'] = $this->verifyPeer; + } + if (isset($this->_usedProperties['verifyHost'])) { + $output['verify_host'] = $this->verifyHost; + } + if (isset($this->_usedProperties['cafile'])) { + $output['cafile'] = $this->cafile; + } + if (isset($this->_usedProperties['capath'])) { + $output['capath'] = $this->capath; + } + if (isset($this->_usedProperties['localCert'])) { + $output['local_cert'] = $this->localCert; + } + if (isset($this->_usedProperties['localPk'])) { + $output['local_pk'] = $this->localPk; + } + if (isset($this->_usedProperties['passphrase'])) { + $output['passphrase'] = $this->passphrase; + } + if (isset($this->_usedProperties['ciphers'])) { + $output['ciphers'] = $this->ciphers; + } + if (isset($this->_usedProperties['peerFingerprint'])) { + $output['peer_fingerprint'] = $this->peerFingerprint->toArray(); + } + if (isset($this->_usedProperties['retryFailed'])) { + $output['retry_failed'] = $this->retryFailed instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailedConfig ? $this->retryFailed->toArray() : $this->retryFailed; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/PeerFingerprintConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/PeerFingerprintConfig.php new file mode 100644 index 00000000..20cd2034 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/PeerFingerprintConfig.php @@ -0,0 +1,101 @@ +_usedProperties['sha1'] = true; + $this->sha1 = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function pinsha256(mixed $value): static + { + $this->_usedProperties['pinsha256'] = true; + $this->pinsha256 = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function md5(mixed $value): static + { + $this->_usedProperties['md5'] = true; + $this->md5 = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('sha1', $value)) { + $this->_usedProperties['sha1'] = true; + $this->sha1 = $value['sha1']; + unset($value['sha1']); + } + + if (array_key_exists('pin-sha256', $value)) { + $this->_usedProperties['pinsha256'] = true; + $this->pinsha256 = $value['pin-sha256']; + unset($value['pin-sha256']); + } + + if (array_key_exists('md5', $value)) { + $this->_usedProperties['md5'] = true; + $this->md5 = $value['md5']; + unset($value['md5']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['sha1'])) { + $output['sha1'] = $this->sha1; + } + if (isset($this->_usedProperties['pinsha256'])) { + $output['pin-sha256'] = $this->pinsha256; + } + if (isset($this->_usedProperties['md5'])) { + $output['md5'] = $this->md5; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailed/HttpCodeConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailed/HttpCodeConfig.php new file mode 100644 index 00000000..309911ab --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailed/HttpCodeConfig.php @@ -0,0 +1,75 @@ +_usedProperties['code'] = true; + $this->code = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function methods(ParamConfigurator|array $value): static + { + $this->_usedProperties['methods'] = true; + $this->methods = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('code', $value)) { + $this->_usedProperties['code'] = true; + $this->code = $value['code']; + unset($value['code']); + } + + if (array_key_exists('methods', $value)) { + $this->_usedProperties['methods'] = true; + $this->methods = $value['methods']; + unset($value['methods']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['code'])) { + $output['code'] = $this->code; + } + if (isset($this->_usedProperties['methods'])) { + $output['methods'] = $this->methods; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailedConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailedConfig.php new file mode 100644 index 00000000..3618da52 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClient/ScopedClientConfig/RetryFailedConfig.php @@ -0,0 +1,233 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * service id to override the retry strategy + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function retryStrategy($value): static + { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * A list of HTTP status code that triggers a retry + * @return \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig : static) + */ + public function httpCode(string $code, array $value = []): \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes[$code] = $value; + + return $this; + } + + if (!isset($this->httpCodes[$code]) || !$this->httpCodes[$code] instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes[$code] = new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "httpCode()" has already been initialized. You cannot pass values the second time you call httpCode().'); + } + + return $this->httpCodes[$code]; + } + + /** + * @default 3 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxRetries($value): static + { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value; + + return $this; + } + + /** + * Time in ms to delay (or the initial value when multiplier is used) + * @default 1000 + * @param ParamConfigurator|int $value + * @return $this + */ + public function delay($value): static + { + $this->_usedProperties['delay'] = true; + $this->delay = $value; + + return $this; + } + + /** + * If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries) + * @default 2 + * @param ParamConfigurator|float $value + * @return $this + */ + public function multiplier($value): static + { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value; + + return $this; + } + + /** + * Max time in ms that a retry should ever be delayed (0 = infinite) + * @default 0 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxDelay($value): static + { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value; + + return $this; + } + + /** + * Randomness in percent (between 0 and 1) to apply to the delay + * @default 0.1 + * @param ParamConfigurator|float $value + * @return $this + */ + public function jitter($value): static + { + $this->_usedProperties['jitter'] = true; + $this->jitter = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('retry_strategy', $value)) { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = $value['retry_strategy']; + unset($value['retry_strategy']); + } + + if (array_key_exists('http_codes', $value)) { + $this->_usedProperties['httpCodes'] = true; + $this->httpCodes = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig($v) : $v; }, $value['http_codes']); + unset($value['http_codes']); + } + + if (array_key_exists('max_retries', $value)) { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value['max_retries']; + unset($value['max_retries']); + } + + if (array_key_exists('delay', $value)) { + $this->_usedProperties['delay'] = true; + $this->delay = $value['delay']; + unset($value['delay']); + } + + if (array_key_exists('multiplier', $value)) { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value['multiplier']; + unset($value['multiplier']); + } + + if (array_key_exists('max_delay', $value)) { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value['max_delay']; + unset($value['max_delay']); + } + + if (array_key_exists('jitter', $value)) { + $this->_usedProperties['jitter'] = true; + $this->jitter = $value['jitter']; + unset($value['jitter']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['retryStrategy'])) { + $output['retry_strategy'] = $this->retryStrategy; + } + if (isset($this->_usedProperties['httpCodes'])) { + $output['http_codes'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig\RetryFailed\HttpCodeConfig ? $v->toArray() : $v; }, $this->httpCodes); + } + if (isset($this->_usedProperties['maxRetries'])) { + $output['max_retries'] = $this->maxRetries; + } + if (isset($this->_usedProperties['delay'])) { + $output['delay'] = $this->delay; + } + if (isset($this->_usedProperties['multiplier'])) { + $output['multiplier'] = $this->multiplier; + } + if (isset($this->_usedProperties['maxDelay'])) { + $output['max_delay'] = $this->maxDelay; + } + if (isset($this->_usedProperties['jitter'])) { + $output['jitter'] = $this->jitter; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClientConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClientConfig.php new file mode 100644 index 00000000..16872135 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/HttpClientConfig.php @@ -0,0 +1,160 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * The maximum number of connections to a single host. + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxHostConnections($value): static + { + $this->_usedProperties['maxHostConnections'] = true; + $this->maxHostConnections = $value; + + return $this; + } + + public function defaultOptions(array $value = []): \Symfony\Config\Framework\HttpClient\DefaultOptionsConfig + { + if (null === $this->defaultOptions) { + $this->_usedProperties['defaultOptions'] = true; + $this->defaultOptions = new \Symfony\Config\Framework\HttpClient\DefaultOptionsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "defaultOptions()" has already been initialized. You cannot pass values the second time you call defaultOptions().'); + } + + return $this->defaultOptions; + } + + /** + * The id of the service that should generate mock responses. It should be either an invokable or an iterable. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function mockResponseFactory($value): static + { + $this->_usedProperties['mockResponseFactory'] = true; + $this->mockResponseFactory = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\HttpClient\ScopedClientConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClient\ScopedClientConfig : static) + */ + public function scopedClient(string $name, mixed $value = []): \Symfony\Config\Framework\HttpClient\ScopedClientConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['scopedClients'] = true; + $this->scopedClients[$name] = $value; + + return $this; + } + + if (!isset($this->scopedClients[$name]) || !$this->scopedClients[$name] instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig) { + $this->_usedProperties['scopedClients'] = true; + $this->scopedClients[$name] = new \Symfony\Config\Framework\HttpClient\ScopedClientConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "scopedClient()" has already been initialized. You cannot pass values the second time you call scopedClient().'); + } + + return $this->scopedClients[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('max_host_connections', $value)) { + $this->_usedProperties['maxHostConnections'] = true; + $this->maxHostConnections = $value['max_host_connections']; + unset($value['max_host_connections']); + } + + if (array_key_exists('default_options', $value)) { + $this->_usedProperties['defaultOptions'] = true; + $this->defaultOptions = new \Symfony\Config\Framework\HttpClient\DefaultOptionsConfig($value['default_options']); + unset($value['default_options']); + } + + if (array_key_exists('mock_response_factory', $value)) { + $this->_usedProperties['mockResponseFactory'] = true; + $this->mockResponseFactory = $value['mock_response_factory']; + unset($value['mock_response_factory']); + } + + if (array_key_exists('scoped_clients', $value)) { + $this->_usedProperties['scopedClients'] = true; + $this->scopedClients = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\HttpClient\ScopedClientConfig($v) : $v; }, $value['scoped_clients']); + unset($value['scoped_clients']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['maxHostConnections'])) { + $output['max_host_connections'] = $this->maxHostConnections; + } + if (isset($this->_usedProperties['defaultOptions'])) { + $output['default_options'] = $this->defaultOptions->toArray(); + } + if (isset($this->_usedProperties['mockResponseFactory'])) { + $output['mock_response_factory'] = $this->mockResponseFactory; + } + if (isset($this->_usedProperties['scopedClients'])) { + $output['scoped_clients'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\HttpClient\ScopedClientConfig ? $v->toArray() : $v; }, $this->scopedClients); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/LockConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/LockConfig.php new file mode 100644 index 00000000..93ec3cdb --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/LockConfig.php @@ -0,0 +1,73 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @return $this + */ + public function resource(string $name, ParamConfigurator|string|array $value): static + { + $this->_usedProperties['resources'] = true; + $this->resources[$name] = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('resources', $value)) { + $this->_usedProperties['resources'] = true; + $this->resources = $value['resources']; + unset($value['resources']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['resources'])) { + $output['resources'] = $this->resources; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/EnvelopeConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/EnvelopeConfig.php new file mode 100644 index 00000000..0d11eca9 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/EnvelopeConfig.php @@ -0,0 +1,75 @@ +_usedProperties['sender'] = true; + $this->sender = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function recipients(ParamConfigurator|array $value): static + { + $this->_usedProperties['recipients'] = true; + $this->recipients = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('sender', $value)) { + $this->_usedProperties['sender'] = true; + $this->sender = $value['sender']; + unset($value['sender']); + } + + if (array_key_exists('recipients', $value)) { + $this->_usedProperties['recipients'] = true; + $this->recipients = $value['recipients']; + unset($value['recipients']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['sender'])) { + $output['sender'] = $this->sender; + } + if (isset($this->_usedProperties['recipients'])) { + $output['recipients'] = $this->recipients; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/HeaderConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/HeaderConfig.php new file mode 100644 index 00000000..76eba104 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Mailer/HeaderConfig.php @@ -0,0 +1,53 @@ +_usedProperties['value'] = true; + $this->value = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('value', $value)) { + $this->_usedProperties['value'] = true; + $this->value = $value['value']; + unset($value['value']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['value'])) { + $output['value'] = $this->value; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MailerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MailerConfig.php new file mode 100644 index 00000000..f981f9a7 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MailerConfig.php @@ -0,0 +1,183 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * The message bus to use. Defaults to the default bus if the Messenger component is installed. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function messageBus($value): static + { + $this->_usedProperties['messageBus'] = true; + $this->messageBus = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function dsn($value): static + { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value; + + return $this; + } + + /** + * @return $this + */ + public function transport(string $name, mixed $value): static + { + $this->_usedProperties['transports'] = true; + $this->transports[$name] = $value; + + return $this; + } + + /** + * Mailer Envelope configuration + */ + public function envelope(array $value = []): \Symfony\Config\Framework\Mailer\EnvelopeConfig + { + if (null === $this->envelope) { + $this->_usedProperties['envelope'] = true; + $this->envelope = new \Symfony\Config\Framework\Mailer\EnvelopeConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "envelope()" has already been initialized. You cannot pass values the second time you call envelope().'); + } + + return $this->envelope; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Mailer\HeaderConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Mailer\HeaderConfig : static) + */ + public function header(string $name, mixed $value = []): \Symfony\Config\Framework\Mailer\HeaderConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['headers'] = true; + $this->headers[$name] = $value; + + return $this; + } + + if (!isset($this->headers[$name]) || !$this->headers[$name] instanceof \Symfony\Config\Framework\Mailer\HeaderConfig) { + $this->_usedProperties['headers'] = true; + $this->headers[$name] = new \Symfony\Config\Framework\Mailer\HeaderConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "header()" has already been initialized. You cannot pass values the second time you call header().'); + } + + return $this->headers[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('message_bus', $value)) { + $this->_usedProperties['messageBus'] = true; + $this->messageBus = $value['message_bus']; + unset($value['message_bus']); + } + + if (array_key_exists('dsn', $value)) { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value['dsn']; + unset($value['dsn']); + } + + if (array_key_exists('transports', $value)) { + $this->_usedProperties['transports'] = true; + $this->transports = $value['transports']; + unset($value['transports']); + } + + if (array_key_exists('envelope', $value)) { + $this->_usedProperties['envelope'] = true; + $this->envelope = new \Symfony\Config\Framework\Mailer\EnvelopeConfig($value['envelope']); + unset($value['envelope']); + } + + if (array_key_exists('headers', $value)) { + $this->_usedProperties['headers'] = true; + $this->headers = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Mailer\HeaderConfig($v) : $v; }, $value['headers']); + unset($value['headers']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['messageBus'])) { + $output['message_bus'] = $this->messageBus; + } + if (isset($this->_usedProperties['dsn'])) { + $output['dsn'] = $this->dsn; + } + if (isset($this->_usedProperties['transports'])) { + $output['transports'] = $this->transports; + } + if (isset($this->_usedProperties['envelope'])) { + $output['envelope'] = $this->envelope->toArray(); + } + if (isset($this->_usedProperties['headers'])) { + $output['headers'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Mailer\HeaderConfig ? $v->toArray() : $v; }, $this->headers); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig.php new file mode 100644 index 00000000..ca62c224 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig.php @@ -0,0 +1,95 @@ +_usedProperties['defaultMiddleware'] = true; + $this->defaultMiddleware = $value; + + return $this; + } + + if (!$this->defaultMiddleware instanceof \Symfony\Config\Framework\Messenger\BusConfig\DefaultMiddlewareConfig) { + $this->_usedProperties['defaultMiddleware'] = true; + $this->defaultMiddleware = new \Symfony\Config\Framework\Messenger\BusConfig\DefaultMiddlewareConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "defaultMiddleware()" has already been initialized. You cannot pass values the second time you call defaultMiddleware().'); + } + + return $this->defaultMiddleware; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig : static) + */ + public function middleware(mixed $value = []): \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig|static + { + $this->_usedProperties['middleware'] = true; + if (!\is_array($value)) { + $this->middleware[] = $value; + + return $this; + } + + return $this->middleware[] = new \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig($value); + } + + public function __construct(array $value = []) + { + if (array_key_exists('default_middleware', $value)) { + $this->_usedProperties['defaultMiddleware'] = true; + $this->defaultMiddleware = \is_array($value['default_middleware']) ? new \Symfony\Config\Framework\Messenger\BusConfig\DefaultMiddlewareConfig($value['default_middleware']) : $value['default_middleware']; + unset($value['default_middleware']); + } + + if (array_key_exists('middleware', $value)) { + $this->_usedProperties['middleware'] = true; + $this->middleware = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig($v) : $v; }, $value['middleware']); + unset($value['middleware']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['defaultMiddleware'])) { + $output['default_middleware'] = $this->defaultMiddleware instanceof \Symfony\Config\Framework\Messenger\BusConfig\DefaultMiddlewareConfig ? $this->defaultMiddleware->toArray() : $this->defaultMiddleware; + } + if (isset($this->_usedProperties['middleware'])) { + $output['middleware'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Messenger\BusConfig\MiddlewareConfig ? $v->toArray() : $v; }, $this->middleware); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig/MiddlewareConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig/MiddlewareConfig.php new file mode 100644 index 00000000..d96a5a53 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/BusConfig/MiddlewareConfig.php @@ -0,0 +1,75 @@ +_usedProperties['id'] = true; + $this->id = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function arguments(ParamConfigurator|array $value): static + { + $this->_usedProperties['arguments'] = true; + $this->arguments = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('id', $value)) { + $this->_usedProperties['id'] = true; + $this->id = $value['id']; + unset($value['id']); + } + + if (array_key_exists('arguments', $value)) { + $this->_usedProperties['arguments'] = true; + $this->arguments = $value['arguments']; + unset($value['arguments']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['id'])) { + $output['id'] = $this->id; + } + if (isset($this->_usedProperties['arguments'])) { + $output['arguments'] = $this->arguments; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/RoutingConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/RoutingConfig.php new file mode 100644 index 00000000..0cebfbb5 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/RoutingConfig.php @@ -0,0 +1,52 @@ + $value + * + * @return $this + */ + public function senders(ParamConfigurator|array $value): static + { + $this->_usedProperties['senders'] = true; + $this->senders = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('senders', $value)) { + $this->_usedProperties['senders'] = true; + $this->senders = $value['senders']; + unset($value['senders']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['senders'])) { + $output['senders'] = $this->senders; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/Serializer/SymfonySerializerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/Serializer/SymfonySerializerConfig.php new file mode 100644 index 00000000..671e1f77 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/Serializer/SymfonySerializerConfig.php @@ -0,0 +1,74 @@ +_usedProperties['format'] = true; + $this->format = $value; + + return $this; + } + + /** + * @return $this + */ + public function context(string $name, mixed $value): static + { + $this->_usedProperties['context'] = true; + $this->context[$name] = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('format', $value)) { + $this->_usedProperties['format'] = true; + $this->format = $value['format']; + unset($value['format']); + } + + if (array_key_exists('context', $value)) { + $this->_usedProperties['context'] = true; + $this->context = $value['context']; + unset($value['context']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['format'])) { + $output['format'] = $this->format; + } + if (isset($this->_usedProperties['context'])) { + $output['context'] = $this->context; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/SerializerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/SerializerConfig.php new file mode 100644 index 00000000..819bcab8 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/SerializerConfig.php @@ -0,0 +1,80 @@ +_usedProperties['defaultSerializer'] = true; + $this->defaultSerializer = $value; + + return $this; + } + + /** + * @default {"format":"json","context":[]} + */ + public function symfonySerializer(array $value = []): \Symfony\Config\Framework\Messenger\Serializer\SymfonySerializerConfig + { + if (null === $this->symfonySerializer) { + $this->_usedProperties['symfonySerializer'] = true; + $this->symfonySerializer = new \Symfony\Config\Framework\Messenger\Serializer\SymfonySerializerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "symfonySerializer()" has already been initialized. You cannot pass values the second time you call symfonySerializer().'); + } + + return $this->symfonySerializer; + } + + public function __construct(array $value = []) + { + if (array_key_exists('default_serializer', $value)) { + $this->_usedProperties['defaultSerializer'] = true; + $this->defaultSerializer = $value['default_serializer']; + unset($value['default_serializer']); + } + + if (array_key_exists('symfony_serializer', $value)) { + $this->_usedProperties['symfonySerializer'] = true; + $this->symfonySerializer = new \Symfony\Config\Framework\Messenger\Serializer\SymfonySerializerConfig($value['symfony_serializer']); + unset($value['symfony_serializer']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['defaultSerializer'])) { + $output['default_serializer'] = $this->defaultSerializer; + } + if (isset($this->_usedProperties['symfonySerializer'])) { + $output['symfony_serializer'] = $this->symfonySerializer->toArray(); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig.php new file mode 100644 index 00000000..08bf4772 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig.php @@ -0,0 +1,185 @@ +_usedProperties['dsn'] = true; + $this->dsn = $value; + + return $this; + } + + /** + * Service id of a custom serializer to use. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function serializer($value): static + { + $this->_usedProperties['serializer'] = true; + $this->serializer = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function options(ParamConfigurator|array $value): static + { + $this->_usedProperties['options'] = true; + $this->options = $value; + + return $this; + } + + /** + * Transport name to send failed messages to (after all retries have failed). + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function failureTransport($value): static + { + $this->_usedProperties['failureTransport'] = true; + $this->failureTransport = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @default {"service":null,"max_retries":3,"delay":1000,"multiplier":2,"max_delay":0} + * @return \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig : static) + */ + public function retryStrategy(mixed $value = []): \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = $value; + + return $this; + } + + if (!$this->retryStrategy instanceof \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig) { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = new \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "retryStrategy()" has already been initialized. You cannot pass values the second time you call retryStrategy().'); + } + + return $this->retryStrategy; + } + + /** + * Rate limiter name to use when processing messages + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function rateLimiter($value): static + { + $this->_usedProperties['rateLimiter'] = true; + $this->rateLimiter = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('dsn', $value)) { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value['dsn']; + unset($value['dsn']); + } + + if (array_key_exists('serializer', $value)) { + $this->_usedProperties['serializer'] = true; + $this->serializer = $value['serializer']; + unset($value['serializer']); + } + + if (array_key_exists('options', $value)) { + $this->_usedProperties['options'] = true; + $this->options = $value['options']; + unset($value['options']); + } + + if (array_key_exists('failure_transport', $value)) { + $this->_usedProperties['failureTransport'] = true; + $this->failureTransport = $value['failure_transport']; + unset($value['failure_transport']); + } + + if (array_key_exists('retry_strategy', $value)) { + $this->_usedProperties['retryStrategy'] = true; + $this->retryStrategy = \is_array($value['retry_strategy']) ? new \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig($value['retry_strategy']) : $value['retry_strategy']; + unset($value['retry_strategy']); + } + + if (array_key_exists('rate_limiter', $value)) { + $this->_usedProperties['rateLimiter'] = true; + $this->rateLimiter = $value['rate_limiter']; + unset($value['rate_limiter']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['dsn'])) { + $output['dsn'] = $this->dsn; + } + if (isset($this->_usedProperties['serializer'])) { + $output['serializer'] = $this->serializer; + } + if (isset($this->_usedProperties['options'])) { + $output['options'] = $this->options; + } + if (isset($this->_usedProperties['failureTransport'])) { + $output['failure_transport'] = $this->failureTransport; + } + if (isset($this->_usedProperties['retryStrategy'])) { + $output['retry_strategy'] = $this->retryStrategy instanceof \Symfony\Config\Framework\Messenger\TransportConfig\RetryStrategyConfig ? $this->retryStrategy->toArray() : $this->retryStrategy; + } + if (isset($this->_usedProperties['rateLimiter'])) { + $output['rate_limiter'] = $this->rateLimiter; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig/RetryStrategyConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig/RetryStrategyConfig.php new file mode 100644 index 00000000..3d68f338 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Messenger/TransportConfig/RetryStrategyConfig.php @@ -0,0 +1,148 @@ +_usedProperties['service'] = true; + $this->service = $value; + + return $this; + } + + /** + * @default 3 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxRetries($value): static + { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value; + + return $this; + } + + /** + * Time in ms to delay (or the initial value when multiplier is used) + * @default 1000 + * @param ParamConfigurator|int $value + * @return $this + */ + public function delay($value): static + { + $this->_usedProperties['delay'] = true; + $this->delay = $value; + + return $this; + } + + /** + * If greater than 1, delay will grow exponentially for each retry: this delay = (delay * (multiple ^ retries)) + * @default 2 + * @param ParamConfigurator|float $value + * @return $this + */ + public function multiplier($value): static + { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value; + + return $this; + } + + /** + * Max time in ms that a retry should ever be delayed (0 = infinite) + * @default 0 + * @param ParamConfigurator|int $value + * @return $this + */ + public function maxDelay($value): static + { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('service', $value)) { + $this->_usedProperties['service'] = true; + $this->service = $value['service']; + unset($value['service']); + } + + if (array_key_exists('max_retries', $value)) { + $this->_usedProperties['maxRetries'] = true; + $this->maxRetries = $value['max_retries']; + unset($value['max_retries']); + } + + if (array_key_exists('delay', $value)) { + $this->_usedProperties['delay'] = true; + $this->delay = $value['delay']; + unset($value['delay']); + } + + if (array_key_exists('multiplier', $value)) { + $this->_usedProperties['multiplier'] = true; + $this->multiplier = $value['multiplier']; + unset($value['multiplier']); + } + + if (array_key_exists('max_delay', $value)) { + $this->_usedProperties['maxDelay'] = true; + $this->maxDelay = $value['max_delay']; + unset($value['max_delay']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['service'])) { + $output['service'] = $this->service; + } + if (isset($this->_usedProperties['maxRetries'])) { + $output['max_retries'] = $this->maxRetries; + } + if (isset($this->_usedProperties['delay'])) { + $output['delay'] = $this->delay; + } + if (isset($this->_usedProperties['multiplier'])) { + $output['multiplier'] = $this->multiplier; + } + if (isset($this->_usedProperties['maxDelay'])) { + $output['max_delay'] = $this->maxDelay; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MessengerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MessengerConfig.php new file mode 100644 index 00000000..d137e896 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/MessengerConfig.php @@ -0,0 +1,249 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Messenger\RoutingConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Messenger\RoutingConfig : static) + */ + public function routing(string $message_class, array $value = []): \Symfony\Config\Framework\Messenger\RoutingConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['routing'] = true; + $this->routing[$message_class] = $value; + + return $this; + } + + if (!isset($this->routing[$message_class]) || !$this->routing[$message_class] instanceof \Symfony\Config\Framework\Messenger\RoutingConfig) { + $this->_usedProperties['routing'] = true; + $this->routing[$message_class] = new \Symfony\Config\Framework\Messenger\RoutingConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "routing()" has already been initialized. You cannot pass values the second time you call routing().'); + } + + return $this->routing[$message_class]; + } + + /** + * @default {"default_serializer":"messenger.transport.native_php_serializer","symfony_serializer":{"format":"json","context":[]}} + */ + public function serializer(array $value = []): \Symfony\Config\Framework\Messenger\SerializerConfig + { + if (null === $this->serializer) { + $this->_usedProperties['serializer'] = true; + $this->serializer = new \Symfony\Config\Framework\Messenger\SerializerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "serializer()" has already been initialized. You cannot pass values the second time you call serializer().'); + } + + return $this->serializer; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Messenger\TransportConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Messenger\TransportConfig : static) + */ + public function transport(string $name, string|array $value = []): \Symfony\Config\Framework\Messenger\TransportConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['transports'] = true; + $this->transports[$name] = $value; + + return $this; + } + + if (!isset($this->transports[$name]) || !$this->transports[$name] instanceof \Symfony\Config\Framework\Messenger\TransportConfig) { + $this->_usedProperties['transports'] = true; + $this->transports[$name] = new \Symfony\Config\Framework\Messenger\TransportConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "transport()" has already been initialized. You cannot pass values the second time you call transport().'); + } + + return $this->transports[$name]; + } + + /** + * Transport name to send failed messages to (after all retries have failed). + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function failureTransport($value): static + { + $this->_usedProperties['failureTransport'] = true; + $this->failureTransport = $value; + + return $this; + } + + /** + * Reset container services after each message. + * @default true + * @param ParamConfigurator|bool $value + * @deprecated Option "reset_on_message" at "messenger" is deprecated. It does nothing and will be removed in version 7.0. + * @return $this + */ + public function resetOnMessage($value): static + { + $this->_usedProperties['resetOnMessage'] = true; + $this->resetOnMessage = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultBus($value): static + { + $this->_usedProperties['defaultBus'] = true; + $this->defaultBus = $value; + + return $this; + } + + /** + * @default {"messenger.bus.default":{"default_middleware":{"enabled":true,"allow_no_handlers":false,"allow_no_senders":true},"middleware":[]}} + */ + public function bus(string $name, array $value = []): \Symfony\Config\Framework\Messenger\BusConfig + { + if (!isset($this->buses[$name])) { + $this->_usedProperties['buses'] = true; + $this->buses[$name] = new \Symfony\Config\Framework\Messenger\BusConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "bus()" has already been initialized. You cannot pass values the second time you call bus().'); + } + + return $this->buses[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('routing', $value)) { + $this->_usedProperties['routing'] = true; + $this->routing = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Messenger\RoutingConfig($v) : $v; }, $value['routing']); + unset($value['routing']); + } + + if (array_key_exists('serializer', $value)) { + $this->_usedProperties['serializer'] = true; + $this->serializer = new \Symfony\Config\Framework\Messenger\SerializerConfig($value['serializer']); + unset($value['serializer']); + } + + if (array_key_exists('transports', $value)) { + $this->_usedProperties['transports'] = true; + $this->transports = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Messenger\TransportConfig($v) : $v; }, $value['transports']); + unset($value['transports']); + } + + if (array_key_exists('failure_transport', $value)) { + $this->_usedProperties['failureTransport'] = true; + $this->failureTransport = $value['failure_transport']; + unset($value['failure_transport']); + } + + if (array_key_exists('reset_on_message', $value)) { + $this->_usedProperties['resetOnMessage'] = true; + $this->resetOnMessage = $value['reset_on_message']; + unset($value['reset_on_message']); + } + + if (array_key_exists('default_bus', $value)) { + $this->_usedProperties['defaultBus'] = true; + $this->defaultBus = $value['default_bus']; + unset($value['default_bus']); + } + + if (array_key_exists('buses', $value)) { + $this->_usedProperties['buses'] = true; + $this->buses = array_map(function ($v) { return new \Symfony\Config\Framework\Messenger\BusConfig($v); }, $value['buses']); + unset($value['buses']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['routing'])) { + $output['routing'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Messenger\RoutingConfig ? $v->toArray() : $v; }, $this->routing); + } + if (isset($this->_usedProperties['serializer'])) { + $output['serializer'] = $this->serializer->toArray(); + } + if (isset($this->_usedProperties['transports'])) { + $output['transports'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Messenger\TransportConfig ? $v->toArray() : $v; }, $this->transports); + } + if (isset($this->_usedProperties['failureTransport'])) { + $output['failure_transport'] = $this->failureTransport; + } + if (isset($this->_usedProperties['resetOnMessage'])) { + $output['reset_on_message'] = $this->resetOnMessage; + } + if (isset($this->_usedProperties['defaultBus'])) { + $output['default_bus'] = $this->defaultBus; + } + if (isset($this->_usedProperties['buses'])) { + $output['buses'] = array_map(function ($v) { return $v->toArray(); }, $this->buses); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Notifier/AdminRecipientConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Notifier/AdminRecipientConfig.php new file mode 100644 index 00000000..9ef59955 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Notifier/AdminRecipientConfig.php @@ -0,0 +1,74 @@ +_usedProperties['email'] = true; + $this->email = $value; + + return $this; + } + + /** + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function phone($value): static + { + $this->_usedProperties['phone'] = true; + $this->phone = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('email', $value)) { + $this->_usedProperties['email'] = true; + $this->email = $value['email']; + unset($value['email']); + } + + if (array_key_exists('phone', $value)) { + $this->_usedProperties['phone'] = true; + $this->phone = $value['phone']; + unset($value['phone']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['email'])) { + $output['email'] = $this->email; + } + if (isset($this->_usedProperties['phone'])) { + $output['phone'] = $this->phone; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/NotifierConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/NotifierConfig.php new file mode 100644 index 00000000..e33634d3 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/NotifierConfig.php @@ -0,0 +1,157 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @return $this + */ + public function chatterTransport(string $name, mixed $value): static + { + $this->_usedProperties['chatterTransports'] = true; + $this->chatterTransports[$name] = $value; + + return $this; + } + + /** + * @return $this + */ + public function texterTransport(string $name, mixed $value): static + { + $this->_usedProperties['texterTransports'] = true; + $this->texterTransports[$name] = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function notificationOnFailedMessages($value): static + { + $this->_usedProperties['notificationOnFailedMessages'] = true; + $this->notificationOnFailedMessages = $value; + + return $this; + } + + /** + * @return $this + */ + public function channelPolicy(string $name, ParamConfigurator|string|array $value): static + { + $this->_usedProperties['channelPolicy'] = true; + $this->channelPolicy[$name] = $value; + + return $this; + } + + public function adminRecipient(array $value = []): \Symfony\Config\Framework\Notifier\AdminRecipientConfig + { + $this->_usedProperties['adminRecipients'] = true; + + return $this->adminRecipients[] = new \Symfony\Config\Framework\Notifier\AdminRecipientConfig($value); + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('chatter_transports', $value)) { + $this->_usedProperties['chatterTransports'] = true; + $this->chatterTransports = $value['chatter_transports']; + unset($value['chatter_transports']); + } + + if (array_key_exists('texter_transports', $value)) { + $this->_usedProperties['texterTransports'] = true; + $this->texterTransports = $value['texter_transports']; + unset($value['texter_transports']); + } + + if (array_key_exists('notification_on_failed_messages', $value)) { + $this->_usedProperties['notificationOnFailedMessages'] = true; + $this->notificationOnFailedMessages = $value['notification_on_failed_messages']; + unset($value['notification_on_failed_messages']); + } + + if (array_key_exists('channel_policy', $value)) { + $this->_usedProperties['channelPolicy'] = true; + $this->channelPolicy = $value['channel_policy']; + unset($value['channel_policy']); + } + + if (array_key_exists('admin_recipients', $value)) { + $this->_usedProperties['adminRecipients'] = true; + $this->adminRecipients = array_map(function ($v) { return new \Symfony\Config\Framework\Notifier\AdminRecipientConfig($v); }, $value['admin_recipients']); + unset($value['admin_recipients']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['chatterTransports'])) { + $output['chatter_transports'] = $this->chatterTransports; + } + if (isset($this->_usedProperties['texterTransports'])) { + $output['texter_transports'] = $this->texterTransports; + } + if (isset($this->_usedProperties['notificationOnFailedMessages'])) { + $output['notification_on_failed_messages'] = $this->notificationOnFailedMessages; + } + if (isset($this->_usedProperties['channelPolicy'])) { + $output['channel_policy'] = $this->channelPolicy; + } + if (isset($this->_usedProperties['adminRecipients'])) { + $output['admin_recipients'] = array_map(function ($v) { return $v->toArray(); }, $this->adminRecipients); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PhpErrorsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PhpErrorsConfig.php new file mode 100644 index 00000000..3c7d0b76 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PhpErrorsConfig.php @@ -0,0 +1,79 @@ +_usedProperties['log'] = true; + $this->log = $value; + + return $this; + } + + /** + * Throw PHP errors as \ErrorException instances. + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function throw($value): static + { + $this->_usedProperties['throw'] = true; + $this->throw = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('log', $value)) { + $this->_usedProperties['log'] = true; + $this->log = $value['log']; + unset($value['log']); + } + + if (array_key_exists('throw', $value)) { + $this->_usedProperties['throw'] = true; + $this->throw = $value['throw']; + unset($value['throw']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['log'])) { + $output['log'] = $this->log; + } + if (isset($this->_usedProperties['throw'])) { + $output['throw'] = $this->throw; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ProfilerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ProfilerConfig.php new file mode 100644 index 00000000..890c3bce --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ProfilerConfig.php @@ -0,0 +1,192 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function collect($value): static + { + $this->_usedProperties['collect'] = true; + $this->collect = $value; + + return $this; + } + + /** + * The name of the parameter to use to enable or disable collection on a per request basis + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function collectParameter($value): static + { + $this->_usedProperties['collectParameter'] = true; + $this->collectParameter = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function onlyExceptions($value): static + { + $this->_usedProperties['onlyExceptions'] = true; + $this->onlyExceptions = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function onlyMainRequests($value): static + { + $this->_usedProperties['onlyMainRequests'] = true; + $this->onlyMainRequests = $value; + + return $this; + } + + /** + * @default 'file:%kernel.cache_dir%/profiler' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function dsn($value): static + { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value; + + return $this; + } + + /** + * Enables the serializer data collector and profiler panel + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function collectSerializerData($value): static + { + $this->_usedProperties['collectSerializerData'] = true; + $this->collectSerializerData = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('collect', $value)) { + $this->_usedProperties['collect'] = true; + $this->collect = $value['collect']; + unset($value['collect']); + } + + if (array_key_exists('collect_parameter', $value)) { + $this->_usedProperties['collectParameter'] = true; + $this->collectParameter = $value['collect_parameter']; + unset($value['collect_parameter']); + } + + if (array_key_exists('only_exceptions', $value)) { + $this->_usedProperties['onlyExceptions'] = true; + $this->onlyExceptions = $value['only_exceptions']; + unset($value['only_exceptions']); + } + + if (array_key_exists('only_main_requests', $value)) { + $this->_usedProperties['onlyMainRequests'] = true; + $this->onlyMainRequests = $value['only_main_requests']; + unset($value['only_main_requests']); + } + + if (array_key_exists('dsn', $value)) { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value['dsn']; + unset($value['dsn']); + } + + if (array_key_exists('collect_serializer_data', $value)) { + $this->_usedProperties['collectSerializerData'] = true; + $this->collectSerializerData = $value['collect_serializer_data']; + unset($value['collect_serializer_data']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['collect'])) { + $output['collect'] = $this->collect; + } + if (isset($this->_usedProperties['collectParameter'])) { + $output['collect_parameter'] = $this->collectParameter; + } + if (isset($this->_usedProperties['onlyExceptions'])) { + $output['only_exceptions'] = $this->onlyExceptions; + } + if (isset($this->_usedProperties['onlyMainRequests'])) { + $output['only_main_requests'] = $this->onlyMainRequests; + } + if (isset($this->_usedProperties['dsn'])) { + $output['dsn'] = $this->dsn; + } + if (isset($this->_usedProperties['collectSerializerData'])) { + $output['collect_serializer_data'] = $this->collectSerializerData; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyAccessConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyAccessConfig.php new file mode 100644 index 00000000..f63d95e7 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyAccessConfig.php @@ -0,0 +1,167 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function magicCall($value): static + { + $this->_usedProperties['magicCall'] = true; + $this->magicCall = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function magicGet($value): static + { + $this->_usedProperties['magicGet'] = true; + $this->magicGet = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function magicSet($value): static + { + $this->_usedProperties['magicSet'] = true; + $this->magicSet = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function throwExceptionOnInvalidIndex($value): static + { + $this->_usedProperties['throwExceptionOnInvalidIndex'] = true; + $this->throwExceptionOnInvalidIndex = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function throwExceptionOnInvalidPropertyPath($value): static + { + $this->_usedProperties['throwExceptionOnInvalidPropertyPath'] = true; + $this->throwExceptionOnInvalidPropertyPath = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('magic_call', $value)) { + $this->_usedProperties['magicCall'] = true; + $this->magicCall = $value['magic_call']; + unset($value['magic_call']); + } + + if (array_key_exists('magic_get', $value)) { + $this->_usedProperties['magicGet'] = true; + $this->magicGet = $value['magic_get']; + unset($value['magic_get']); + } + + if (array_key_exists('magic_set', $value)) { + $this->_usedProperties['magicSet'] = true; + $this->magicSet = $value['magic_set']; + unset($value['magic_set']); + } + + if (array_key_exists('throw_exception_on_invalid_index', $value)) { + $this->_usedProperties['throwExceptionOnInvalidIndex'] = true; + $this->throwExceptionOnInvalidIndex = $value['throw_exception_on_invalid_index']; + unset($value['throw_exception_on_invalid_index']); + } + + if (array_key_exists('throw_exception_on_invalid_property_path', $value)) { + $this->_usedProperties['throwExceptionOnInvalidPropertyPath'] = true; + $this->throwExceptionOnInvalidPropertyPath = $value['throw_exception_on_invalid_property_path']; + unset($value['throw_exception_on_invalid_property_path']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['magicCall'])) { + $output['magic_call'] = $this->magicCall; + } + if (isset($this->_usedProperties['magicGet'])) { + $output['magic_get'] = $this->magicGet; + } + if (isset($this->_usedProperties['magicSet'])) { + $output['magic_set'] = $this->magicSet; + } + if (isset($this->_usedProperties['throwExceptionOnInvalidIndex'])) { + $output['throw_exception_on_invalid_index'] = $this->throwExceptionOnInvalidIndex; + } + if (isset($this->_usedProperties['throwExceptionOnInvalidPropertyPath'])) { + $output['throw_exception_on_invalid_property_path'] = $this->throwExceptionOnInvalidPropertyPath; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyInfoConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyInfoConfig.php new file mode 100644 index 00000000..17f01b65 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/PropertyInfoConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig.php new file mode 100644 index 00000000..ab6983e2 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig.php @@ -0,0 +1,200 @@ +_usedProperties['lockFactory'] = true; + $this->lockFactory = $value; + + return $this; + } + + /** + * The cache pool to use for storing the current limiter state + * @default 'cache.rate_limiter' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cachePool($value): static + { + $this->_usedProperties['cachePool'] = true; + $this->cachePool = $value; + + return $this; + } + + /** + * The service ID of a custom storage implementation, this precedes any configured "cache_pool" + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function storageService($value): static + { + $this->_usedProperties['storageService'] = true; + $this->storageService = $value; + + return $this; + } + + /** + * The algorithm to be used by this limiter + * @default null + * @param ParamConfigurator|'fixed_window'|'token_bucket'|'sliding_window'|'no_limit' $value + * @return $this + */ + public function policy($value): static + { + $this->_usedProperties['policy'] = true; + $this->policy = $value; + + return $this; + } + + /** + * The maximum allowed hits in a fixed interval or burst + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function limit($value): static + { + $this->_usedProperties['limit'] = true; + $this->limit = $value; + + return $this; + } + + /** + * Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function interval($value): static + { + $this->_usedProperties['interval'] = true; + $this->interval = $value; + + return $this; + } + + /** + * Configures the fill rate if "policy" is set to "token_bucket" + */ + public function rate(array $value = []): \Symfony\Config\Framework\RateLimiter\LimiterConfig\RateConfig + { + if (null === $this->rate) { + $this->_usedProperties['rate'] = true; + $this->rate = new \Symfony\Config\Framework\RateLimiter\LimiterConfig\RateConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "rate()" has already been initialized. You cannot pass values the second time you call rate().'); + } + + return $this->rate; + } + + public function __construct(array $value = []) + { + if (array_key_exists('lock_factory', $value)) { + $this->_usedProperties['lockFactory'] = true; + $this->lockFactory = $value['lock_factory']; + unset($value['lock_factory']); + } + + if (array_key_exists('cache_pool', $value)) { + $this->_usedProperties['cachePool'] = true; + $this->cachePool = $value['cache_pool']; + unset($value['cache_pool']); + } + + if (array_key_exists('storage_service', $value)) { + $this->_usedProperties['storageService'] = true; + $this->storageService = $value['storage_service']; + unset($value['storage_service']); + } + + if (array_key_exists('policy', $value)) { + $this->_usedProperties['policy'] = true; + $this->policy = $value['policy']; + unset($value['policy']); + } + + if (array_key_exists('limit', $value)) { + $this->_usedProperties['limit'] = true; + $this->limit = $value['limit']; + unset($value['limit']); + } + + if (array_key_exists('interval', $value)) { + $this->_usedProperties['interval'] = true; + $this->interval = $value['interval']; + unset($value['interval']); + } + + if (array_key_exists('rate', $value)) { + $this->_usedProperties['rate'] = true; + $this->rate = new \Symfony\Config\Framework\RateLimiter\LimiterConfig\RateConfig($value['rate']); + unset($value['rate']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['lockFactory'])) { + $output['lock_factory'] = $this->lockFactory; + } + if (isset($this->_usedProperties['cachePool'])) { + $output['cache_pool'] = $this->cachePool; + } + if (isset($this->_usedProperties['storageService'])) { + $output['storage_service'] = $this->storageService; + } + if (isset($this->_usedProperties['policy'])) { + $output['policy'] = $this->policy; + } + if (isset($this->_usedProperties['limit'])) { + $output['limit'] = $this->limit; + } + if (isset($this->_usedProperties['interval'])) { + $output['interval'] = $this->interval; + } + if (isset($this->_usedProperties['rate'])) { + $output['rate'] = $this->rate->toArray(); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig/RateConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig/RateConfig.php new file mode 100644 index 00000000..efc1456e --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiter/LimiterConfig/RateConfig.php @@ -0,0 +1,77 @@ +_usedProperties['interval'] = true; + $this->interval = $value; + + return $this; + } + + /** + * Amount of tokens to add each interval + * @default 1 + * @param ParamConfigurator|int $value + * @return $this + */ + public function amount($value): static + { + $this->_usedProperties['amount'] = true; + $this->amount = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('interval', $value)) { + $this->_usedProperties['interval'] = true; + $this->interval = $value['interval']; + unset($value['interval']); + } + + if (array_key_exists('amount', $value)) { + $this->_usedProperties['amount'] = true; + $this->amount = $value['amount']; + unset($value['amount']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['interval'])) { + $output['interval'] = $this->interval; + } + if (isset($this->_usedProperties['amount'])) { + $output['amount'] = $this->amount; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiterConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiterConfig.php new file mode 100644 index 00000000..6d5eb0ee --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RateLimiterConfig.php @@ -0,0 +1,76 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function limiter(string $name, array $value = []): \Symfony\Config\Framework\RateLimiter\LimiterConfig + { + if (!isset($this->limiters[$name])) { + $this->_usedProperties['limiters'] = true; + $this->limiters[$name] = new \Symfony\Config\Framework\RateLimiter\LimiterConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "limiter()" has already been initialized. You cannot pass values the second time you call limiter().'); + } + + return $this->limiters[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('limiters', $value)) { + $this->_usedProperties['limiters'] = true; + $this->limiters = array_map(function ($v) { return new \Symfony\Config\Framework\RateLimiter\LimiterConfig($v); }, $value['limiters']); + unset($value['limiters']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['limiters'])) { + $output['limiters'] = array_map(function ($v) { return $v->toArray(); }, $this->limiters); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RequestConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RequestConfig.php new file mode 100644 index 00000000..178ca441 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RequestConfig.php @@ -0,0 +1,73 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @return $this + */ + public function format(string $name, mixed $value): static + { + $this->_usedProperties['formats'] = true; + $this->formats[$name] = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('formats', $value)) { + $this->_usedProperties['formats'] = true; + $this->formats = $value['formats']; + unset($value['formats']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['formats'])) { + $output['formats'] = $this->formats; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RouterConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RouterConfig.php new file mode 100644 index 00000000..e0fd835a --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/RouterConfig.php @@ -0,0 +1,241 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function resource($value): static + { + $this->_usedProperties['resource'] = true; + $this->resource = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function type($value): static + { + $this->_usedProperties['type'] = true; + $this->type = $value; + + return $this; + } + + /** + * @default '%kernel.cache_dir%' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cacheDir($value): static + { + $this->_usedProperties['cacheDir'] = true; + $this->cacheDir = $value; + + return $this; + } + + /** + * The default URI used to generate URLs in a non-HTTP context + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultUri($value): static + { + $this->_usedProperties['defaultUri'] = true; + $this->defaultUri = $value; + + return $this; + } + + /** + * @default 80 + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function httpPort($value): static + { + $this->_usedProperties['httpPort'] = true; + $this->httpPort = $value; + + return $this; + } + + /** + * @default 443 + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function httpsPort($value): static + { + $this->_usedProperties['httpsPort'] = true; + $this->httpsPort = $value; + + return $this; + } + + /** + * set to true to throw an exception when a parameter does not match the requirements + set to false to disable exceptions when a parameter does not match the requirements (and return null instead) + set to null to disable parameter checks against requirements + 'true' is the preferred configuration in development mode, while 'false' or 'null' might be preferred in production + * @default true + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function strictRequirements($value): static + { + $this->_usedProperties['strictRequirements'] = true; + $this->strictRequirements = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function utf8($value): static + { + $this->_usedProperties['utf8'] = true; + $this->utf8 = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('resource', $value)) { + $this->_usedProperties['resource'] = true; + $this->resource = $value['resource']; + unset($value['resource']); + } + + if (array_key_exists('type', $value)) { + $this->_usedProperties['type'] = true; + $this->type = $value['type']; + unset($value['type']); + } + + if (array_key_exists('cache_dir', $value)) { + $this->_usedProperties['cacheDir'] = true; + $this->cacheDir = $value['cache_dir']; + unset($value['cache_dir']); + } + + if (array_key_exists('default_uri', $value)) { + $this->_usedProperties['defaultUri'] = true; + $this->defaultUri = $value['default_uri']; + unset($value['default_uri']); + } + + if (array_key_exists('http_port', $value)) { + $this->_usedProperties['httpPort'] = true; + $this->httpPort = $value['http_port']; + unset($value['http_port']); + } + + if (array_key_exists('https_port', $value)) { + $this->_usedProperties['httpsPort'] = true; + $this->httpsPort = $value['https_port']; + unset($value['https_port']); + } + + if (array_key_exists('strict_requirements', $value)) { + $this->_usedProperties['strictRequirements'] = true; + $this->strictRequirements = $value['strict_requirements']; + unset($value['strict_requirements']); + } + + if (array_key_exists('utf8', $value)) { + $this->_usedProperties['utf8'] = true; + $this->utf8 = $value['utf8']; + unset($value['utf8']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['resource'])) { + $output['resource'] = $this->resource; + } + if (isset($this->_usedProperties['type'])) { + $output['type'] = $this->type; + } + if (isset($this->_usedProperties['cacheDir'])) { + $output['cache_dir'] = $this->cacheDir; + } + if (isset($this->_usedProperties['defaultUri'])) { + $output['default_uri'] = $this->defaultUri; + } + if (isset($this->_usedProperties['httpPort'])) { + $output['http_port'] = $this->httpPort; + } + if (isset($this->_usedProperties['httpsPort'])) { + $output['https_port'] = $this->httpsPort; + } + if (isset($this->_usedProperties['strictRequirements'])) { + $output['strict_requirements'] = $this->strictRequirements; + } + if (isset($this->_usedProperties['utf8'])) { + $output['utf8'] = $this->utf8; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SecretsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SecretsConfig.php new file mode 100644 index 00000000..d4ca6534 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SecretsConfig.php @@ -0,0 +1,121 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default '%kernel.project_dir%/config/secrets/%kernel.runtime_environment%' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function vaultDirectory($value): static + { + $this->_usedProperties['vaultDirectory'] = true; + $this->vaultDirectory = $value; + + return $this; + } + + /** + * @default '%kernel.project_dir%/.env.%kernel.environment%.local' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function localDotenvFile($value): static + { + $this->_usedProperties['localDotenvFile'] = true; + $this->localDotenvFile = $value; + + return $this; + } + + /** + * @default 'base64:default::SYMFONY_DECRYPTION_SECRET' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function decryptionEnvVar($value): static + { + $this->_usedProperties['decryptionEnvVar'] = true; + $this->decryptionEnvVar = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('vault_directory', $value)) { + $this->_usedProperties['vaultDirectory'] = true; + $this->vaultDirectory = $value['vault_directory']; + unset($value['vault_directory']); + } + + if (array_key_exists('local_dotenv_file', $value)) { + $this->_usedProperties['localDotenvFile'] = true; + $this->localDotenvFile = $value['local_dotenv_file']; + unset($value['local_dotenv_file']); + } + + if (array_key_exists('decryption_env_var', $value)) { + $this->_usedProperties['decryptionEnvVar'] = true; + $this->decryptionEnvVar = $value['decryption_env_var']; + unset($value['decryption_env_var']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['vaultDirectory'])) { + $output['vault_directory'] = $this->vaultDirectory; + } + if (isset($this->_usedProperties['localDotenvFile'])) { + $output['local_dotenv_file'] = $this->localDotenvFile; + } + if (isset($this->_usedProperties['decryptionEnvVar'])) { + $output['decryption_env_var'] = $this->decryptionEnvVar; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SemaphoreConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SemaphoreConfig.php new file mode 100644 index 00000000..f5c88868 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SemaphoreConfig.php @@ -0,0 +1,73 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @return $this + */ + public function resource(string $name, mixed $value): static + { + $this->_usedProperties['resources'] = true; + $this->resources[$name] = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('resources', $value)) { + $this->_usedProperties['resources'] = true; + $this->resources = $value['resources']; + unset($value['resources']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['resources'])) { + $output['resources'] = $this->resources; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Serializer/MappingConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Serializer/MappingConfig.php new file mode 100644 index 00000000..10d5a45a --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Serializer/MappingConfig.php @@ -0,0 +1,52 @@ + $value + * + * @return $this + */ + public function paths(ParamConfigurator|array $value): static + { + $this->_usedProperties['paths'] = true; + $this->paths = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('paths', $value)) { + $this->_usedProperties['paths'] = true; + $this->paths = $value['paths']; + unset($value['paths']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['paths'])) { + $output['paths'] = $this->paths; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SerializerConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SerializerConfig.php new file mode 100644 index 00000000..5931a265 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SerializerConfig.php @@ -0,0 +1,192 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function enableAnnotations($value): static + { + $this->_usedProperties['enableAnnotations'] = true; + $this->enableAnnotations = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function nameConverter($value): static + { + $this->_usedProperties['nameConverter'] = true; + $this->nameConverter = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function circularReferenceHandler($value): static + { + $this->_usedProperties['circularReferenceHandler'] = true; + $this->circularReferenceHandler = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function maxDepthHandler($value): static + { + $this->_usedProperties['maxDepthHandler'] = true; + $this->maxDepthHandler = $value; + + return $this; + } + + /** + * @default {"paths":[]} + */ + public function mapping(array $value = []): \Symfony\Config\Framework\Serializer\MappingConfig + { + if (null === $this->mapping) { + $this->_usedProperties['mapping'] = true; + $this->mapping = new \Symfony\Config\Framework\Serializer\MappingConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "mapping()" has already been initialized. You cannot pass values the second time you call mapping().'); + } + + return $this->mapping; + } + + /** + * @return $this + */ + public function defaultContext(string $name, mixed $value): static + { + $this->_usedProperties['defaultContext'] = true; + $this->defaultContext[$name] = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('enable_annotations', $value)) { + $this->_usedProperties['enableAnnotations'] = true; + $this->enableAnnotations = $value['enable_annotations']; + unset($value['enable_annotations']); + } + + if (array_key_exists('name_converter', $value)) { + $this->_usedProperties['nameConverter'] = true; + $this->nameConverter = $value['name_converter']; + unset($value['name_converter']); + } + + if (array_key_exists('circular_reference_handler', $value)) { + $this->_usedProperties['circularReferenceHandler'] = true; + $this->circularReferenceHandler = $value['circular_reference_handler']; + unset($value['circular_reference_handler']); + } + + if (array_key_exists('max_depth_handler', $value)) { + $this->_usedProperties['maxDepthHandler'] = true; + $this->maxDepthHandler = $value['max_depth_handler']; + unset($value['max_depth_handler']); + } + + if (array_key_exists('mapping', $value)) { + $this->_usedProperties['mapping'] = true; + $this->mapping = new \Symfony\Config\Framework\Serializer\MappingConfig($value['mapping']); + unset($value['mapping']); + } + + if (array_key_exists('default_context', $value)) { + $this->_usedProperties['defaultContext'] = true; + $this->defaultContext = $value['default_context']; + unset($value['default_context']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['enableAnnotations'])) { + $output['enable_annotations'] = $this->enableAnnotations; + } + if (isset($this->_usedProperties['nameConverter'])) { + $output['name_converter'] = $this->nameConverter; + } + if (isset($this->_usedProperties['circularReferenceHandler'])) { + $output['circular_reference_handler'] = $this->circularReferenceHandler; + } + if (isset($this->_usedProperties['maxDepthHandler'])) { + $output['max_depth_handler'] = $this->maxDepthHandler; + } + if (isset($this->_usedProperties['mapping'])) { + $output['mapping'] = $this->mapping->toArray(); + } + if (isset($this->_usedProperties['defaultContext'])) { + $output['default_context'] = $this->defaultContext; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SessionConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SessionConfig.php new file mode 100644 index 00000000..6da1f3e1 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SessionConfig.php @@ -0,0 +1,444 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default 'session.storage.factory.native' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function storageFactoryId($value): static + { + $this->_usedProperties['storageFactoryId'] = true; + $this->storageFactoryId = $value; + + return $this; + } + + /** + * @default 'session.handler.native_file' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function handlerId($value): static + { + $this->_usedProperties['handlerId'] = true; + $this->handlerId = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function name($value): static + { + $this->_usedProperties['name'] = true; + $this->name = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cookieLifetime($value): static + { + $this->_usedProperties['cookieLifetime'] = true; + $this->cookieLifetime = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cookiePath($value): static + { + $this->_usedProperties['cookiePath'] = true; + $this->cookiePath = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cookieDomain($value): static + { + $this->_usedProperties['cookieDomain'] = true; + $this->cookieDomain = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|true|false|'auto' $value + * @return $this + */ + public function cookieSecure($value): static + { + $this->_usedProperties['cookieSecure'] = true; + $this->cookieSecure = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function cookieHttponly($value): static + { + $this->_usedProperties['cookieHttponly'] = true; + $this->cookieHttponly = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|NULL|'lax'|'strict'|'none' $value + * @return $this + */ + public function cookieSamesite($value): static + { + $this->_usedProperties['cookieSamesite'] = true; + $this->cookieSamesite = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function useCookies($value): static + { + $this->_usedProperties['useCookies'] = true; + $this->useCookies = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function gcDivisor($value): static + { + $this->_usedProperties['gcDivisor'] = true; + $this->gcDivisor = $value; + + return $this; + } + + /** + * @default 1 + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function gcProbability($value): static + { + $this->_usedProperties['gcProbability'] = true; + $this->gcProbability = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function gcMaxlifetime($value): static + { + $this->_usedProperties['gcMaxlifetime'] = true; + $this->gcMaxlifetime = $value; + + return $this; + } + + /** + * @default '%kernel.cache_dir%/sessions' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function savePath($value): static + { + $this->_usedProperties['savePath'] = true; + $this->savePath = $value; + + return $this; + } + + /** + * seconds to wait between 2 session metadata updates + * @default 0 + * @param ParamConfigurator|int $value + * @return $this + */ + public function metadataUpdateThreshold($value): static + { + $this->_usedProperties['metadataUpdateThreshold'] = true; + $this->metadataUpdateThreshold = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function sidLength($value): static + { + $this->_usedProperties['sidLength'] = true; + $this->sidLength = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|int $value + * @return $this + */ + public function sidBitsPerCharacter($value): static + { + $this->_usedProperties['sidBitsPerCharacter'] = true; + $this->sidBitsPerCharacter = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('storage_factory_id', $value)) { + $this->_usedProperties['storageFactoryId'] = true; + $this->storageFactoryId = $value['storage_factory_id']; + unset($value['storage_factory_id']); + } + + if (array_key_exists('handler_id', $value)) { + $this->_usedProperties['handlerId'] = true; + $this->handlerId = $value['handler_id']; + unset($value['handler_id']); + } + + if (array_key_exists('name', $value)) { + $this->_usedProperties['name'] = true; + $this->name = $value['name']; + unset($value['name']); + } + + if (array_key_exists('cookie_lifetime', $value)) { + $this->_usedProperties['cookieLifetime'] = true; + $this->cookieLifetime = $value['cookie_lifetime']; + unset($value['cookie_lifetime']); + } + + if (array_key_exists('cookie_path', $value)) { + $this->_usedProperties['cookiePath'] = true; + $this->cookiePath = $value['cookie_path']; + unset($value['cookie_path']); + } + + if (array_key_exists('cookie_domain', $value)) { + $this->_usedProperties['cookieDomain'] = true; + $this->cookieDomain = $value['cookie_domain']; + unset($value['cookie_domain']); + } + + if (array_key_exists('cookie_secure', $value)) { + $this->_usedProperties['cookieSecure'] = true; + $this->cookieSecure = $value['cookie_secure']; + unset($value['cookie_secure']); + } + + if (array_key_exists('cookie_httponly', $value)) { + $this->_usedProperties['cookieHttponly'] = true; + $this->cookieHttponly = $value['cookie_httponly']; + unset($value['cookie_httponly']); + } + + if (array_key_exists('cookie_samesite', $value)) { + $this->_usedProperties['cookieSamesite'] = true; + $this->cookieSamesite = $value['cookie_samesite']; + unset($value['cookie_samesite']); + } + + if (array_key_exists('use_cookies', $value)) { + $this->_usedProperties['useCookies'] = true; + $this->useCookies = $value['use_cookies']; + unset($value['use_cookies']); + } + + if (array_key_exists('gc_divisor', $value)) { + $this->_usedProperties['gcDivisor'] = true; + $this->gcDivisor = $value['gc_divisor']; + unset($value['gc_divisor']); + } + + if (array_key_exists('gc_probability', $value)) { + $this->_usedProperties['gcProbability'] = true; + $this->gcProbability = $value['gc_probability']; + unset($value['gc_probability']); + } + + if (array_key_exists('gc_maxlifetime', $value)) { + $this->_usedProperties['gcMaxlifetime'] = true; + $this->gcMaxlifetime = $value['gc_maxlifetime']; + unset($value['gc_maxlifetime']); + } + + if (array_key_exists('save_path', $value)) { + $this->_usedProperties['savePath'] = true; + $this->savePath = $value['save_path']; + unset($value['save_path']); + } + + if (array_key_exists('metadata_update_threshold', $value)) { + $this->_usedProperties['metadataUpdateThreshold'] = true; + $this->metadataUpdateThreshold = $value['metadata_update_threshold']; + unset($value['metadata_update_threshold']); + } + + if (array_key_exists('sid_length', $value)) { + $this->_usedProperties['sidLength'] = true; + $this->sidLength = $value['sid_length']; + unset($value['sid_length']); + } + + if (array_key_exists('sid_bits_per_character', $value)) { + $this->_usedProperties['sidBitsPerCharacter'] = true; + $this->sidBitsPerCharacter = $value['sid_bits_per_character']; + unset($value['sid_bits_per_character']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['storageFactoryId'])) { + $output['storage_factory_id'] = $this->storageFactoryId; + } + if (isset($this->_usedProperties['handlerId'])) { + $output['handler_id'] = $this->handlerId; + } + if (isset($this->_usedProperties['name'])) { + $output['name'] = $this->name; + } + if (isset($this->_usedProperties['cookieLifetime'])) { + $output['cookie_lifetime'] = $this->cookieLifetime; + } + if (isset($this->_usedProperties['cookiePath'])) { + $output['cookie_path'] = $this->cookiePath; + } + if (isset($this->_usedProperties['cookieDomain'])) { + $output['cookie_domain'] = $this->cookieDomain; + } + if (isset($this->_usedProperties['cookieSecure'])) { + $output['cookie_secure'] = $this->cookieSecure; + } + if (isset($this->_usedProperties['cookieHttponly'])) { + $output['cookie_httponly'] = $this->cookieHttponly; + } + if (isset($this->_usedProperties['cookieSamesite'])) { + $output['cookie_samesite'] = $this->cookieSamesite; + } + if (isset($this->_usedProperties['useCookies'])) { + $output['use_cookies'] = $this->useCookies; + } + if (isset($this->_usedProperties['gcDivisor'])) { + $output['gc_divisor'] = $this->gcDivisor; + } + if (isset($this->_usedProperties['gcProbability'])) { + $output['gc_probability'] = $this->gcProbability; + } + if (isset($this->_usedProperties['gcMaxlifetime'])) { + $output['gc_maxlifetime'] = $this->gcMaxlifetime; + } + if (isset($this->_usedProperties['savePath'])) { + $output['save_path'] = $this->savePath; + } + if (isset($this->_usedProperties['metadataUpdateThreshold'])) { + $output['metadata_update_threshold'] = $this->metadataUpdateThreshold; + } + if (isset($this->_usedProperties['sidLength'])) { + $output['sid_length'] = $this->sidLength; + } + if (isset($this->_usedProperties['sidBitsPerCharacter'])) { + $output['sid_bits_per_character'] = $this->sidBitsPerCharacter; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SsiConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SsiConfig.php new file mode 100644 index 00000000..0f00bf78 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/SsiConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/ProviderConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/ProviderConfig.php new file mode 100644 index 00000000..087d6296 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/ProviderConfig.php @@ -0,0 +1,98 @@ +_usedProperties['dsn'] = true; + $this->dsn = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function domains(ParamConfigurator|array $value): static + { + $this->_usedProperties['domains'] = true; + $this->domains = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function locales(ParamConfigurator|array $value): static + { + $this->_usedProperties['locales'] = true; + $this->locales = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('dsn', $value)) { + $this->_usedProperties['dsn'] = true; + $this->dsn = $value['dsn']; + unset($value['dsn']); + } + + if (array_key_exists('domains', $value)) { + $this->_usedProperties['domains'] = true; + $this->domains = $value['domains']; + unset($value['domains']); + } + + if (array_key_exists('locales', $value)) { + $this->_usedProperties['locales'] = true; + $this->locales = $value['locales']; + unset($value['locales']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['dsn'])) { + $output['dsn'] = $this->dsn; + } + if (isset($this->_usedProperties['domains'])) { + $output['domains'] = $this->domains; + } + if (isset($this->_usedProperties['locales'])) { + $output['locales'] = $this->locales; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/PseudoLocalizationConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/PseudoLocalizationConfig.php new file mode 100644 index 00000000..fa61472e --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Translator/PseudoLocalizationConfig.php @@ -0,0 +1,167 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function accents($value): static + { + $this->_usedProperties['accents'] = true; + $this->accents = $value; + + return $this; + } + + /** + * @default 1.0 + * @param ParamConfigurator|float $value + * @return $this + */ + public function expansionFactor($value): static + { + $this->_usedProperties['expansionFactor'] = true; + $this->expansionFactor = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function brackets($value): static + { + $this->_usedProperties['brackets'] = true; + $this->brackets = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function parseHtml($value): static + { + $this->_usedProperties['parseHtml'] = true; + $this->parseHtml = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function localizableHtmlAttributes(ParamConfigurator|array $value): static + { + $this->_usedProperties['localizableHtmlAttributes'] = true; + $this->localizableHtmlAttributes = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('accents', $value)) { + $this->_usedProperties['accents'] = true; + $this->accents = $value['accents']; + unset($value['accents']); + } + + if (array_key_exists('expansion_factor', $value)) { + $this->_usedProperties['expansionFactor'] = true; + $this->expansionFactor = $value['expansion_factor']; + unset($value['expansion_factor']); + } + + if (array_key_exists('brackets', $value)) { + $this->_usedProperties['brackets'] = true; + $this->brackets = $value['brackets']; + unset($value['brackets']); + } + + if (array_key_exists('parse_html', $value)) { + $this->_usedProperties['parseHtml'] = true; + $this->parseHtml = $value['parse_html']; + unset($value['parse_html']); + } + + if (array_key_exists('localizable_html_attributes', $value)) { + $this->_usedProperties['localizableHtmlAttributes'] = true; + $this->localizableHtmlAttributes = $value['localizable_html_attributes']; + unset($value['localizable_html_attributes']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['accents'])) { + $output['accents'] = $this->accents; + } + if (isset($this->_usedProperties['expansionFactor'])) { + $output['expansion_factor'] = $this->expansionFactor; + } + if (isset($this->_usedProperties['brackets'])) { + $output['brackets'] = $this->brackets; + } + if (isset($this->_usedProperties['parseHtml'])) { + $output['parse_html'] = $this->parseHtml; + } + if (isset($this->_usedProperties['localizableHtmlAttributes'])) { + $output['localizable_html_attributes'] = $this->localizableHtmlAttributes; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/TranslatorConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/TranslatorConfig.php new file mode 100644 index 00000000..4856a40a --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/TranslatorConfig.php @@ -0,0 +1,255 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function fallbacks(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['fallbacks'] = true; + $this->fallbacks = $value; + + return $this; + } + + /** + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function logging($value): static + { + $this->_usedProperties['logging'] = true; + $this->logging = $value; + + return $this; + } + + /** + * @default 'translator.formatter.default' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function formatter($value): static + { + $this->_usedProperties['formatter'] = true; + $this->formatter = $value; + + return $this; + } + + /** + * @default '%kernel.cache_dir%/translations' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cacheDir($value): static + { + $this->_usedProperties['cacheDir'] = true; + $this->cacheDir = $value; + + return $this; + } + + /** + * The default path used to load translations + * @default '%kernel.project_dir%/translations' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultPath($value): static + { + $this->_usedProperties['defaultPath'] = true; + $this->defaultPath = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function paths(ParamConfigurator|array $value): static + { + $this->_usedProperties['paths'] = true; + $this->paths = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @default {"enabled":false,"accents":true,"expansion_factor":1,"brackets":true,"parse_html":false,"localizable_html_attributes":[]} + * @return \Symfony\Config\Framework\Translator\PseudoLocalizationConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Translator\PseudoLocalizationConfig : static) + */ + public function pseudoLocalization(array $value = []): \Symfony\Config\Framework\Translator\PseudoLocalizationConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['pseudoLocalization'] = true; + $this->pseudoLocalization = $value; + + return $this; + } + + if (!$this->pseudoLocalization instanceof \Symfony\Config\Framework\Translator\PseudoLocalizationConfig) { + $this->_usedProperties['pseudoLocalization'] = true; + $this->pseudoLocalization = new \Symfony\Config\Framework\Translator\PseudoLocalizationConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "pseudoLocalization()" has already been initialized. You cannot pass values the second time you call pseudoLocalization().'); + } + + return $this->pseudoLocalization; + } + + /** + * Translation providers you can read/write your translations from + */ + public function provider(string $name, array $value = []): \Symfony\Config\Framework\Translator\ProviderConfig + { + if (!isset($this->providers[$name])) { + $this->_usedProperties['providers'] = true; + $this->providers[$name] = new \Symfony\Config\Framework\Translator\ProviderConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "provider()" has already been initialized. You cannot pass values the second time you call provider().'); + } + + return $this->providers[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('fallbacks', $value)) { + $this->_usedProperties['fallbacks'] = true; + $this->fallbacks = $value['fallbacks']; + unset($value['fallbacks']); + } + + if (array_key_exists('logging', $value)) { + $this->_usedProperties['logging'] = true; + $this->logging = $value['logging']; + unset($value['logging']); + } + + if (array_key_exists('formatter', $value)) { + $this->_usedProperties['formatter'] = true; + $this->formatter = $value['formatter']; + unset($value['formatter']); + } + + if (array_key_exists('cache_dir', $value)) { + $this->_usedProperties['cacheDir'] = true; + $this->cacheDir = $value['cache_dir']; + unset($value['cache_dir']); + } + + if (array_key_exists('default_path', $value)) { + $this->_usedProperties['defaultPath'] = true; + $this->defaultPath = $value['default_path']; + unset($value['default_path']); + } + + if (array_key_exists('paths', $value)) { + $this->_usedProperties['paths'] = true; + $this->paths = $value['paths']; + unset($value['paths']); + } + + if (array_key_exists('pseudo_localization', $value)) { + $this->_usedProperties['pseudoLocalization'] = true; + $this->pseudoLocalization = \is_array($value['pseudo_localization']) ? new \Symfony\Config\Framework\Translator\PseudoLocalizationConfig($value['pseudo_localization']) : $value['pseudo_localization']; + unset($value['pseudo_localization']); + } + + if (array_key_exists('providers', $value)) { + $this->_usedProperties['providers'] = true; + $this->providers = array_map(function ($v) { return new \Symfony\Config\Framework\Translator\ProviderConfig($v); }, $value['providers']); + unset($value['providers']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['fallbacks'])) { + $output['fallbacks'] = $this->fallbacks; + } + if (isset($this->_usedProperties['logging'])) { + $output['logging'] = $this->logging; + } + if (isset($this->_usedProperties['formatter'])) { + $output['formatter'] = $this->formatter; + } + if (isset($this->_usedProperties['cacheDir'])) { + $output['cache_dir'] = $this->cacheDir; + } + if (isset($this->_usedProperties['defaultPath'])) { + $output['default_path'] = $this->defaultPath; + } + if (isset($this->_usedProperties['paths'])) { + $output['paths'] = $this->paths; + } + if (isset($this->_usedProperties['pseudoLocalization'])) { + $output['pseudo_localization'] = $this->pseudoLocalization instanceof \Symfony\Config\Framework\Translator\PseudoLocalizationConfig ? $this->pseudoLocalization->toArray() : $this->pseudoLocalization; + } + if (isset($this->_usedProperties['providers'])) { + $output['providers'] = array_map(function ($v) { return $v->toArray(); }, $this->providers); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/UidConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/UidConfig.php new file mode 100644 index 00000000..251d6c95 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/UidConfig.php @@ -0,0 +1,167 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default 6 + * @param ParamConfigurator|7|6|4|1 $value + * @return $this + */ + public function defaultUuidVersion($value): static + { + $this->_usedProperties['defaultUuidVersion'] = true; + $this->defaultUuidVersion = $value; + + return $this; + } + + /** + * @default 5 + * @param ParamConfigurator|5|3 $value + * @return $this + */ + public function nameBasedUuidVersion($value): static + { + $this->_usedProperties['nameBasedUuidVersion'] = true; + $this->nameBasedUuidVersion = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function nameBasedUuidNamespace($value): static + { + $this->_usedProperties['nameBasedUuidNamespace'] = true; + $this->nameBasedUuidNamespace = $value; + + return $this; + } + + /** + * @default 6 + * @param ParamConfigurator|7|6|1 $value + * @return $this + */ + public function timeBasedUuidVersion($value): static + { + $this->_usedProperties['timeBasedUuidVersion'] = true; + $this->timeBasedUuidVersion = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function timeBasedUuidNode($value): static + { + $this->_usedProperties['timeBasedUuidNode'] = true; + $this->timeBasedUuidNode = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('default_uuid_version', $value)) { + $this->_usedProperties['defaultUuidVersion'] = true; + $this->defaultUuidVersion = $value['default_uuid_version']; + unset($value['default_uuid_version']); + } + + if (array_key_exists('name_based_uuid_version', $value)) { + $this->_usedProperties['nameBasedUuidVersion'] = true; + $this->nameBasedUuidVersion = $value['name_based_uuid_version']; + unset($value['name_based_uuid_version']); + } + + if (array_key_exists('name_based_uuid_namespace', $value)) { + $this->_usedProperties['nameBasedUuidNamespace'] = true; + $this->nameBasedUuidNamespace = $value['name_based_uuid_namespace']; + unset($value['name_based_uuid_namespace']); + } + + if (array_key_exists('time_based_uuid_version', $value)) { + $this->_usedProperties['timeBasedUuidVersion'] = true; + $this->timeBasedUuidVersion = $value['time_based_uuid_version']; + unset($value['time_based_uuid_version']); + } + + if (array_key_exists('time_based_uuid_node', $value)) { + $this->_usedProperties['timeBasedUuidNode'] = true; + $this->timeBasedUuidNode = $value['time_based_uuid_node']; + unset($value['time_based_uuid_node']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['defaultUuidVersion'])) { + $output['default_uuid_version'] = $this->defaultUuidVersion; + } + if (isset($this->_usedProperties['nameBasedUuidVersion'])) { + $output['name_based_uuid_version'] = $this->nameBasedUuidVersion; + } + if (isset($this->_usedProperties['nameBasedUuidNamespace'])) { + $output['name_based_uuid_namespace'] = $this->nameBasedUuidNamespace; + } + if (isset($this->_usedProperties['timeBasedUuidVersion'])) { + $output['time_based_uuid_version'] = $this->timeBasedUuidVersion; + } + if (isset($this->_usedProperties['timeBasedUuidNode'])) { + $output['time_based_uuid_node'] = $this->timeBasedUuidNode; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/AutoMappingConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/AutoMappingConfig.php new file mode 100644 index 00000000..92659704 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/AutoMappingConfig.php @@ -0,0 +1,52 @@ + $value + * + * @return $this + */ + public function services(ParamConfigurator|array $value): static + { + $this->_usedProperties['services'] = true; + $this->services = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('services', $value)) { + $this->_usedProperties['services'] = true; + $this->services = $value['services']; + unset($value['services']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['services'])) { + $output['services'] = $this->services; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/MappingConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/MappingConfig.php new file mode 100644 index 00000000..ca4a90a0 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/MappingConfig.php @@ -0,0 +1,52 @@ + $value + * + * @return $this + */ + public function paths(ParamConfigurator|array $value): static + { + $this->_usedProperties['paths'] = true; + $this->paths = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('paths', $value)) { + $this->_usedProperties['paths'] = true; + $this->paths = $value['paths']; + unset($value['paths']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['paths'])) { + $output['paths'] = $this->paths; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/NotCompromisedPasswordConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/NotCompromisedPasswordConfig.php new file mode 100644 index 00000000..58853a9b --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Validation/NotCompromisedPasswordConfig.php @@ -0,0 +1,77 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * API endpoint for the NotCompromisedPassword Validator. + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function endpoint($value): static + { + $this->_usedProperties['endpoint'] = true; + $this->endpoint = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('endpoint', $value)) { + $this->_usedProperties['endpoint'] = true; + $this->endpoint = $value['endpoint']; + unset($value['endpoint']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['endpoint'])) { + $output['endpoint'] = $this->endpoint; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ValidationConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ValidationConfig.php new file mode 100644 index 00000000..cca946d0 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/ValidationConfig.php @@ -0,0 +1,259 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function cache($value): static + { + $this->_usedProperties['cache'] = true; + $this->cache = $value; + + return $this; + } + + /** + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function enableAnnotations($value): static + { + $this->_usedProperties['enableAnnotations'] = true; + $this->enableAnnotations = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function staticMethod(ParamConfigurator|array $value): static + { + $this->_usedProperties['staticMethod'] = true; + $this->staticMethod = $value; + + return $this; + } + + /** + * @default 'validators' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function translationDomain($value): static + { + $this->_usedProperties['translationDomain'] = true; + $this->translationDomain = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|'html5'|'loose'|'strict' $value + * @return $this + */ + public function emailValidationMode($value): static + { + $this->_usedProperties['emailValidationMode'] = true; + $this->emailValidationMode = $value; + + return $this; + } + + /** + * @default {"paths":[]} + */ + public function mapping(array $value = []): \Symfony\Config\Framework\Validation\MappingConfig + { + if (null === $this->mapping) { + $this->_usedProperties['mapping'] = true; + $this->mapping = new \Symfony\Config\Framework\Validation\MappingConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "mapping()" has already been initialized. You cannot pass values the second time you call mapping().'); + } + + return $this->mapping; + } + + /** + * @default {"enabled":true,"endpoint":null} + */ + public function notCompromisedPassword(array $value = []): \Symfony\Config\Framework\Validation\NotCompromisedPasswordConfig + { + if (null === $this->notCompromisedPassword) { + $this->_usedProperties['notCompromisedPassword'] = true; + $this->notCompromisedPassword = new \Symfony\Config\Framework\Validation\NotCompromisedPasswordConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "notCompromisedPassword()" has already been initialized. You cannot pass values the second time you call notCompromisedPassword().'); + } + + return $this->notCompromisedPassword; + } + + /** + * @template TValue + * @param TValue $value + * A collection of namespaces for which auto-mapping will be enabled by default, or null to opt-in with the EnableAutoMapping constraint. + * @example [] + * @example ["validator.property_info_loader"] + * @return \Symfony\Config\Framework\Validation\AutoMappingConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Validation\AutoMappingConfig : static) + */ + public function autoMapping(string $namespace, array $value = []): \Symfony\Config\Framework\Validation\AutoMappingConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['autoMapping'] = true; + $this->autoMapping[$namespace] = $value; + + return $this; + } + + if (!isset($this->autoMapping[$namespace]) || !$this->autoMapping[$namespace] instanceof \Symfony\Config\Framework\Validation\AutoMappingConfig) { + $this->_usedProperties['autoMapping'] = true; + $this->autoMapping[$namespace] = new \Symfony\Config\Framework\Validation\AutoMappingConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "autoMapping()" has already been initialized. You cannot pass values the second time you call autoMapping().'); + } + + return $this->autoMapping[$namespace]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('cache', $value)) { + $this->_usedProperties['cache'] = true; + $this->cache = $value['cache']; + unset($value['cache']); + } + + if (array_key_exists('enable_annotations', $value)) { + $this->_usedProperties['enableAnnotations'] = true; + $this->enableAnnotations = $value['enable_annotations']; + unset($value['enable_annotations']); + } + + if (array_key_exists('static_method', $value)) { + $this->_usedProperties['staticMethod'] = true; + $this->staticMethod = $value['static_method']; + unset($value['static_method']); + } + + if (array_key_exists('translation_domain', $value)) { + $this->_usedProperties['translationDomain'] = true; + $this->translationDomain = $value['translation_domain']; + unset($value['translation_domain']); + } + + if (array_key_exists('email_validation_mode', $value)) { + $this->_usedProperties['emailValidationMode'] = true; + $this->emailValidationMode = $value['email_validation_mode']; + unset($value['email_validation_mode']); + } + + if (array_key_exists('mapping', $value)) { + $this->_usedProperties['mapping'] = true; + $this->mapping = new \Symfony\Config\Framework\Validation\MappingConfig($value['mapping']); + unset($value['mapping']); + } + + if (array_key_exists('not_compromised_password', $value)) { + $this->_usedProperties['notCompromisedPassword'] = true; + $this->notCompromisedPassword = new \Symfony\Config\Framework\Validation\NotCompromisedPasswordConfig($value['not_compromised_password']); + unset($value['not_compromised_password']); + } + + if (array_key_exists('auto_mapping', $value)) { + $this->_usedProperties['autoMapping'] = true; + $this->autoMapping = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Validation\AutoMappingConfig($v) : $v; }, $value['auto_mapping']); + unset($value['auto_mapping']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['cache'])) { + $output['cache'] = $this->cache; + } + if (isset($this->_usedProperties['enableAnnotations'])) { + $output['enable_annotations'] = $this->enableAnnotations; + } + if (isset($this->_usedProperties['staticMethod'])) { + $output['static_method'] = $this->staticMethod; + } + if (isset($this->_usedProperties['translationDomain'])) { + $output['translation_domain'] = $this->translationDomain; + } + if (isset($this->_usedProperties['emailValidationMode'])) { + $output['email_validation_mode'] = $this->emailValidationMode; + } + if (isset($this->_usedProperties['mapping'])) { + $output['mapping'] = $this->mapping->toArray(); + } + if (isset($this->_usedProperties['notCompromisedPassword'])) { + $output['not_compromised_password'] = $this->notCompromisedPassword->toArray(); + } + if (isset($this->_usedProperties['autoMapping'])) { + $output['auto_mapping'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Validation\AutoMappingConfig ? $v->toArray() : $v; }, $this->autoMapping); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WebLinkConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WebLinkConfig.php new file mode 100644 index 00000000..9b61a87a --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WebLinkConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig.php new file mode 100644 index 00000000..c4c474f1 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig.php @@ -0,0 +1,290 @@ +_usedProperties['auditTrail'] = true; + $this->auditTrail = $value; + + return $this; + } + + if (!$this->auditTrail instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig\AuditTrailConfig) { + $this->_usedProperties['auditTrail'] = true; + $this->auditTrail = new \Symfony\Config\Framework\Workflows\WorkflowsConfig\AuditTrailConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "auditTrail()" has already been initialized. You cannot pass values the second time you call auditTrail().'); + } + + return $this->auditTrail; + } + + /** + * @default 'state_machine' + * @param ParamConfigurator|'workflow'|'state_machine' $value + * @return $this + */ + public function type($value): static + { + $this->_usedProperties['type'] = true; + $this->type = $value; + + return $this; + } + + public function markingStore(array $value = []): \Symfony\Config\Framework\Workflows\WorkflowsConfig\MarkingStoreConfig + { + if (null === $this->markingStore) { + $this->_usedProperties['markingStore'] = true; + $this->markingStore = new \Symfony\Config\Framework\Workflows\WorkflowsConfig\MarkingStoreConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "markingStore()" has already been initialized. You cannot pass values the second time you call markingStore().'); + } + + return $this->markingStore; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function supports(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['supports'] = true; + $this->supports = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function supportStrategy($value): static + { + $this->_usedProperties['supportStrategy'] = true; + $this->supportStrategy = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|mixed $value + * + * @return $this + */ + public function initialMarking(mixed $value): static + { + $this->_usedProperties['initialMarking'] = true; + $this->initialMarking = $value; + + return $this; + } + + /** + * Select which Transition events should be dispatched for this Workflow + * @example workflow.enter + * @example workflow.transition + * @default null + * @param ParamConfigurator|mixed $value + * + * @return $this + */ + public function eventsToDispatch(mixed $value = NULL): static + { + $this->_usedProperties['eventsToDispatch'] = true; + $this->eventsToDispatch = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig : static) + */ + public function place(mixed $value = []): \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig|static + { + $this->_usedProperties['places'] = true; + if (!\is_array($value)) { + $this->places[] = $value; + + return $this; + } + + return $this->places[] = new \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig($value); + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig : static) + */ + public function transition(mixed $value = []): \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig|static + { + $this->_usedProperties['transitions'] = true; + if (!\is_array($value)) { + $this->transitions[] = $value; + + return $this; + } + + return $this->transitions[] = new \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig($value); + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function metadata(ParamConfigurator|array $value): static + { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('audit_trail', $value)) { + $this->_usedProperties['auditTrail'] = true; + $this->auditTrail = \is_array($value['audit_trail']) ? new \Symfony\Config\Framework\Workflows\WorkflowsConfig\AuditTrailConfig($value['audit_trail']) : $value['audit_trail']; + unset($value['audit_trail']); + } + + if (array_key_exists('type', $value)) { + $this->_usedProperties['type'] = true; + $this->type = $value['type']; + unset($value['type']); + } + + if (array_key_exists('marking_store', $value)) { + $this->_usedProperties['markingStore'] = true; + $this->markingStore = new \Symfony\Config\Framework\Workflows\WorkflowsConfig\MarkingStoreConfig($value['marking_store']); + unset($value['marking_store']); + } + + if (array_key_exists('supports', $value)) { + $this->_usedProperties['supports'] = true; + $this->supports = $value['supports']; + unset($value['supports']); + } + + if (array_key_exists('support_strategy', $value)) { + $this->_usedProperties['supportStrategy'] = true; + $this->supportStrategy = $value['support_strategy']; + unset($value['support_strategy']); + } + + if (array_key_exists('initial_marking', $value)) { + $this->_usedProperties['initialMarking'] = true; + $this->initialMarking = $value['initial_marking']; + unset($value['initial_marking']); + } + + if (array_key_exists('events_to_dispatch', $value)) { + $this->_usedProperties['eventsToDispatch'] = true; + $this->eventsToDispatch = $value['events_to_dispatch']; + unset($value['events_to_dispatch']); + } + + if (array_key_exists('places', $value)) { + $this->_usedProperties['places'] = true; + $this->places = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig($v) : $v; }, $value['places']); + unset($value['places']); + } + + if (array_key_exists('transitions', $value)) { + $this->_usedProperties['transitions'] = true; + $this->transitions = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig($v) : $v; }, $value['transitions']); + unset($value['transitions']); + } + + if (array_key_exists('metadata', $value)) { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value['metadata']; + unset($value['metadata']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['auditTrail'])) { + $output['audit_trail'] = $this->auditTrail instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig\AuditTrailConfig ? $this->auditTrail->toArray() : $this->auditTrail; + } + if (isset($this->_usedProperties['type'])) { + $output['type'] = $this->type; + } + if (isset($this->_usedProperties['markingStore'])) { + $output['marking_store'] = $this->markingStore->toArray(); + } + if (isset($this->_usedProperties['supports'])) { + $output['supports'] = $this->supports; + } + if (isset($this->_usedProperties['supportStrategy'])) { + $output['support_strategy'] = $this->supportStrategy; + } + if (isset($this->_usedProperties['initialMarking'])) { + $output['initial_marking'] = $this->initialMarking; + } + if (isset($this->_usedProperties['eventsToDispatch'])) { + $output['events_to_dispatch'] = $this->eventsToDispatch; + } + if (isset($this->_usedProperties['places'])) { + $output['places'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig\PlaceConfig ? $v->toArray() : $v; }, $this->places); + } + if (isset($this->_usedProperties['transitions'])) { + $output['transitions'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig\TransitionConfig ? $v->toArray() : $v; }, $this->transitions); + } + if (isset($this->_usedProperties['metadata'])) { + $output['metadata'] = $this->metadata; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/AuditTrailConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/AuditTrailConfig.php new file mode 100644 index 00000000..7188794b --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/AuditTrailConfig.php @@ -0,0 +1,52 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/MarkingStoreConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/MarkingStoreConfig.php new file mode 100644 index 00000000..ff0a0bb0 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/MarkingStoreConfig.php @@ -0,0 +1,98 @@ +_usedProperties['type'] = true; + $this->type = $value; + + return $this; + } + + /** + * @default 'marking' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function property($value): static + { + $this->_usedProperties['property'] = true; + $this->property = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function service($value): static + { + $this->_usedProperties['service'] = true; + $this->service = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('type', $value)) { + $this->_usedProperties['type'] = true; + $this->type = $value['type']; + unset($value['type']); + } + + if (array_key_exists('property', $value)) { + $this->_usedProperties['property'] = true; + $this->property = $value['property']; + unset($value['property']); + } + + if (array_key_exists('service', $value)) { + $this->_usedProperties['service'] = true; + $this->service = $value['service']; + unset($value['service']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['type'])) { + $output['type'] = $this->type; + } + if (isset($this->_usedProperties['property'])) { + $output['property'] = $this->property; + } + if (isset($this->_usedProperties['service'])) { + $output['service'] = $this->service; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/PlaceConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/PlaceConfig.php new file mode 100644 index 00000000..f062c446 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/PlaceConfig.php @@ -0,0 +1,75 @@ +_usedProperties['name'] = true; + $this->name = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function metadata(ParamConfigurator|array $value): static + { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('name', $value)) { + $this->_usedProperties['name'] = true; + $this->name = $value['name']; + unset($value['name']); + } + + if (array_key_exists('metadata', $value)) { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value['metadata']; + unset($value['metadata']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['name'])) { + $output['name'] = $this->name; + } + if (isset($this->_usedProperties['metadata'])) { + $output['metadata'] = $this->metadata; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/TransitionConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/TransitionConfig.php new file mode 100644 index 00000000..8a814c56 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/Workflows/WorkflowsConfig/TransitionConfig.php @@ -0,0 +1,146 @@ +_usedProperties['name'] = true; + $this->name = $value; + + return $this; + } + + /** + * An expression to block the transition + * @example is_fully_authenticated() and is_granted('ROLE_JOURNALIST') and subject.getTitle() == 'My first article' + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function guard($value): static + { + $this->_usedProperties['guard'] = true; + $this->guard = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function from(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['from'] = true; + $this->from = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function to(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['to'] = true; + $this->to = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function metadata(ParamConfigurator|array $value): static + { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value; + + return $this; + } + + public function __construct(array $value = []) + { + if (array_key_exists('name', $value)) { + $this->_usedProperties['name'] = true; + $this->name = $value['name']; + unset($value['name']); + } + + if (array_key_exists('guard', $value)) { + $this->_usedProperties['guard'] = true; + $this->guard = $value['guard']; + unset($value['guard']); + } + + if (array_key_exists('from', $value)) { + $this->_usedProperties['from'] = true; + $this->from = $value['from']; + unset($value['from']); + } + + if (array_key_exists('to', $value)) { + $this->_usedProperties['to'] = true; + $this->to = $value['to']; + unset($value['to']); + } + + if (array_key_exists('metadata', $value)) { + $this->_usedProperties['metadata'] = true; + $this->metadata = $value['metadata']; + unset($value['metadata']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['name'])) { + $output['name'] = $this->name; + } + if (isset($this->_usedProperties['guard'])) { + $output['guard'] = $this->guard; + } + if (isset($this->_usedProperties['from'])) { + $output['from'] = $this->from; + } + if (isset($this->_usedProperties['to'])) { + $output['to'] = $this->to; + } + if (isset($this->_usedProperties['metadata'])) { + $output['metadata'] = $this->metadata; + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WorkflowsConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WorkflowsConfig.php new file mode 100644 index 00000000..955282ae --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/Framework/WorkflowsConfig.php @@ -0,0 +1,89 @@ +_usedProperties['enabled'] = true; + $this->enabled = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * @return \Symfony\Config\Framework\Workflows\WorkflowsConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\Workflows\WorkflowsConfig : static) + */ + public function workflows(string $name, mixed $value = []): \Symfony\Config\Framework\Workflows\WorkflowsConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['workflows'] = true; + $this->workflows[$name] = $value; + + return $this; + } + + if (!isset($this->workflows[$name]) || !$this->workflows[$name] instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig) { + $this->_usedProperties['workflows'] = true; + $this->workflows[$name] = new \Symfony\Config\Framework\Workflows\WorkflowsConfig($value); + } elseif (1 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "workflows()" has already been initialized. You cannot pass values the second time you call workflows().'); + } + + return $this->workflows[$name]; + } + + public function __construct(array $value = []) + { + if (array_key_exists('enabled', $value)) { + $this->_usedProperties['enabled'] = true; + $this->enabled = $value['enabled']; + unset($value['enabled']); + } + + if (array_key_exists('workflows', $value)) { + $this->_usedProperties['workflows'] = true; + $this->workflows = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\Workflows\WorkflowsConfig($v) : $v; }, $value['workflows']); + unset($value['workflows']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['enabled'])) { + $output['enabled'] = $this->enabled; + } + if (isset($this->_usedProperties['workflows'])) { + $output['workflows'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\Workflows\WorkflowsConfig ? $v->toArray() : $v; }, $this->workflows); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/FrameworkConfig.php b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/FrameworkConfig.php new file mode 100644 index 00000000..552ca45c --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/Symfony/Config/FrameworkConfig.php @@ -0,0 +1,1448 @@ +_usedProperties['secret'] = true; + $this->secret = $value; + + return $this; + } + + /** + * Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. Note: When using the HttpCache, you need to call the method in your front controller instead + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function httpMethodOverride($value): static + { + $this->_usedProperties['httpMethodOverride'] = true; + $this->httpMethodOverride = $value; + + return $this; + } + + /** + * Set true to enable support for xsendfile in binary file responses. + * @default false + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function trustXSendfileTypeHeader($value): static + { + $this->_usedProperties['trustXSendfileTypeHeader'] = true; + $this->trustXSendfileTypeHeader = $value; + + return $this; + } + + /** + * @default '%env(default::SYMFONY_IDE)%' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function ide($value): static + { + $this->_usedProperties['ide'] = true; + $this->ide = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function test($value): static + { + $this->_usedProperties['test'] = true; + $this->test = $value; + + return $this; + } + + /** + * @default 'en' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function defaultLocale($value): static + { + $this->_usedProperties['defaultLocale'] = true; + $this->defaultLocale = $value; + + return $this; + } + + /** + * Whether to use the Accept-Language HTTP header to set the Request locale (only when the "_locale" request attribute is not passed). + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function setLocaleFromAcceptLanguage($value): static + { + $this->_usedProperties['setLocaleFromAcceptLanguage'] = true; + $this->setLocaleFromAcceptLanguage = $value; + + return $this; + } + + /** + * Whether to set the Content-Language HTTP header on the Response using the Request locale. + * @default false + * @param ParamConfigurator|bool $value + * @return $this + */ + public function setContentLanguageFromLocale($value): static + { + $this->_usedProperties['setContentLanguageFromLocale'] = true; + $this->setContentLanguageFromLocale = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list $value + * + * @return $this + */ + public function enabledLocales(ParamConfigurator|array $value): static + { + $this->_usedProperties['enabledLocales'] = true; + $this->enabledLocales = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function trustedHosts(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['trustedHosts'] = true; + $this->trustedHosts = $value; + + return $this; + } + + /** + * @default null + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function trustedProxies($value): static + { + $this->_usedProperties['trustedProxies'] = true; + $this->trustedProxies = $value; + + return $this; + } + + /** + * @param ParamConfigurator|list|string $value + * + * @return $this + */ + public function trustedHeaders(ParamConfigurator|string|array $value): static + { + $this->_usedProperties['trustedHeaders'] = true; + $this->trustedHeaders = $value; + + return $this; + } + + /** + * @default 'error_controller' + * @param ParamConfigurator|mixed $value + * @return $this + */ + public function errorController($value): static + { + $this->_usedProperties['errorController'] = true; + $this->errorController = $value; + + return $this; + } + + /** + * HttpKernel will handle all kinds of \Throwable + * @default null + * @param ParamConfigurator|bool $value + * @return $this + */ + public function handleAllThrowables($value): static + { + $this->_usedProperties['handleAllThrowables'] = true; + $this->handleAllThrowables = $value; + + return $this; + } + + /** + * @default {"enabled":null} + */ + public function csrfProtection(array $value = []): \Symfony\Config\Framework\CsrfProtectionConfig + { + if (null === $this->csrfProtection) { + $this->_usedProperties['csrfProtection'] = true; + $this->csrfProtection = new \Symfony\Config\Framework\CsrfProtectionConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "csrfProtection()" has already been initialized. You cannot pass values the second time you call csrfProtection().'); + } + + return $this->csrfProtection; + } + + /** + * form configuration + * @default {"enabled":true,"csrf_protection":{"enabled":null,"field_name":"_token"}} + */ + public function form(array $value = []): \Symfony\Config\Framework\FormConfig + { + if (null === $this->form) { + $this->_usedProperties['form'] = true; + $this->form = new \Symfony\Config\Framework\FormConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "form()" has already been initialized. You cannot pass values the second time you call form().'); + } + + return $this->form; + } + + /** + * @template TValue + * @param TValue $value + * HTTP cache configuration + * @default {"enabled":false,"debug":"%kernel.debug%","private_headers":[]} + * @return \Symfony\Config\Framework\HttpCacheConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpCacheConfig : static) + */ + public function httpCache(array $value = []): \Symfony\Config\Framework\HttpCacheConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['httpCache'] = true; + $this->httpCache = $value; + + return $this; + } + + if (!$this->httpCache instanceof \Symfony\Config\Framework\HttpCacheConfig) { + $this->_usedProperties['httpCache'] = true; + $this->httpCache = new \Symfony\Config\Framework\HttpCacheConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "httpCache()" has already been initialized. You cannot pass values the second time you call httpCache().'); + } + + return $this->httpCache; + } + + /** + * @template TValue + * @param TValue $value + * esi configuration + * @default {"enabled":false} + * @return \Symfony\Config\Framework\EsiConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\EsiConfig : static) + */ + public function esi(array $value = []): \Symfony\Config\Framework\EsiConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['esi'] = true; + $this->esi = $value; + + return $this; + } + + if (!$this->esi instanceof \Symfony\Config\Framework\EsiConfig) { + $this->_usedProperties['esi'] = true; + $this->esi = new \Symfony\Config\Framework\EsiConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "esi()" has already been initialized. You cannot pass values the second time you call esi().'); + } + + return $this->esi; + } + + /** + * @template TValue + * @param TValue $value + * ssi configuration + * @default {"enabled":false} + * @return \Symfony\Config\Framework\SsiConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\SsiConfig : static) + */ + public function ssi(array $value = []): \Symfony\Config\Framework\SsiConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['ssi'] = true; + $this->ssi = $value; + + return $this; + } + + if (!$this->ssi instanceof \Symfony\Config\Framework\SsiConfig) { + $this->_usedProperties['ssi'] = true; + $this->ssi = new \Symfony\Config\Framework\SsiConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "ssi()" has already been initialized. You cannot pass values the second time you call ssi().'); + } + + return $this->ssi; + } + + /** + * @template TValue + * @param TValue $value + * fragments configuration + * @default {"enabled":false,"hinclude_default_template":null,"path":"\/_fragment"} + * @return \Symfony\Config\Framework\FragmentsConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\FragmentsConfig : static) + */ + public function fragments(array $value = []): \Symfony\Config\Framework\FragmentsConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['fragments'] = true; + $this->fragments = $value; + + return $this; + } + + if (!$this->fragments instanceof \Symfony\Config\Framework\FragmentsConfig) { + $this->_usedProperties['fragments'] = true; + $this->fragments = new \Symfony\Config\Framework\FragmentsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "fragments()" has already been initialized. You cannot pass values the second time you call fragments().'); + } + + return $this->fragments; + } + + /** + * @template TValue + * @param TValue $value + * profiler configuration + * @default {"enabled":false,"collect":true,"collect_parameter":null,"only_exceptions":false,"only_main_requests":false,"dsn":"file:%kernel.cache_dir%\/profiler","collect_serializer_data":false} + * @return \Symfony\Config\Framework\ProfilerConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\ProfilerConfig : static) + */ + public function profiler(array $value = []): \Symfony\Config\Framework\ProfilerConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['profiler'] = true; + $this->profiler = $value; + + return $this; + } + + if (!$this->profiler instanceof \Symfony\Config\Framework\ProfilerConfig) { + $this->_usedProperties['profiler'] = true; + $this->profiler = new \Symfony\Config\Framework\ProfilerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "profiler()" has already been initialized. You cannot pass values the second time you call profiler().'); + } + + return $this->profiler; + } + + /** + * @template TValue + * @param TValue $value + * @default {"enabled":false,"workflows":[]} + * @return \Symfony\Config\Framework\WorkflowsConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\WorkflowsConfig : static) + */ + public function workflows(mixed $value = []): \Symfony\Config\Framework\WorkflowsConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['workflows'] = true; + $this->workflows = $value; + + return $this; + } + + if (!$this->workflows instanceof \Symfony\Config\Framework\WorkflowsConfig) { + $this->_usedProperties['workflows'] = true; + $this->workflows = new \Symfony\Config\Framework\WorkflowsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "workflows()" has already been initialized. You cannot pass values the second time you call workflows().'); + } + + return $this->workflows; + } + + /** + * @template TValue + * @param TValue $value + * router configuration + * @default {"enabled":false,"cache_dir":"%kernel.cache_dir%","default_uri":null,"http_port":80,"https_port":443,"strict_requirements":true,"utf8":true} + * @return \Symfony\Config\Framework\RouterConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\RouterConfig : static) + */ + public function router(array $value = []): \Symfony\Config\Framework\RouterConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['router'] = true; + $this->router = $value; + + return $this; + } + + if (!$this->router instanceof \Symfony\Config\Framework\RouterConfig) { + $this->_usedProperties['router'] = true; + $this->router = new \Symfony\Config\Framework\RouterConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "router()" has already been initialized. You cannot pass values the second time you call router().'); + } + + return $this->router; + } + + /** + * @template TValue + * @param TValue $value + * session configuration + * @default {"enabled":false,"storage_factory_id":"session.storage.factory.native","handler_id":"session.handler.native_file","cookie_httponly":true,"cookie_samesite":null,"gc_probability":1,"save_path":"%kernel.cache_dir%\/sessions","metadata_update_threshold":0} + * @return \Symfony\Config\Framework\SessionConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\SessionConfig : static) + */ + public function session(array $value = []): \Symfony\Config\Framework\SessionConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['session'] = true; + $this->session = $value; + + return $this; + } + + if (!$this->session instanceof \Symfony\Config\Framework\SessionConfig) { + $this->_usedProperties['session'] = true; + $this->session = new \Symfony\Config\Framework\SessionConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "session()" has already been initialized. You cannot pass values the second time you call session().'); + } + + return $this->session; + } + + /** + * @template TValue + * @param TValue $value + * request configuration + * @default {"enabled":false,"formats":[]} + * @return \Symfony\Config\Framework\RequestConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\RequestConfig : static) + */ + public function request(array $value = []): \Symfony\Config\Framework\RequestConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['request'] = true; + $this->request = $value; + + return $this; + } + + if (!$this->request instanceof \Symfony\Config\Framework\RequestConfig) { + $this->_usedProperties['request'] = true; + $this->request = new \Symfony\Config\Framework\RequestConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "request()" has already been initialized. You cannot pass values the second time you call request().'); + } + + return $this->request; + } + + /** + * assets configuration + * @default {"enabled":true,"strict_mode":false,"version_strategy":null,"version":null,"version_format":"%%s?%%s","json_manifest_path":null,"base_path":"","base_urls":[],"packages":[]} + */ + public function assets(array $value = []): \Symfony\Config\Framework\AssetsConfig + { + if (null === $this->assets) { + $this->_usedProperties['assets'] = true; + $this->assets = new \Symfony\Config\Framework\AssetsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "assets()" has already been initialized. You cannot pass values the second time you call assets().'); + } + + return $this->assets; + } + + /** + * translator configuration + * @default {"enabled":true,"fallbacks":[],"logging":false,"formatter":"translator.formatter.default","cache_dir":"%kernel.cache_dir%\/translations","default_path":"%kernel.project_dir%\/translations","paths":[],"pseudo_localization":{"enabled":false,"accents":true,"expansion_factor":1,"brackets":true,"parse_html":false,"localizable_html_attributes":[]},"providers":[]} + */ + public function translator(array $value = []): \Symfony\Config\Framework\TranslatorConfig + { + if (null === $this->translator) { + $this->_usedProperties['translator'] = true; + $this->translator = new \Symfony\Config\Framework\TranslatorConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "translator()" has already been initialized. You cannot pass values the second time you call translator().'); + } + + return $this->translator; + } + + /** + * validation configuration + * @default {"enabled":true,"enable_annotations":true,"static_method":["loadValidatorMetadata"],"translation_domain":"validators","mapping":{"paths":[]},"not_compromised_password":{"enabled":true,"endpoint":null},"auto_mapping":[]} + */ + public function validation(array $value = []): \Symfony\Config\Framework\ValidationConfig + { + if (null === $this->validation) { + $this->_usedProperties['validation'] = true; + $this->validation = new \Symfony\Config\Framework\ValidationConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "validation()" has already been initialized. You cannot pass values the second time you call validation().'); + } + + return $this->validation; + } + + /** + * annotation configuration + * @default {"enabled":true,"cache":"php_array","file_cache_dir":"%kernel.cache_dir%\/annotations","debug":true} + */ + public function annotations(array $value = []): \Symfony\Config\Framework\AnnotationsConfig + { + if (null === $this->annotations) { + $this->_usedProperties['annotations'] = true; + $this->annotations = new \Symfony\Config\Framework\AnnotationsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "annotations()" has already been initialized. You cannot pass values the second time you call annotations().'); + } + + return $this->annotations; + } + + /** + * @template TValue + * @param TValue $value + * serializer configuration + * @default {"enabled":false,"enable_annotations":true,"mapping":{"paths":[]},"default_context":[]} + * @return \Symfony\Config\Framework\SerializerConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\SerializerConfig : static) + */ + public function serializer(array $value = []): \Symfony\Config\Framework\SerializerConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['serializer'] = true; + $this->serializer = $value; + + return $this; + } + + if (!$this->serializer instanceof \Symfony\Config\Framework\SerializerConfig) { + $this->_usedProperties['serializer'] = true; + $this->serializer = new \Symfony\Config\Framework\SerializerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "serializer()" has already been initialized. You cannot pass values the second time you call serializer().'); + } + + return $this->serializer; + } + + /** + * Property access configuration + * @default {"enabled":true,"magic_call":false,"magic_get":true,"magic_set":true,"throw_exception_on_invalid_index":false,"throw_exception_on_invalid_property_path":true} + */ + public function propertyAccess(array $value = []): \Symfony\Config\Framework\PropertyAccessConfig + { + if (null === $this->propertyAccess) { + $this->_usedProperties['propertyAccess'] = true; + $this->propertyAccess = new \Symfony\Config\Framework\PropertyAccessConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "propertyAccess()" has already been initialized. You cannot pass values the second time you call propertyAccess().'); + } + + return $this->propertyAccess; + } + + /** + * Property info configuration + * @default {"enabled":true} + */ + public function propertyInfo(array $value = []): \Symfony\Config\Framework\PropertyInfoConfig + { + if (null === $this->propertyInfo) { + $this->_usedProperties['propertyInfo'] = true; + $this->propertyInfo = new \Symfony\Config\Framework\PropertyInfoConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "propertyInfo()" has already been initialized. You cannot pass values the second time you call propertyInfo().'); + } + + return $this->propertyInfo; + } + + /** + * Cache configuration + * @default {"prefix_seed":"_%kernel.project_dir%.%kernel.container_class%","app":"cache.adapter.filesystem","system":"cache.adapter.system","directory":"%kernel.cache_dir%\/pools\/app","default_redis_provider":"redis:\/\/localhost","default_memcached_provider":"memcached:\/\/localhost","default_doctrine_dbal_provider":"database_connection","default_pdo_provider":null,"pools":[]} + */ + public function cache(array $value = []): \Symfony\Config\Framework\CacheConfig + { + if (null === $this->cache) { + $this->_usedProperties['cache'] = true; + $this->cache = new \Symfony\Config\Framework\CacheConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "cache()" has already been initialized. You cannot pass values the second time you call cache().'); + } + + return $this->cache; + } + + /** + * PHP errors handling configuration + * @default {"log":true,"throw":true} + */ + public function phpErrors(array $value = []): \Symfony\Config\Framework\PhpErrorsConfig + { + if (null === $this->phpErrors) { + $this->_usedProperties['phpErrors'] = true; + $this->phpErrors = new \Symfony\Config\Framework\PhpErrorsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "phpErrors()" has already been initialized. You cannot pass values the second time you call phpErrors().'); + } + + return $this->phpErrors; + } + + /** + * @template TValue + * @param TValue $value + * Exception handling configuration + * @return \Symfony\Config\Framework\ExceptionsConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\ExceptionsConfig : static) + */ + public function exceptions(array $value = []): \Symfony\Config\Framework\ExceptionsConfig|static + { + $this->_usedProperties['exceptions'] = true; + if (!\is_array($value)) { + $this->exceptions[] = $value; + + return $this; + } + + return $this->exceptions[] = new \Symfony\Config\Framework\ExceptionsConfig($value); + } + + /** + * @template TValue + * @param TValue $value + * web links configuration + * @default {"enabled":false} + * @return \Symfony\Config\Framework\WebLinkConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\WebLinkConfig : static) + */ + public function webLink(array $value = []): \Symfony\Config\Framework\WebLinkConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['webLink'] = true; + $this->webLink = $value; + + return $this; + } + + if (!$this->webLink instanceof \Symfony\Config\Framework\WebLinkConfig) { + $this->_usedProperties['webLink'] = true; + $this->webLink = new \Symfony\Config\Framework\WebLinkConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "webLink()" has already been initialized. You cannot pass values the second time you call webLink().'); + } + + return $this->webLink; + } + + /** + * @template TValue + * @param TValue $value + * Lock configuration + * @default {"enabled":false,"resources":{"default":["flock"]}} + * @return \Symfony\Config\Framework\LockConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\LockConfig : static) + */ + public function lock(mixed $value = []): \Symfony\Config\Framework\LockConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['lock'] = true; + $this->lock = $value; + + return $this; + } + + if (!$this->lock instanceof \Symfony\Config\Framework\LockConfig) { + $this->_usedProperties['lock'] = true; + $this->lock = new \Symfony\Config\Framework\LockConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "lock()" has already been initialized. You cannot pass values the second time you call lock().'); + } + + return $this->lock; + } + + /** + * @template TValue + * @param TValue $value + * Semaphore configuration + * @default {"enabled":false,"resources":[]} + * @return \Symfony\Config\Framework\SemaphoreConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\SemaphoreConfig : static) + */ + public function semaphore(mixed $value = []): \Symfony\Config\Framework\SemaphoreConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['semaphore'] = true; + $this->semaphore = $value; + + return $this; + } + + if (!$this->semaphore instanceof \Symfony\Config\Framework\SemaphoreConfig) { + $this->_usedProperties['semaphore'] = true; + $this->semaphore = new \Symfony\Config\Framework\SemaphoreConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "semaphore()" has already been initialized. You cannot pass values the second time you call semaphore().'); + } + + return $this->semaphore; + } + + /** + * @template TValue + * @param TValue $value + * Messenger configuration + * @default {"enabled":false,"routing":[],"serializer":{"default_serializer":"messenger.transport.native_php_serializer","symfony_serializer":{"format":"json","context":[]}},"transports":[],"failure_transport":null,"reset_on_message":true,"default_bus":null,"buses":{"messenger.bus.default":{"default_middleware":{"enabled":true,"allow_no_handlers":false,"allow_no_senders":true},"middleware":[]}}} + * @return \Symfony\Config\Framework\MessengerConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\MessengerConfig : static) + */ + public function messenger(array $value = []): \Symfony\Config\Framework\MessengerConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['messenger'] = true; + $this->messenger = $value; + + return $this; + } + + if (!$this->messenger instanceof \Symfony\Config\Framework\MessengerConfig) { + $this->_usedProperties['messenger'] = true; + $this->messenger = new \Symfony\Config\Framework\MessengerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "messenger()" has already been initialized. You cannot pass values the second time you call messenger().'); + } + + return $this->messenger; + } + + /** + * Enabled by default when debug is enabled. + * @default true + * @param ParamConfigurator|bool $value + * @return $this + */ + public function disallowSearchEngineIndex($value): static + { + $this->_usedProperties['disallowSearchEngineIndex'] = true; + $this->disallowSearchEngineIndex = $value; + + return $this; + } + + /** + * @template TValue + * @param TValue $value + * HTTP Client configuration + * @default {"enabled":true,"scoped_clients":[]} + * @return \Symfony\Config\Framework\HttpClientConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\HttpClientConfig : static) + */ + public function httpClient(mixed $value = []): \Symfony\Config\Framework\HttpClientConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['httpClient'] = true; + $this->httpClient = $value; + + return $this; + } + + if (!$this->httpClient instanceof \Symfony\Config\Framework\HttpClientConfig) { + $this->_usedProperties['httpClient'] = true; + $this->httpClient = new \Symfony\Config\Framework\HttpClientConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "httpClient()" has already been initialized. You cannot pass values the second time you call httpClient().'); + } + + return $this->httpClient; + } + + /** + * Mailer configuration + * @default {"enabled":true,"message_bus":null,"dsn":null,"transports":[],"headers":[]} + */ + public function mailer(array $value = []): \Symfony\Config\Framework\MailerConfig + { + if (null === $this->mailer) { + $this->_usedProperties['mailer'] = true; + $this->mailer = new \Symfony\Config\Framework\MailerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "mailer()" has already been initialized. You cannot pass values the second time you call mailer().'); + } + + return $this->mailer; + } + + /** + * @default {"enabled":true,"vault_directory":"%kernel.project_dir%\/config\/secrets\/%kernel.runtime_environment%","local_dotenv_file":"%kernel.project_dir%\/.env.%kernel.environment%.local","decryption_env_var":"base64:default::SYMFONY_DECRYPTION_SECRET"} + */ + public function secrets(array $value = []): \Symfony\Config\Framework\SecretsConfig + { + if (null === $this->secrets) { + $this->_usedProperties['secrets'] = true; + $this->secrets = new \Symfony\Config\Framework\SecretsConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "secrets()" has already been initialized. You cannot pass values the second time you call secrets().'); + } + + return $this->secrets; + } + + /** + * @template TValue + * @param TValue $value + * Notifier configuration + * @default {"enabled":false,"chatter_transports":[],"texter_transports":[],"notification_on_failed_messages":false,"channel_policy":[],"admin_recipients":[]} + * @return \Symfony\Config\Framework\NotifierConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\NotifierConfig : static) + */ + public function notifier(array $value = []): \Symfony\Config\Framework\NotifierConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['notifier'] = true; + $this->notifier = $value; + + return $this; + } + + if (!$this->notifier instanceof \Symfony\Config\Framework\NotifierConfig) { + $this->_usedProperties['notifier'] = true; + $this->notifier = new \Symfony\Config\Framework\NotifierConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "notifier()" has already been initialized. You cannot pass values the second time you call notifier().'); + } + + return $this->notifier; + } + + /** + * @template TValue + * @param TValue $value + * Rate limiter configuration + * @default {"enabled":false,"limiters":[]} + * @return \Symfony\Config\Framework\RateLimiterConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\RateLimiterConfig : static) + */ + public function rateLimiter(mixed $value = []): \Symfony\Config\Framework\RateLimiterConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['rateLimiter'] = true; + $this->rateLimiter = $value; + + return $this; + } + + if (!$this->rateLimiter instanceof \Symfony\Config\Framework\RateLimiterConfig) { + $this->_usedProperties['rateLimiter'] = true; + $this->rateLimiter = new \Symfony\Config\Framework\RateLimiterConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "rateLimiter()" has already been initialized. You cannot pass values the second time you call rateLimiter().'); + } + + return $this->rateLimiter; + } + + /** + * @template TValue + * @param TValue $value + * Uid configuration + * @default {"enabled":false,"default_uuid_version":6,"name_based_uuid_version":5,"time_based_uuid_version":6} + * @return \Symfony\Config\Framework\UidConfig|$this + * @psalm-return (TValue is array ? \Symfony\Config\Framework\UidConfig : static) + */ + public function uid(array $value = []): \Symfony\Config\Framework\UidConfig|static + { + if (!\is_array($value)) { + $this->_usedProperties['uid'] = true; + $this->uid = $value; + + return $this; + } + + if (!$this->uid instanceof \Symfony\Config\Framework\UidConfig) { + $this->_usedProperties['uid'] = true; + $this->uid = new \Symfony\Config\Framework\UidConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "uid()" has already been initialized. You cannot pass values the second time you call uid().'); + } + + return $this->uid; + } + + /** + * HtmlSanitizer configuration + * @default {"enabled":true,"sanitizers":[]} + */ + public function htmlSanitizer(array $value = []): \Symfony\Config\Framework\HtmlSanitizerConfig + { + if (null === $this->htmlSanitizer) { + $this->_usedProperties['htmlSanitizer'] = true; + $this->htmlSanitizer = new \Symfony\Config\Framework\HtmlSanitizerConfig($value); + } elseif (0 < \func_num_args()) { + throw new InvalidConfigurationException('The node created by "htmlSanitizer()" has already been initialized. You cannot pass values the second time you call htmlSanitizer().'); + } + + return $this->htmlSanitizer; + } + + public function getExtensionAlias(): string + { + return 'framework'; + } + + public function __construct(array $value = []) + { + if (array_key_exists('secret', $value)) { + $this->_usedProperties['secret'] = true; + $this->secret = $value['secret']; + unset($value['secret']); + } + + if (array_key_exists('http_method_override', $value)) { + $this->_usedProperties['httpMethodOverride'] = true; + $this->httpMethodOverride = $value['http_method_override']; + unset($value['http_method_override']); + } + + if (array_key_exists('trust_x_sendfile_type_header', $value)) { + $this->_usedProperties['trustXSendfileTypeHeader'] = true; + $this->trustXSendfileTypeHeader = $value['trust_x_sendfile_type_header']; + unset($value['trust_x_sendfile_type_header']); + } + + if (array_key_exists('ide', $value)) { + $this->_usedProperties['ide'] = true; + $this->ide = $value['ide']; + unset($value['ide']); + } + + if (array_key_exists('test', $value)) { + $this->_usedProperties['test'] = true; + $this->test = $value['test']; + unset($value['test']); + } + + if (array_key_exists('default_locale', $value)) { + $this->_usedProperties['defaultLocale'] = true; + $this->defaultLocale = $value['default_locale']; + unset($value['default_locale']); + } + + if (array_key_exists('set_locale_from_accept_language', $value)) { + $this->_usedProperties['setLocaleFromAcceptLanguage'] = true; + $this->setLocaleFromAcceptLanguage = $value['set_locale_from_accept_language']; + unset($value['set_locale_from_accept_language']); + } + + if (array_key_exists('set_content_language_from_locale', $value)) { + $this->_usedProperties['setContentLanguageFromLocale'] = true; + $this->setContentLanguageFromLocale = $value['set_content_language_from_locale']; + unset($value['set_content_language_from_locale']); + } + + if (array_key_exists('enabled_locales', $value)) { + $this->_usedProperties['enabledLocales'] = true; + $this->enabledLocales = $value['enabled_locales']; + unset($value['enabled_locales']); + } + + if (array_key_exists('trusted_hosts', $value)) { + $this->_usedProperties['trustedHosts'] = true; + $this->trustedHosts = $value['trusted_hosts']; + unset($value['trusted_hosts']); + } + + if (array_key_exists('trusted_proxies', $value)) { + $this->_usedProperties['trustedProxies'] = true; + $this->trustedProxies = $value['trusted_proxies']; + unset($value['trusted_proxies']); + } + + if (array_key_exists('trusted_headers', $value)) { + $this->_usedProperties['trustedHeaders'] = true; + $this->trustedHeaders = $value['trusted_headers']; + unset($value['trusted_headers']); + } + + if (array_key_exists('error_controller', $value)) { + $this->_usedProperties['errorController'] = true; + $this->errorController = $value['error_controller']; + unset($value['error_controller']); + } + + if (array_key_exists('handle_all_throwables', $value)) { + $this->_usedProperties['handleAllThrowables'] = true; + $this->handleAllThrowables = $value['handle_all_throwables']; + unset($value['handle_all_throwables']); + } + + if (array_key_exists('csrf_protection', $value)) { + $this->_usedProperties['csrfProtection'] = true; + $this->csrfProtection = new \Symfony\Config\Framework\CsrfProtectionConfig($value['csrf_protection']); + unset($value['csrf_protection']); + } + + if (array_key_exists('form', $value)) { + $this->_usedProperties['form'] = true; + $this->form = new \Symfony\Config\Framework\FormConfig($value['form']); + unset($value['form']); + } + + if (array_key_exists('http_cache', $value)) { + $this->_usedProperties['httpCache'] = true; + $this->httpCache = \is_array($value['http_cache']) ? new \Symfony\Config\Framework\HttpCacheConfig($value['http_cache']) : $value['http_cache']; + unset($value['http_cache']); + } + + if (array_key_exists('esi', $value)) { + $this->_usedProperties['esi'] = true; + $this->esi = \is_array($value['esi']) ? new \Symfony\Config\Framework\EsiConfig($value['esi']) : $value['esi']; + unset($value['esi']); + } + + if (array_key_exists('ssi', $value)) { + $this->_usedProperties['ssi'] = true; + $this->ssi = \is_array($value['ssi']) ? new \Symfony\Config\Framework\SsiConfig($value['ssi']) : $value['ssi']; + unset($value['ssi']); + } + + if (array_key_exists('fragments', $value)) { + $this->_usedProperties['fragments'] = true; + $this->fragments = \is_array($value['fragments']) ? new \Symfony\Config\Framework\FragmentsConfig($value['fragments']) : $value['fragments']; + unset($value['fragments']); + } + + if (array_key_exists('profiler', $value)) { + $this->_usedProperties['profiler'] = true; + $this->profiler = \is_array($value['profiler']) ? new \Symfony\Config\Framework\ProfilerConfig($value['profiler']) : $value['profiler']; + unset($value['profiler']); + } + + if (array_key_exists('workflows', $value)) { + $this->_usedProperties['workflows'] = true; + $this->workflows = \is_array($value['workflows']) ? new \Symfony\Config\Framework\WorkflowsConfig($value['workflows']) : $value['workflows']; + unset($value['workflows']); + } + + if (array_key_exists('router', $value)) { + $this->_usedProperties['router'] = true; + $this->router = \is_array($value['router']) ? new \Symfony\Config\Framework\RouterConfig($value['router']) : $value['router']; + unset($value['router']); + } + + if (array_key_exists('session', $value)) { + $this->_usedProperties['session'] = true; + $this->session = \is_array($value['session']) ? new \Symfony\Config\Framework\SessionConfig($value['session']) : $value['session']; + unset($value['session']); + } + + if (array_key_exists('request', $value)) { + $this->_usedProperties['request'] = true; + $this->request = \is_array($value['request']) ? new \Symfony\Config\Framework\RequestConfig($value['request']) : $value['request']; + unset($value['request']); + } + + if (array_key_exists('assets', $value)) { + $this->_usedProperties['assets'] = true; + $this->assets = new \Symfony\Config\Framework\AssetsConfig($value['assets']); + unset($value['assets']); + } + + if (array_key_exists('translator', $value)) { + $this->_usedProperties['translator'] = true; + $this->translator = new \Symfony\Config\Framework\TranslatorConfig($value['translator']); + unset($value['translator']); + } + + if (array_key_exists('validation', $value)) { + $this->_usedProperties['validation'] = true; + $this->validation = new \Symfony\Config\Framework\ValidationConfig($value['validation']); + unset($value['validation']); + } + + if (array_key_exists('annotations', $value)) { + $this->_usedProperties['annotations'] = true; + $this->annotations = new \Symfony\Config\Framework\AnnotationsConfig($value['annotations']); + unset($value['annotations']); + } + + if (array_key_exists('serializer', $value)) { + $this->_usedProperties['serializer'] = true; + $this->serializer = \is_array($value['serializer']) ? new \Symfony\Config\Framework\SerializerConfig($value['serializer']) : $value['serializer']; + unset($value['serializer']); + } + + if (array_key_exists('property_access', $value)) { + $this->_usedProperties['propertyAccess'] = true; + $this->propertyAccess = new \Symfony\Config\Framework\PropertyAccessConfig($value['property_access']); + unset($value['property_access']); + } + + if (array_key_exists('property_info', $value)) { + $this->_usedProperties['propertyInfo'] = true; + $this->propertyInfo = new \Symfony\Config\Framework\PropertyInfoConfig($value['property_info']); + unset($value['property_info']); + } + + if (array_key_exists('cache', $value)) { + $this->_usedProperties['cache'] = true; + $this->cache = new \Symfony\Config\Framework\CacheConfig($value['cache']); + unset($value['cache']); + } + + if (array_key_exists('php_errors', $value)) { + $this->_usedProperties['phpErrors'] = true; + $this->phpErrors = new \Symfony\Config\Framework\PhpErrorsConfig($value['php_errors']); + unset($value['php_errors']); + } + + if (array_key_exists('exceptions', $value)) { + $this->_usedProperties['exceptions'] = true; + $this->exceptions = array_map(function ($v) { return \is_array($v) ? new \Symfony\Config\Framework\ExceptionsConfig($v) : $v; }, $value['exceptions']); + unset($value['exceptions']); + } + + if (array_key_exists('web_link', $value)) { + $this->_usedProperties['webLink'] = true; + $this->webLink = \is_array($value['web_link']) ? new \Symfony\Config\Framework\WebLinkConfig($value['web_link']) : $value['web_link']; + unset($value['web_link']); + } + + if (array_key_exists('lock', $value)) { + $this->_usedProperties['lock'] = true; + $this->lock = \is_array($value['lock']) ? new \Symfony\Config\Framework\LockConfig($value['lock']) : $value['lock']; + unset($value['lock']); + } + + if (array_key_exists('semaphore', $value)) { + $this->_usedProperties['semaphore'] = true; + $this->semaphore = \is_array($value['semaphore']) ? new \Symfony\Config\Framework\SemaphoreConfig($value['semaphore']) : $value['semaphore']; + unset($value['semaphore']); + } + + if (array_key_exists('messenger', $value)) { + $this->_usedProperties['messenger'] = true; + $this->messenger = \is_array($value['messenger']) ? new \Symfony\Config\Framework\MessengerConfig($value['messenger']) : $value['messenger']; + unset($value['messenger']); + } + + if (array_key_exists('disallow_search_engine_index', $value)) { + $this->_usedProperties['disallowSearchEngineIndex'] = true; + $this->disallowSearchEngineIndex = $value['disallow_search_engine_index']; + unset($value['disallow_search_engine_index']); + } + + if (array_key_exists('http_client', $value)) { + $this->_usedProperties['httpClient'] = true; + $this->httpClient = \is_array($value['http_client']) ? new \Symfony\Config\Framework\HttpClientConfig($value['http_client']) : $value['http_client']; + unset($value['http_client']); + } + + if (array_key_exists('mailer', $value)) { + $this->_usedProperties['mailer'] = true; + $this->mailer = new \Symfony\Config\Framework\MailerConfig($value['mailer']); + unset($value['mailer']); + } + + if (array_key_exists('secrets', $value)) { + $this->_usedProperties['secrets'] = true; + $this->secrets = new \Symfony\Config\Framework\SecretsConfig($value['secrets']); + unset($value['secrets']); + } + + if (array_key_exists('notifier', $value)) { + $this->_usedProperties['notifier'] = true; + $this->notifier = \is_array($value['notifier']) ? new \Symfony\Config\Framework\NotifierConfig($value['notifier']) : $value['notifier']; + unset($value['notifier']); + } + + if (array_key_exists('rate_limiter', $value)) { + $this->_usedProperties['rateLimiter'] = true; + $this->rateLimiter = \is_array($value['rate_limiter']) ? new \Symfony\Config\Framework\RateLimiterConfig($value['rate_limiter']) : $value['rate_limiter']; + unset($value['rate_limiter']); + } + + if (array_key_exists('uid', $value)) { + $this->_usedProperties['uid'] = true; + $this->uid = \is_array($value['uid']) ? new \Symfony\Config\Framework\UidConfig($value['uid']) : $value['uid']; + unset($value['uid']); + } + + if (array_key_exists('html_sanitizer', $value)) { + $this->_usedProperties['htmlSanitizer'] = true; + $this->htmlSanitizer = new \Symfony\Config\Framework\HtmlSanitizerConfig($value['html_sanitizer']); + unset($value['html_sanitizer']); + } + + if ([] !== $value) { + throw new InvalidConfigurationException(sprintf('The following keys are not supported by "%s": ', __CLASS__).implode(', ', array_keys($value))); + } + } + + public function toArray(): array + { + $output = []; + if (isset($this->_usedProperties['secret'])) { + $output['secret'] = $this->secret; + } + if (isset($this->_usedProperties['httpMethodOverride'])) { + $output['http_method_override'] = $this->httpMethodOverride; + } + if (isset($this->_usedProperties['trustXSendfileTypeHeader'])) { + $output['trust_x_sendfile_type_header'] = $this->trustXSendfileTypeHeader; + } + if (isset($this->_usedProperties['ide'])) { + $output['ide'] = $this->ide; + } + if (isset($this->_usedProperties['test'])) { + $output['test'] = $this->test; + } + if (isset($this->_usedProperties['defaultLocale'])) { + $output['default_locale'] = $this->defaultLocale; + } + if (isset($this->_usedProperties['setLocaleFromAcceptLanguage'])) { + $output['set_locale_from_accept_language'] = $this->setLocaleFromAcceptLanguage; + } + if (isset($this->_usedProperties['setContentLanguageFromLocale'])) { + $output['set_content_language_from_locale'] = $this->setContentLanguageFromLocale; + } + if (isset($this->_usedProperties['enabledLocales'])) { + $output['enabled_locales'] = $this->enabledLocales; + } + if (isset($this->_usedProperties['trustedHosts'])) { + $output['trusted_hosts'] = $this->trustedHosts; + } + if (isset($this->_usedProperties['trustedProxies'])) { + $output['trusted_proxies'] = $this->trustedProxies; + } + if (isset($this->_usedProperties['trustedHeaders'])) { + $output['trusted_headers'] = $this->trustedHeaders; + } + if (isset($this->_usedProperties['errorController'])) { + $output['error_controller'] = $this->errorController; + } + if (isset($this->_usedProperties['handleAllThrowables'])) { + $output['handle_all_throwables'] = $this->handleAllThrowables; + } + if (isset($this->_usedProperties['csrfProtection'])) { + $output['csrf_protection'] = $this->csrfProtection->toArray(); + } + if (isset($this->_usedProperties['form'])) { + $output['form'] = $this->form->toArray(); + } + if (isset($this->_usedProperties['httpCache'])) { + $output['http_cache'] = $this->httpCache instanceof \Symfony\Config\Framework\HttpCacheConfig ? $this->httpCache->toArray() : $this->httpCache; + } + if (isset($this->_usedProperties['esi'])) { + $output['esi'] = $this->esi instanceof \Symfony\Config\Framework\EsiConfig ? $this->esi->toArray() : $this->esi; + } + if (isset($this->_usedProperties['ssi'])) { + $output['ssi'] = $this->ssi instanceof \Symfony\Config\Framework\SsiConfig ? $this->ssi->toArray() : $this->ssi; + } + if (isset($this->_usedProperties['fragments'])) { + $output['fragments'] = $this->fragments instanceof \Symfony\Config\Framework\FragmentsConfig ? $this->fragments->toArray() : $this->fragments; + } + if (isset($this->_usedProperties['profiler'])) { + $output['profiler'] = $this->profiler instanceof \Symfony\Config\Framework\ProfilerConfig ? $this->profiler->toArray() : $this->profiler; + } + if (isset($this->_usedProperties['workflows'])) { + $output['workflows'] = $this->workflows instanceof \Symfony\Config\Framework\WorkflowsConfig ? $this->workflows->toArray() : $this->workflows; + } + if (isset($this->_usedProperties['router'])) { + $output['router'] = $this->router instanceof \Symfony\Config\Framework\RouterConfig ? $this->router->toArray() : $this->router; + } + if (isset($this->_usedProperties['session'])) { + $output['session'] = $this->session instanceof \Symfony\Config\Framework\SessionConfig ? $this->session->toArray() : $this->session; + } + if (isset($this->_usedProperties['request'])) { + $output['request'] = $this->request instanceof \Symfony\Config\Framework\RequestConfig ? $this->request->toArray() : $this->request; + } + if (isset($this->_usedProperties['assets'])) { + $output['assets'] = $this->assets->toArray(); + } + if (isset($this->_usedProperties['translator'])) { + $output['translator'] = $this->translator->toArray(); + } + if (isset($this->_usedProperties['validation'])) { + $output['validation'] = $this->validation->toArray(); + } + if (isset($this->_usedProperties['annotations'])) { + $output['annotations'] = $this->annotations->toArray(); + } + if (isset($this->_usedProperties['serializer'])) { + $output['serializer'] = $this->serializer instanceof \Symfony\Config\Framework\SerializerConfig ? $this->serializer->toArray() : $this->serializer; + } + if (isset($this->_usedProperties['propertyAccess'])) { + $output['property_access'] = $this->propertyAccess->toArray(); + } + if (isset($this->_usedProperties['propertyInfo'])) { + $output['property_info'] = $this->propertyInfo->toArray(); + } + if (isset($this->_usedProperties['cache'])) { + $output['cache'] = $this->cache->toArray(); + } + if (isset($this->_usedProperties['phpErrors'])) { + $output['php_errors'] = $this->phpErrors->toArray(); + } + if (isset($this->_usedProperties['exceptions'])) { + $output['exceptions'] = array_map(function ($v) { return $v instanceof \Symfony\Config\Framework\ExceptionsConfig ? $v->toArray() : $v; }, $this->exceptions); + } + if (isset($this->_usedProperties['webLink'])) { + $output['web_link'] = $this->webLink instanceof \Symfony\Config\Framework\WebLinkConfig ? $this->webLink->toArray() : $this->webLink; + } + if (isset($this->_usedProperties['lock'])) { + $output['lock'] = $this->lock instanceof \Symfony\Config\Framework\LockConfig ? $this->lock->toArray() : $this->lock; + } + if (isset($this->_usedProperties['semaphore'])) { + $output['semaphore'] = $this->semaphore instanceof \Symfony\Config\Framework\SemaphoreConfig ? $this->semaphore->toArray() : $this->semaphore; + } + if (isset($this->_usedProperties['messenger'])) { + $output['messenger'] = $this->messenger instanceof \Symfony\Config\Framework\MessengerConfig ? $this->messenger->toArray() : $this->messenger; + } + if (isset($this->_usedProperties['disallowSearchEngineIndex'])) { + $output['disallow_search_engine_index'] = $this->disallowSearchEngineIndex; + } + if (isset($this->_usedProperties['httpClient'])) { + $output['http_client'] = $this->httpClient instanceof \Symfony\Config\Framework\HttpClientConfig ? $this->httpClient->toArray() : $this->httpClient; + } + if (isset($this->_usedProperties['mailer'])) { + $output['mailer'] = $this->mailer->toArray(); + } + if (isset($this->_usedProperties['secrets'])) { + $output['secrets'] = $this->secrets->toArray(); + } + if (isset($this->_usedProperties['notifier'])) { + $output['notifier'] = $this->notifier instanceof \Symfony\Config\Framework\NotifierConfig ? $this->notifier->toArray() : $this->notifier; + } + if (isset($this->_usedProperties['rateLimiter'])) { + $output['rate_limiter'] = $this->rateLimiter instanceof \Symfony\Config\Framework\RateLimiterConfig ? $this->rateLimiter->toArray() : $this->rateLimiter; + } + if (isset($this->_usedProperties['uid'])) { + $output['uid'] = $this->uid instanceof \Symfony\Config\Framework\UidConfig ? $this->uid->toArray() : $this->uid; + } + if (isset($this->_usedProperties['htmlSanitizer'])) { + $output['html_sanitizer'] = $this->htmlSanitizer->toArray(); + } + + return $output; + } + +} diff --git a/integration/testdata/symfony_app/var/cache/dev/annotations.map b/integration/testdata/symfony_app/var/cache/dev/annotations.map new file mode 100644 index 00000000..a69ac2e0 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/annotations.map @@ -0,0 +1,3 @@ + 'Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController', +); \ No newline at end of file diff --git a/integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php b/integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php new file mode 100644 index 00000000..affdf5d6 --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php @@ -0,0 +1,36 @@ + [['code', '_format'], ['_controller' => 'error_controller::preview', '_format' => 'html'], ['code' => '\\d+'], [['variable', '.', '[^/]++', '_format', true], ['variable', '/', '\\d+', 'code', true], ['text', '/_error']], [], [], []], + '_wdt' => [['token'], ['_controller' => 'web_profiler.controller.profiler::toolbarAction'], [], [['variable', '/', '[^/]++', 'token', true], ['text', '/_wdt']], [], [], []], + '_profiler_home' => [[], ['_controller' => 'web_profiler.controller.profiler::homeAction'], [], [['text', '/_profiler/']], [], [], []], + '_profiler_search' => [[], ['_controller' => 'web_profiler.controller.profiler::searchAction'], [], [['text', '/_profiler/search']], [], [], []], + '_profiler_search_bar' => [[], ['_controller' => 'web_profiler.controller.profiler::searchBarAction'], [], [['text', '/_profiler/search_bar']], [], [], []], + '_profiler_phpinfo' => [[], ['_controller' => 'web_profiler.controller.profiler::phpinfoAction'], [], [['text', '/_profiler/phpinfo']], [], [], []], + '_profiler_xdebug' => [[], ['_controller' => 'web_profiler.controller.profiler::xdebugAction'], [], [['text', '/_profiler/xdebug']], [], [], []], + '_profiler_search_results' => [['token'], ['_controller' => 'web_profiler.controller.profiler::searchResultsAction'], [], [['text', '/search/results'], ['variable', '/', '[^/]++', 'token', true], ['text', '/_profiler']], [], [], []], + '_profiler_open_file' => [[], ['_controller' => 'web_profiler.controller.profiler::openAction'], [], [['text', '/_profiler/open']], [], [], []], + '_profiler' => [['token'], ['_controller' => 'web_profiler.controller.profiler::panelAction'], [], [['variable', '/', '[^/]++', 'token', true], ['text', '/_profiler']], [], [], []], + '_profiler_router' => [['token'], ['_controller' => 'web_profiler.controller.router::panelAction'], [], [['text', '/router'], ['variable', '/', '[^/]++', 'token', true], ['text', '/_profiler']], [], [], []], + '_profiler_exception' => [['token'], ['_controller' => 'web_profiler.controller.exception_panel::body'], [], [['text', '/exception'], ['variable', '/', '[^/]++', 'token', true], ['text', '/_profiler']], [], [], []], + '_profiler_exception_css' => [['token'], ['_controller' => 'web_profiler.controller.exception_panel::stylesheet'], [], [['text', '/exception.css'], ['variable', '/', '[^/]++', 'token', true], ['text', '/_profiler']], [], [], []], + 'homepage' => [['_locale'], ['template' => 'default/homepage.html.twig', '_locale' => 'en', '_controller' => 'Symfony\\Bundle\\FrameworkBundle\\Controller\\TemplateController::templateAction'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_index' => [['_locale'], ['_controller' => 'App\\Controller\\Admin\\BlogController::index', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/admin/post/'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_post_index' => [['_locale'], ['_controller' => 'App\\Controller\\Admin\\BlogController::index', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/admin/post/'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_post_new' => [['_locale'], ['_controller' => 'App\\Controller\\Admin\\BlogController::new', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/admin/post/new'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_post_show' => [['_locale', 'id'], ['_controller' => 'App\\Controller\\Admin\\BlogController::show', '_locale' => 'en'], ['id' => '\\d+', '_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['variable', '/', '\\d+', 'id', true], ['text', '/admin/post'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_post_edit' => [['_locale', 'id'], ['_controller' => 'App\\Controller\\Admin\\BlogController::edit', '_locale' => 'en'], ['id' => '\\d+', '_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/edit'], ['variable', '/', '\\d+', 'id', true], ['text', '/admin/post'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'admin_post_delete' => [['_locale', 'id'], ['_controller' => 'App\\Controller\\Admin\\BlogController::delete', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/delete'], ['variable', '/', '[^/]++', 'id', true], ['text', '/admin/post'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'blog_index' => [['_locale'], ['page' => '1', '_format' => 'html', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/blog/'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'blog_rss' => [['_locale'], ['page' => '1', '_format' => 'xml', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/blog/rss.xml'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'blog_index_paginated' => [['_locale', 'page'], ['_format' => 'html', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['page' => '[1-9]\\d*', '_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['variable', '/', '[1-9]\\d*', 'page', true], ['text', '/blog/page'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'blog_post' => [['_locale', 'slug'], ['_controller' => 'App\\Controller\\BlogController::postShow', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['variable', '/', '[^/]++', 'slug', true], ['text', '/blog/posts'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'comment_new' => [['_locale', 'postSlug'], ['_controller' => 'App\\Controller\\BlogController::commentNew', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/new'], ['variable', '/', '[^/]++', 'postSlug', true], ['text', '/blog/comment'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'blog_search' => [['_locale'], ['_controller' => 'App\\Controller\\BlogController::search', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/blog/search'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'security_login' => [['_locale'], ['_controller' => 'App\\Controller\\SecurityController::login', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/login'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'security_logout' => [['_locale'], ['_controller' => 'App\\Controller\\SecurityController::logout', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/logout'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'user_edit' => [['_locale'], ['_controller' => 'App\\Controller\\UserController::edit', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/profile/edit'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], + 'user_change_password' => [['_locale'], ['_controller' => 'App\\Controller\\UserController::changePassword', '_locale' => 'en'], ['_locale' => 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn'], [['text', '/profile/change-password'], ['variable', '/', 'ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn', '_locale', true]], [], [], []], +]; diff --git a/integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php.meta b/integration/testdata/symfony_app/var/cache/dev/url_generating_routes.php.meta new file mode 100644 index 0000000000000000000000000000000000000000..206e93403a637ae923c7c350df8da1bf93dd6e3c GIT binary patch literal 3464 zcmd5;U2obj6y>)>dj&Uqgc6=w(4=Y8HnrLt5;DmJT#Rj9JJ77=zt0X|D+LObrtFEJ z=-T((b8_yXaTvufEWYXfh?`LyJm&MU6#1Yh=Sm6?#yyEKn+zU6%M243d}bWBe}XuS zUv%7Zg_Y|nE4Vo?=(_qw91yA$foD2b9IATVMU^T>lHz`XGBcpb80j3A5@)rX&Uw&X zu{bQV^-ldv>kAO6M6yA%@4Y(8M9P6|$Eg1X$;5;JqC{PL-XN@(iO`dKAvsGJ4He3< zQwZ+)X_VRhHT<~ttK0V9rD&O&9Y4)d5w_3pbD+Sh5N=1YgV`z*X7gf?*efq`4Y$He zOs&rl5+gC+ev(04_s$l%>ImzBisMSB$};@CqeGgIV-UIi+S9ZDdnhnWI#*?gIdikYvbAeuRXu)ckP`3%@krF#x5;i+9cOtFtuVJI#ls#)-3< zIasz+V^nokbWaXJ_{7k5`g@ylZ3-5& zO|%u`TFvbg?eFQZ_uY;r)}ZCajB1P sr7Iu&OARD#hw!BTEhv(NCQ~3OEXbXk%~}C{SoC3(6=q&gxzY9N53=|B9RL6T literal 0 HcmV?d00001 diff --git a/integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php b/integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php new file mode 100644 index 00000000..e570ed9b --- /dev/null +++ b/integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php @@ -0,0 +1,87 @@ + [[['_route' => '_profiler_home', '_controller' => 'web_profiler.controller.profiler::homeAction'], null, null, null, true, false, null]], + '/_profiler/search' => [[['_route' => '_profiler_search', '_controller' => 'web_profiler.controller.profiler::searchAction'], null, null, null, false, false, null]], + '/_profiler/search_bar' => [[['_route' => '_profiler_search_bar', '_controller' => 'web_profiler.controller.profiler::searchBarAction'], null, null, null, false, false, null]], + '/_profiler/phpinfo' => [[['_route' => '_profiler_phpinfo', '_controller' => 'web_profiler.controller.profiler::phpinfoAction'], null, null, null, false, false, null]], + '/_profiler/xdebug' => [[['_route' => '_profiler_xdebug', '_controller' => 'web_profiler.controller.profiler::xdebugAction'], null, null, null, false, false, null]], + '/_profiler/open' => [[['_route' => '_profiler_open_file', '_controller' => 'web_profiler.controller.profiler::openAction'], null, null, null, false, false, null]], + ], + [ // $regexpList + 0 => '{^(?' + .'|/_(?' + .'|error/(\\d+)(?:\\.([^/]++))?(*:38)' + .'|wdt/([^/]++)(*:57)' + .'|profiler/([^/]++)(?' + .'|/(?' + .'|search/results(*:102)' + .'|router(*:116)' + .'|exception(?' + .'|(*:136)' + .'|\\.css(*:149)' + .')' + .')' + .'|(*:159)' + .')' + .')' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)?(*:263)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin/post(?' + .'|(*:378)' + .')' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin/post/new(*:495)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin/post/(\\d+)(*:613)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin/post/(\\d+)/edit(*:736)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/admin/post/([^/]++)/delete(*:864)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog(*:970)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog/rss\\.xml(*:1085)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog/page/([1-9]\\d*)(*:1208)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog/posts/([^/]++)(*:1330)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog/comment/([^/]++)/new(*:1458)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/blog/search(*:1572)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/login(*:1680)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/logout(*:1789)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/profile/edit(*:1904)' + .'|/(ar|en|fr|de|es|cs|nl|ru|uk|ro|pt_BR|pl|it|ja|id|ca|sl|hr|zh_CN|bg|tr|lt|bs|sr_Cyrl|sr_Latn)/profile/change\\-password(*:2031)' + .')/?$}sDu', + ], + [ // $dynamicRoutes + 38 => [[['_route' => '_preview_error', '_controller' => 'error_controller::preview', '_format' => 'html'], ['code', '_format'], null, null, false, true, null]], + 57 => [[['_route' => '_wdt', '_controller' => 'web_profiler.controller.profiler::toolbarAction'], ['token'], null, null, false, true, null]], + 102 => [[['_route' => '_profiler_search_results', '_controller' => 'web_profiler.controller.profiler::searchResultsAction'], ['token'], null, null, false, false, null]], + 116 => [[['_route' => '_profiler_router', '_controller' => 'web_profiler.controller.router::panelAction'], ['token'], null, null, false, false, null]], + 136 => [[['_route' => '_profiler_exception', '_controller' => 'web_profiler.controller.exception_panel::body'], ['token'], null, null, false, false, null]], + 149 => [[['_route' => '_profiler_exception_css', '_controller' => 'web_profiler.controller.exception_panel::stylesheet'], ['token'], null, null, false, false, null]], + 159 => [[['_route' => '_profiler', '_controller' => 'web_profiler.controller.profiler::panelAction'], ['token'], null, null, false, true, null]], + 263 => [[['_route' => 'homepage', 'template' => 'default/homepage.html.twig', '_locale' => 'en', '_controller' => 'Symfony\\Bundle\\FrameworkBundle\\Controller\\TemplateController::templateAction'], ['_locale'], null, null, false, true, null]], + 378 => [ + [['_route' => 'admin_index', '_controller' => 'App\\Controller\\Admin\\BlogController::index', '_locale' => 'en'], ['_locale'], ['GET' => 0], null, true, false, null], + [['_route' => 'admin_post_index', '_controller' => 'App\\Controller\\Admin\\BlogController::index', '_locale' => 'en'], ['_locale'], ['GET' => 0], null, true, false, null], + ], + 495 => [[['_route' => 'admin_post_new', '_controller' => 'App\\Controller\\Admin\\BlogController::new', '_locale' => 'en'], ['_locale'], ['GET' => 0, 'POST' => 1], null, false, false, null]], + 613 => [[['_route' => 'admin_post_show', '_controller' => 'App\\Controller\\Admin\\BlogController::show', '_locale' => 'en'], ['_locale', 'id'], ['GET' => 0], null, false, true, null]], + 736 => [[['_route' => 'admin_post_edit', '_controller' => 'App\\Controller\\Admin\\BlogController::edit', '_locale' => 'en'], ['_locale', 'id'], ['GET' => 0, 'POST' => 1], null, false, false, null]], + 864 => [[['_route' => 'admin_post_delete', '_controller' => 'App\\Controller\\Admin\\BlogController::delete', '_locale' => 'en'], ['_locale', 'id'], ['POST' => 0], null, false, false, null]], + 970 => [[['_route' => 'blog_index', 'page' => '1', '_format' => 'html', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['_locale'], ['GET' => 0], null, true, false, null]], + 1085 => [[['_route' => 'blog_rss', 'page' => '1', '_format' => 'xml', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['_locale'], ['GET' => 0], null, false, false, null]], + 1208 => [[['_route' => 'blog_index_paginated', '_format' => 'html', '_controller' => 'App\\Controller\\BlogController::index', '_locale' => 'en'], ['_locale', 'page'], ['GET' => 0], null, false, true, null]], + 1330 => [[['_route' => 'blog_post', '_controller' => 'App\\Controller\\BlogController::postShow', '_locale' => 'en'], ['_locale', 'slug'], ['GET' => 0], null, false, true, null]], + 1458 => [[['_route' => 'comment_new', '_controller' => 'App\\Controller\\BlogController::commentNew', '_locale' => 'en'], ['_locale', 'postSlug'], ['POST' => 0], null, false, false, null]], + 1572 => [[['_route' => 'blog_search', '_controller' => 'App\\Controller\\BlogController::search', '_locale' => 'en'], ['_locale'], ['GET' => 0], null, false, false, null]], + 1680 => [[['_route' => 'security_login', '_controller' => 'App\\Controller\\SecurityController::login', '_locale' => 'en'], ['_locale'], null, null, false, false, null]], + 1789 => [[['_route' => 'security_logout', '_controller' => 'App\\Controller\\SecurityController::logout', '_locale' => 'en'], ['_locale'], null, null, false, false, null]], + 1904 => [[['_route' => 'user_edit', '_controller' => 'App\\Controller\\UserController::edit', '_locale' => 'en'], ['_locale'], ['GET' => 0, 'POST' => 1], null, false, false, null]], + 2031 => [ + [['_route' => 'user_change_password', '_controller' => 'App\\Controller\\UserController::changePassword', '_locale' => 'en'], ['_locale'], ['GET' => 0, 'POST' => 1], null, false, false, null], + [null, null, null, null, false, false, 0], + ], + ], + null, // $checkCondition +]; diff --git a/integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php.meta b/integration/testdata/symfony_app/var/cache/dev/url_matching_routes.php.meta new file mode 100644 index 0000000000000000000000000000000000000000..206e93403a637ae923c7c350df8da1bf93dd6e3c GIT binary patch literal 3464 zcmd5;U2obj6y>)>dj&Uqgc6=w(4=Y8HnrLt5;DmJT#Rj9JJ77=zt0X|D+LObrtFEJ z=-T((b8_yXaTvufEWYXfh?`LyJm&MU6#1Yh=Sm6?#yyEKn+zU6%M243d}bWBe}XuS zUv%7Zg_Y|nE4Vo?=(_qw91yA$foD2b9IATVMU^T>lHz`XGBcpb80j3A5@)rX&Uw&X zu{bQV^-ldv>kAO6M6yA%@4Y(8M9P6|$Eg1X$;5;JqC{PL-XN@(iO`dKAvsGJ4He3< zQwZ+)X_VRhHT<~ttK0V9rD&O&9Y4)d5w_3pbD+Sh5N=1YgV`z*X7gf?*efq`4Y$He zOs&rl5+gC+ev(04_s$l%>ImzBisMSB$};@CqeGgIV-UIi+S9ZDdnhnWI#*?gIdikYvbAeuRXu)ckP`3%@krF#x5;i+9cOtFtuVJI#ls#)-3< zIasz+V^nokbWaXJ_{7k5`g@ylZ3-5& zO|%u`TFvbg?eFQZ_uY;r)}ZCajB1P sr7Iu&OARD#hw!BTEhv(NCQ~3OEXbXk%~}C{SoC3(6=q&gxzY9N53=|B9RL6T literal 0 HcmV?d00001 diff --git a/integration/testdata/symfony_app/webpack.config.js b/integration/testdata/symfony_app/webpack.config.js new file mode 100644 index 00000000..7ec7dd24 --- /dev/null +++ b/integration/testdata/symfony_app/webpack.config.js @@ -0,0 +1,83 @@ +const Encore = require('@symfony/webpack-encore'); + +// Manually configure the runtime environment if not already configured yet by the "encore" command. +// It's useful when you use tools that rely on webpack.config.js file. +if (!Encore.isRuntimeEnvironmentConfigured()) { + Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev'); +} + +Encore + // directory where compiled assets will be stored + .setOutputPath('public/build/') + // public path used by the web server to access the output path + .setPublicPath('/build') + // only needed for CDN's or subdirectory deploy + //.setManifestKeyPrefix('build/') + + /* + * ENTRY CONFIG + * + * Each entry will result in one JavaScript file (e.g. app.js) + * and one CSS file (e.g. app.css) if your JavaScript imports CSS. + */ + .addEntry('app', './assets/app.js') + .addEntry('login', './assets/login.js') + .addEntry('admin', './assets/admin.js') + .addEntry('search', './assets/search.js') + + // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js) + .enableStimulusBridge('./assets/controllers.json') + + // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. + .splitEntryChunks() + + // will require an extra script tag for runtime.js + // but, you probably want this, unless you're building a single-page app + .enableSingleRuntimeChunk() + + /* + * FEATURE CONFIG + * + * Enable & configure other features below. For a full + * list of features, see: + * https://symfony.com/doc/current/frontend.html#adding-more-features + */ + .cleanupOutputBeforeBuild() + .enableBuildNotifications() + .enableSourceMaps(!Encore.isProduction()) + // enables hashed filenames (e.g. app.abc123.css) + .enableVersioning(Encore.isProduction()) + + // configure Babel + .configureBabel((config) => { + config.plugins.push('@babel/plugin-proposal-class-properties'); + }) + + // enables and configure @babel/preset-env polyfills + .configureBabelPresetEnv((config) => { + config.useBuiltIns = 'usage'; + config.corejs = '3.23'; + }) + + // enables Sass/SCSS support + .enableSassLoader() + + // uncomment if you use TypeScript + //.enableTypeScriptLoader() + + // uncomment if you use React + //.enableReactPreset() + + // uncomment to get integrity="..." attributes on your script & link tags + // requires WebpackEncoreBundle 1.4 or higher + .enableIntegrityHashes(Encore.isProduction()) + + // uncomment if you're having problems with a jQuery plugin + .autoProvidejQuery() + .autoProvideVariables({ + "window.Bloodhound": require.resolve('bloodhound-js'), + "jQuery.tagsinput": "bootstrap-tagsinput" + }) +; + +module.exports = Encore.getWebpackConfig(); diff --git a/integration/testdata/symfony_app/yarn.lock b/integration/testdata/symfony_app/yarn.lock new file mode 100644 index 00000000..a5c4284c --- /dev/null +++ b/integration/testdata/symfony_app/yarn.lock @@ -0,0 +1,4767 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.7.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz#ae1feddc6ebbaa2fd79346b77821c3bd73a39646" + integrity sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.6", "@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.10.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@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@^7.8.4": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@fortawesome/fontawesome-free@^5.8.1": + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@nuxt/friendly-errors-webpack-plugin@^2.5.1": + version "2.5.2" + resolved "https://registry.yarnpkg.com/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.2.tgz#982a43ee2da61611f7396439e57038392d3944d5" + integrity sha512-LLc+90lnxVbpKkMqk5z1EWpXoODhc6gRkqqXJCInJwF5xabHAE7biFvbULfvTRmtaTzAaP8IV4HQDLUgeAUTTw== + dependencies: + chalk "^2.3.2" + consola "^2.6.0" + error-stack-parser "^2.0.0" + string-width "^4.2.3" + +"@stimulus/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@stimulus/core/-/core-2.0.0.tgz#140c85318d6a8a8210c0faf182223b8459348877" + integrity sha512-ff70GafKtzc8zQ1/cG+UvL06GcifPWovf2wBEdjLMh9xO2GOYURO3y2RYgzIGYUIBefQwyfX2CLfJdZFJrEPTw== + dependencies: + "@stimulus/mutation-observers" "^2.0.0" + +"@stimulus/multimap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@stimulus/multimap/-/multimap-2.0.0.tgz#420cfa096ed6538df4a91dbd2b2842c1779952b2" + integrity sha512-pMBCewkZCFVB3e5mEMoyO9+9aKzHDITmf3OnPun51YWxlcPdHcwbjqm1ylK63fsoduIE+RowBpFwFqd3poEz4w== + +"@stimulus/mutation-observers@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@stimulus/mutation-observers/-/mutation-observers-2.0.0.tgz#3dbe37453bda47a6c795a90204ee8d77a799fb87" + integrity sha512-kx4VAJdPhIGBQKGIoUDC2tupEKorG3A+ckc2b1UiwInKTMAC1axOHU8ebcwhaJIxRqIrs8//4SJo9YAAOx6FEg== + dependencies: + "@stimulus/multimap" "^2.0.0" + +"@stimulus/webpack-helpers@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@stimulus/webpack-helpers/-/webpack-helpers-2.0.0.tgz#54296d2a2dffd4f962d2e802d99a3fdd84b8845f" + integrity sha512-D6tJWsAC024MwGEIKlUVYU8Ln87mlrmiwHvYAjipg+s8H4eLxUMQ3PZkWyPevfipH+oR3leuHsjYsK1gN5ViQA== + +"@symfony/stimulus-bridge@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@symfony/stimulus-bridge/-/stimulus-bridge-2.1.0.tgz#d5cf8c29847fd42f40a8a6464e057a1def05ced9" + integrity sha512-vuSV1rfNCJ4gILDs3fKIlXvPAL54fRwWljpepqHiPGnHHRiqMydRtMeeqC5EZQ2hKrO9E49iqEJx0xNgAq5tVg== + dependencies: + acorn "^8.0.5" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +"@symfony/webpack-encore@^1.0.0": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-1.8.2.tgz#ceffa0d9326d29fa62b3a61f213e8e01a9992a7e" + integrity sha512-ZOsOqaZNP3BSQuISAsyH/Jv5+rDxbM4Wf6IsKo1y5Cm9BFIS2dPLsqDZfMbi6G2HdAHm88JqX/HGwxE73eADEw== + dependencies: + "@babel/core" "^7.7.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/preset-env" "^7.10.0" + "@nuxt/friendly-errors-webpack-plugin" "^2.5.1" + assets-webpack-plugin "7.0.*" + babel-loader "^8.2.2" + chalk "^4.0.0" + clean-webpack-plugin "^3.0.0" + css-loader "^5.2.4" + css-minimizer-webpack-plugin "^2.0.0" + fast-levenshtein "^3.0.0" + loader-utils "^2.0.0" + mini-css-extract-plugin "^1.5.0" + pkg-up "^3.1.0" + pretty-error "^3.0.3" + resolve-url-loader "^3.1.2" + semver "^7.3.2" + style-loader "^2.0.0" + sync-rpc "^1.3.6" + terser-webpack-plugin "^5.1.1" + tmp "^0.2.1" + webpack "^5.35" + webpack-cli "^4.9.1" + webpack-dev-server "^4.0.0" + yargs-parser "^20.2.4" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" + integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" + integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@^1": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== + +"@types/uglify-js@*": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.16.0.tgz#2cf74a0e6ebb6cd54c0d48e509d5bd91160a9602" + integrity sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.4.31": + version "4.41.32" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" + integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + dependencies: + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" + source-map "^0.6.0" + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn@^8.0.5, acorn@^8.4.1, acorn@^8.5.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^3.0.0, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +assets-webpack-plugin@7.0.*: + version "7.0.0" + resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-7.0.0.tgz#c61ed7466f35ff7a4d90d7070948736f471b8804" + integrity sha512-DMZ9r6HFxynWeONRMhSOFTvTrmit5dovdoUKdJgCG03M6CC7XiwNImPH+Ad1jaVrQ2n59e05lBhte52xPt4MSA== + dependencies: + camelcase "^6.0.0" + escape-string-regexp "^4.0.0" + lodash "^4.17.20" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-loader@^8.2.2: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bloodhound-js@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bloodhound-js/-/bloodhound-js-1.2.3.tgz#702c175f7488a14cdfedb6c0fba2dba577964d49" + integrity sha512-gpcHaO8SqK/bLwWgobLGQvIVpSdTX4fKZFjfh6ltori5aULXJxC/ndrNRf3PYGOdyD4mFIqjySXLWX4pE88VmA== + dependencies: + es6-promise "^3.0.2" + object-assign "^4.0.1" + storage2 "^0.1.0" + superagent "^3.8.3" + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bootstrap-sass@^3.3.7: + version "3.4.3" + resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.4.3.tgz#742cc8f4286303ae9fe8e4c95237321eae73766c" + integrity sha512-vPgFnGMp1jWZZupOND65WS6mkR8rxhJxndT/AcMbqcq1hHMdkcH4sMPhznLzzoHOHkSCrd6J9F8pWBriPCKP2Q== + +bootstrap-tagsinput@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/bootstrap-tagsinput/-/bootstrap-tagsinput-0.7.1.tgz#ffe3b06bbe2a106945ef2814568005a94f211937" + integrity sha512-xSks67GWgXLnmO5gqp788vhh7WoXd9mHj5uKE5zg8rvw3sNYYSCjrSlrPRlPdpYKwmuxeuf2jsNjBSWEucyB1w== + +bootstrap@^3.3: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.4.1.tgz#c3a347d419e289ad11f4033e3c4132b87c081d72" + integrity sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA== + +bootswatch@^3.3.7: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-3.4.1.tgz#50aed16fb04ec791c3dd8831515c29d4a757fdb9" + integrity sha512-0hL4A8OUiqABgPipGrojf/hyhr5RS257xCNARlbK34HaMfhV5fXvwEooN4/ri9+jgX47J4Wg24ZPmfZ2xD2cKw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.2: + version "4.21.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" + integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== + dependencies: + caniuse-lite "^1.0.30001366" + electron-to-chromium "^1.4.188" + node-releases "^2.0.6" + update-browserslist-db "^1.0.4" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001366: + version "1.0.30001368" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001368.tgz#c5c06381c6051cd863c45021475434e81936f713" + integrity sha512-wgfRYa9DenEomLG/SdWgQxpIyvdtH3NW8Vq+tB6AwR9e56iOIcu1im5F/wNdDf04XlKHXqIx4N8Jo0PemeBenQ== + +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" + integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A== + dependencies: + "@types/webpack" "^4.4.31" + del "^4.1.1" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-emitter@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg== + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.6.0: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg== + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookiejar@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.23.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.5.tgz#11edce2f1c4f69a96d30ce77c805ce118909cd5b" + integrity sha512-fHYozIFIxd+91IIbXJgWd/igXIc8Mf9is0fusswjnGIWVG96y2cwyUdlCkGOw6rMLHKAxg7xtCIVaHsyOUnJIg== + dependencies: + browserslist "^4.21.2" + semver "7.0.0" + +core-js@^3.0.0: + version "3.23.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.5.tgz#1f82b0de5eece800827a2f59d597509c67650475" + integrity sha512-7Vh11tujtAZy82da4duVreQysIoO2EvVrur7y6IzZkH1IHPSekuDi8Vuw1+YKjkbfWLRD7Nc9ICQ/sIUDutcyg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-declaration-sorter@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + +css-loader@^5.2.4: + version "5.2.7" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" + integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz#3c42f6624ed4cf4780dd963e23ee649e5a25c1a8" + integrity sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw== + dependencies: + cssnano "^5.0.0" + jest-worker "^26.3.0" + p-limit "^3.0.2" + postcss "^8.2.9" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.2.12: + version "5.2.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" + integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== + dependencies: + css-declaration-sorter "^6.3.0" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.6" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.0: + version "5.1.12" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c" + integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== + dependencies: + cssnano-preset-default "^5.2.12" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.188: + version "1.4.198" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz#36a8e7871046f7f94c01dc0133912fd5cf226c6a" + integrity sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +enhanced-resolve@^5.9.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +eonasdan-bootstrap-datetimepicker@^4.17.47: + version "4.17.49" + resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.49.tgz#5534ba581c1e7eb988dbf773e2fed8a7f48cc76a" + integrity sha512-7KZeDpkj+A6AtPR3XjX8gAnRPUkPSfW0OmMANG1dkUOPMtLSzbyoCjDIdEcfRtQPU5X0D9Gob7wWKn0h4QWy7A== + dependencies: + bootstrap "^3.3" + jquery "^3.5.1" + moment "^2.10" + moment-timezone "^0.4.0" + +error-stack-parser@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.61" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" + integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@2.0.3, es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.7: + version "1.0.14" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.14.tgz#9054384e4b7a78c88d01a4432dc18871af0ac859" + integrity sha512-tFfWHjnuUfKE186Tfgr+jtaFc0mZTApEgKDOeyN+FwOqRkO/zK/3h1AiRd8u8CY53owL3CUmGr/oI9p/RdyLTA== + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +follow-redirects@^1.0.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.3, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +highlight.js@^11.5.1: + version "11.6.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.6.0.tgz#a50e9da05763f1bb0c1322c8f4f755242cff3f5a" + integrity sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imports-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" + integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ== + dependencies: + loader-utils "^1.0.2" + source-map "^0.6.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^26.3.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jquery@>=1.7, jquery@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +lato-font@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lato-font/-/lato-font-3.0.0.tgz#91b837e2374b668fb7331d44c894d37a2d9f8e11" + integrity sha512-wKhFCh9XX91Lepf38ynnZTNpkQD1OWuXV1RwFgcchUVQZzBixJ/yXCaVCIrNI3CbgT9pLcLzWKgn+6OETzAnug== + +lilconfig@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.4.3: + version "3.4.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mini-css-extract-plugin@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" + integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +moment-timezone@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06" + integrity sha512-5cNPVUwaVJDCe9JM8m/qz17f9SkaI8rpnRUyDJi2K5HAd6EwhuQ3n5nLclZkNC/qJnomKgQH2TIu70Gy2dxFKA== + dependencies: + moment ">= 2.6.0" + +"moment@>= 2.6.0", moment@^2.10: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-notifier@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-9.0.1.tgz#cea837f4c5e733936c7b9005e6545cea825d1af4" + integrity sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@7.0.36: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.2.15, postcss@^8.2.9: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +pretty-error@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-3.0.4.tgz#94b1d54f76c1ed95b9c604b9de2194838e5b574e" + integrity sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.6" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +qs@^6.5.1: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.0.1, readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +renderkid@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320" + integrity sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.36" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.14.2, resolve@^1.9.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ== + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw== + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@^12.3: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sass@^1.53.0: + version "1.53.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb" + integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.5: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stimulus@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stimulus/-/stimulus-2.0.0.tgz#713c8b91a72ef90914b90955f0e705f004403047" + integrity sha512-xipy7BS5TVpg4fX6S8LhrYZp7cmHGjmk09WSAiVx1gF5S5g43IWsuetfUhIk8HfHUG+4MQ9nY0FQz4dRFLs/8w== + dependencies: + "@stimulus/core" "^2.0.0" + "@stimulus/webpack-helpers" "^2.0.0" + +storage2@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/storage2/-/storage2-0.1.2.tgz#3c433adf88b1bf39b61530e361b359fa78c9f244" + integrity sha512-I6VlBrP9/6GN9J1eMGPiSE2FBtHhKj1yF8NXPH+lpgMY8y/nZ6a22Fm4vHIqEqLrjQ/H2WnOC/fG4ONBm2UTBQ== + +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +style-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +sync-rpc@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + +terser@^5.7.2: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" + integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== + +typeahead.js@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/typeahead.js/-/typeahead.js-0.11.1.tgz#4e64e671b22310a8606f4aec805924ba84b015b8" + integrity sha512-yGaLzGjVHyryZdNfrWz2NHXUwEO7hrlVmGMGCo5+6mH3nEEhcQ0Te3mK3G60uRnxfERu8twOWSU4WmwScbwhMg== + dependencies: + jquery ">=1.7" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +watchpack@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@^4.9.1: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.0.0: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-notifier@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.15.0.tgz#72644a1a4ec96b3528704d28f79da5e70048e8ee" + integrity sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ== + dependencies: + node-notifier "^9.0.0" + strip-ansi "^6.0.0" + +webpack-sources@^1.1.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.35: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.9.3" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.3.1" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.4.2: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.4: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/integration/with_vendored_packages_test.go b/integration/with_vendored_packages_test.go index 3d4a235c..6c48fda2 100644 --- a/integration/with_vendored_packages_test.go +++ b/integration/with_vendored_packages_test.go @@ -65,8 +65,6 @@ func testWithVendoredPackages(t *testing.T, context spec.G, it spec.S) { Execute(name, source) Expect(err).ToNot(HaveOccurred(), logs.String) - Expect(logs).To(ContainSubstring("Detected existing vendored packages, will run 'composer install' with those packages")) - container, err = docker.Container.Run. WithEnv(map[string]string{"PORT": "8765"}). WithPublish("8765"). diff --git a/run/main.go b/run/main.go index 14453fac..ad5ff39a 100644 --- a/run/main.go +++ b/run/main.go @@ -24,7 +24,6 @@ func main() { options := composer.NewComposerInstallOptions() installExec := pexec.NewExecutable("composer") - dumpAutoloadExec := pexec.NewExecutable("composer") globalExec := pexec.NewExecutable("composer") checkPlatformReqsExec := pexec.NewExecutable("composer") @@ -34,7 +33,6 @@ func main() { logEmitter, options, installExec, - dumpAutoloadExec, globalExec, checkPlatformReqsExec, Generator{}, From 014245280a1d02ab0cf3a877b4c75d422be8e234 Mon Sep 17 00:00:00 2001 From: Sophie Wigmore Date: Thu, 15 Dec 2022 11:46:56 -0500 Subject: [PATCH 2/4] readd symfony app public dir --- .../symfony_app/public/build/31.46aa6824.js | 1 + .../symfony_app/public/build/755.5a8586e9.js | 2 + .../public/build/755.5a8586e9.js.LICENSE.txt | 24 ++++++++ .../symfony_app/public/build/823.168b723b.js | 1 + .../symfony_app/public/build/919.81f4cc27.js | 2 + .../public/build/919.81f4cc27.js.LICENSE.txt | 29 +++++++++ .../symfony_app/public/build/95.1ed6b32f.js | 1 + .../symfony_app/public/build/95.22c66ae4.css | 17 ++++++ .../public/build/admin.2d66e817.js | 1 + .../public/build/admin.4e2dcc67.css | 7 +++ .../symfony_app/public/build/app.17316efd.css | 9 +++ .../symfony_app/public/build/app.c5bd2611.js | 1 + .../symfony_app/public/build/entrypoints.json | 61 +++++++++++++++++++ .../public/build/login.6b6b5d56.js | 1 + .../symfony_app/public/build/manifest.json | 43 +++++++++++++ .../public/build/runtime.725dd7e0.js | 1 + .../public/build/search.0b825478.js | 1 + 17 files changed, 202 insertions(+) create mode 100644 integration/testdata/symfony_app/public/build/31.46aa6824.js create mode 100644 integration/testdata/symfony_app/public/build/755.5a8586e9.js create mode 100644 integration/testdata/symfony_app/public/build/755.5a8586e9.js.LICENSE.txt create mode 100644 integration/testdata/symfony_app/public/build/823.168b723b.js create mode 100644 integration/testdata/symfony_app/public/build/919.81f4cc27.js create mode 100644 integration/testdata/symfony_app/public/build/919.81f4cc27.js.LICENSE.txt create mode 100644 integration/testdata/symfony_app/public/build/95.1ed6b32f.js create mode 100644 integration/testdata/symfony_app/public/build/95.22c66ae4.css create mode 100644 integration/testdata/symfony_app/public/build/admin.2d66e817.js create mode 100644 integration/testdata/symfony_app/public/build/admin.4e2dcc67.css create mode 100644 integration/testdata/symfony_app/public/build/app.17316efd.css create mode 100644 integration/testdata/symfony_app/public/build/app.c5bd2611.js create mode 100644 integration/testdata/symfony_app/public/build/entrypoints.json create mode 100644 integration/testdata/symfony_app/public/build/login.6b6b5d56.js create mode 100644 integration/testdata/symfony_app/public/build/manifest.json create mode 100644 integration/testdata/symfony_app/public/build/runtime.725dd7e0.js create mode 100644 integration/testdata/symfony_app/public/build/search.0b825478.js diff --git a/integration/testdata/symfony_app/public/build/31.46aa6824.js b/integration/testdata/symfony_app/public/build/31.46aa6824.js new file mode 100644 index 00000000..db1999dd --- /dev/null +++ b/integration/testdata/symfony_app/public/build/31.46aa6824.js @@ -0,0 +1 @@ +(self.webpackChunk=self.webpackChunk||[]).push([[31],{9662:(r,t,e)=>{var n=e(614),o=e(6330),i=TypeError;r.exports=function(r){if(n(r))return r;throw i(o(r)+" is not a function")}},1223:(r,t,e)=>{var n=e(5112),o=e(30),i=e(3070).f,u=n("unscopables"),c=Array.prototype;null==c[u]&&i(c,u,{configurable:!0,value:o(null)}),r.exports=function(r){c[u][r]=!0}},9670:(r,t,e)=>{var n=e(111),o=String,i=TypeError;r.exports=function(r){if(n(r))return r;throw i(o(r)+" is not an object")}},1318:(r,t,e)=>{var n=e(5656),o=e(1400),i=e(6244),u=function(r){return function(t,e,u){var c,a=n(t),f=i(a),s=o(u,f);if(r&&e!=e){for(;f>s;)if((c=a[s++])!=c)return!0}else for(;f>s;s++)if((r||s in a)&&a[s]===e)return r||s||0;return!r&&-1}};r.exports={includes:u(!0),indexOf:u(!1)}},2092:(r,t,e)=>{var n=e(9974),o=e(1702),i=e(8361),u=e(7908),c=e(6244),a=e(5417),f=o([].push),s=function(r){var t=1==r,e=2==r,o=3==r,s=4==r,p=6==r,l=7==r,v=5==r||p;return function(y,b,g,h){for(var x,m,d=u(y),O=i(d),w=n(b,g),j=c(O),S=0,P=h||a,E=t?P(y,j):e||l?P(y,0):void 0;j>S;S++)if((v||S in O)&&(m=w(x=O[S],S,d),r))if(t)E[S]=m;else if(m)switch(r){case 3:return!0;case 5:return x;case 6:return S;case 2:f(E,x)}else switch(r){case 4:return!1;case 7:f(E,x)}return p?-1:o||s?s:E}};r.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},7475:(r,t,e)=>{var n=e(3157),o=e(4411),i=e(111),u=e(5112)("species"),c=Array;r.exports=function(r){var t;return n(r)&&(t=r.constructor,(o(t)&&(t===c||n(t.prototype))||i(t)&&null===(t=t[u]))&&(t=void 0)),void 0===t?c:t}},5417:(r,t,e)=>{var n=e(7475);r.exports=function(r,t){return new(n(r))(0===t?0:t)}},4326:(r,t,e)=>{var n=e(1702),o=n({}.toString),i=n("".slice);r.exports=function(r){return i(o(r),8,-1)}},648:(r,t,e)=>{var n=e(1694),o=e(614),i=e(4326),u=e(5112)("toStringTag"),c=Object,a="Arguments"==i(function(){return arguments}());r.exports=n?i:function(r){var t,e,n;return void 0===r?"Undefined":null===r?"Null":"string"==typeof(e=function(r,t){try{return r[t]}catch(r){}}(t=c(r),u))?e:a?i(t):"Object"==(n=i(t))&&o(t.callee)?"Arguments":n}},9920:(r,t,e)=>{var n=e(2597),o=e(3887),i=e(1236),u=e(3070);r.exports=function(r,t,e){for(var c=o(t),a=u.f,f=i.f,s=0;s{var n=e(9781),o=e(3070),i=e(9114);r.exports=n?function(r,t,e){return o.f(r,t,i(1,e))}:function(r,t,e){return r[t]=e,r}},9114:r=>{r.exports=function(r,t){return{enumerable:!(1&r),configurable:!(2&r),writable:!(4&r),value:t}}},8052:(r,t,e)=>{var n=e(614),o=e(3070),i=e(6339),u=e(3072);r.exports=function(r,t,e,c){c||(c={});var a=c.enumerable,f=void 0!==c.name?c.name:t;if(n(e)&&i(e,f,c),c.global)a?r[t]=e:u(t,e);else{try{c.unsafe?r[t]&&(a=!0):delete r[t]}catch(r){}a?r[t]=e:o.f(r,t,{value:e,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})}return r}},3072:(r,t,e)=>{var n=e(7854),o=Object.defineProperty;r.exports=function(r,t){try{o(n,r,{value:t,configurable:!0,writable:!0})}catch(e){n[r]=t}return t}},9781:(r,t,e)=>{var n=e(7293);r.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:(r,t,e)=>{var n=e(7854),o=e(111),i=n.document,u=o(i)&&o(i.createElement);r.exports=function(r){return u?i.createElement(r):{}}},8113:(r,t,e)=>{var n=e(5005);r.exports=n("navigator","userAgent")||""},7392:(r,t,e)=>{var n,o,i=e(7854),u=e(8113),c=i.process,a=i.Deno,f=c&&c.versions||a&&a.version,s=f&&f.v8;s&&(o=(n=s.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&u&&(!(n=u.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=u.match(/Chrome\/(\d+)/))&&(o=+n[1]),r.exports=o},748:r=>{r.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(r,t,e)=>{var n=e(7854),o=e(1236).f,i=e(8880),u=e(8052),c=e(3072),a=e(9920),f=e(4705);r.exports=function(r,t){var e,s,p,l,v,y=r.target,b=r.global,g=r.stat;if(e=b?n:g?n[y]||c(y,{}):(n[y]||{}).prototype)for(s in t){if(l=t[s],p=r.dontCallGetSet?(v=o(e,s))&&v.value:e[s],!f(b?s:y+(g?".":"#")+s,r.forced)&&void 0!==p){if(typeof l==typeof p)continue;a(l,p)}(r.sham||p&&p.sham)&&i(l,"sham",!0),u(e,s,l,r)}}},7293:r=>{r.exports=function(r){try{return!!r()}catch(r){return!0}}},9974:(r,t,e)=>{var n=e(1702),o=e(9662),i=e(4374),u=n(n.bind);r.exports=function(r,t){return o(r),void 0===t?r:i?u(r,t):function(){return r.apply(t,arguments)}}},4374:(r,t,e)=>{var n=e(7293);r.exports=!n((function(){var r=function(){}.bind();return"function"!=typeof r||r.hasOwnProperty("prototype")}))},6916:(r,t,e)=>{var n=e(4374),o=Function.prototype.call;r.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},6530:(r,t,e)=>{var n=e(9781),o=e(2597),i=Function.prototype,u=n&&Object.getOwnPropertyDescriptor,c=o(i,"name"),a=c&&"something"===function(){}.name,f=c&&(!n||n&&u(i,"name").configurable);r.exports={EXISTS:c,PROPER:a,CONFIGURABLE:f}},1702:(r,t,e)=>{var n=e(4374),o=Function.prototype,i=o.bind,u=o.call,c=n&&i.bind(u,u);r.exports=n?function(r){return r&&c(r)}:function(r){return r&&function(){return u.apply(r,arguments)}}},5005:(r,t,e)=>{var n=e(7854),o=e(614),i=function(r){return o(r)?r:void 0};r.exports=function(r,t){return arguments.length<2?i(n[r]):n[r]&&n[r][t]}},8173:(r,t,e)=>{var n=e(9662);r.exports=function(r,t){var e=r[t];return null==e?void 0:n(e)}},7854:(r,t,e)=>{var n=function(r){return r&&r.Math==Math&&r};r.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e.g&&e.g)||function(){return this}()||Function("return this")()},2597:(r,t,e)=>{var n=e(1702),o=e(7908),i=n({}.hasOwnProperty);r.exports=Object.hasOwn||function(r,t){return i(o(r),t)}},3501:r=>{r.exports={}},490:(r,t,e)=>{var n=e(5005);r.exports=n("document","documentElement")},4664:(r,t,e)=>{var n=e(9781),o=e(7293),i=e(317);r.exports=!n&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(r,t,e)=>{var n=e(1702),o=e(7293),i=e(4326),u=Object,c=n("".split);r.exports=o((function(){return!u("z").propertyIsEnumerable(0)}))?function(r){return"String"==i(r)?c(r,""):u(r)}:u},2788:(r,t,e)=>{var n=e(1702),o=e(614),i=e(5465),u=n(Function.toString);o(i.inspectSource)||(i.inspectSource=function(r){return u(r)}),r.exports=i.inspectSource},9909:(r,t,e)=>{var n,o,i,u=e(8536),c=e(7854),a=e(1702),f=e(111),s=e(8880),p=e(2597),l=e(5465),v=e(6200),y=e(3501),b="Object already initialized",g=c.TypeError,h=c.WeakMap;if(u||l.state){var x=l.state||(l.state=new h),m=a(x.get),d=a(x.has),O=a(x.set);n=function(r,t){if(d(x,r))throw new g(b);return t.facade=r,O(x,r,t),t},o=function(r){return m(x,r)||{}},i=function(r){return d(x,r)}}else{var w=v("state");y[w]=!0,n=function(r,t){if(p(r,w))throw new g(b);return t.facade=r,s(r,w,t),t},o=function(r){return p(r,w)?r[w]:{}},i=function(r){return p(r,w)}}r.exports={set:n,get:o,has:i,enforce:function(r){return i(r)?o(r):n(r,{})},getterFor:function(r){return function(t){var e;if(!f(t)||(e=o(t)).type!==r)throw g("Incompatible receiver, "+r+" required");return e}}}},3157:(r,t,e)=>{var n=e(4326);r.exports=Array.isArray||function(r){return"Array"==n(r)}},614:r=>{r.exports=function(r){return"function"==typeof r}},4411:(r,t,e)=>{var n=e(1702),o=e(7293),i=e(614),u=e(648),c=e(5005),a=e(2788),f=function(){},s=[],p=c("Reflect","construct"),l=/^\s*(?:class|function)\b/,v=n(l.exec),y=!l.exec(f),b=function(r){if(!i(r))return!1;try{return p(f,s,r),!0}catch(r){return!1}},g=function(r){if(!i(r))return!1;switch(u(r)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return y||!!v(l,a(r))}catch(r){return!0}};g.sham=!0,r.exports=!p||o((function(){var r;return b(b.call)||!b(Object)||!b((function(){r=!0}))||r}))?g:b},4705:(r,t,e)=>{var n=e(7293),o=e(614),i=/#|\.prototype\./,u=function(r,t){var e=a[c(r)];return e==s||e!=f&&(o(t)?n(t):!!t)},c=u.normalize=function(r){return String(r).replace(i,".").toLowerCase()},a=u.data={},f=u.NATIVE="N",s=u.POLYFILL="P";r.exports=u},111:(r,t,e)=>{var n=e(614);r.exports=function(r){return"object"==typeof r?null!==r:n(r)}},1913:r=>{r.exports=!1},2190:(r,t,e)=>{var n=e(5005),o=e(614),i=e(7976),u=e(3307),c=Object;r.exports=u?function(r){return"symbol"==typeof r}:function(r){var t=n("Symbol");return o(t)&&i(t.prototype,c(r))}},6244:(r,t,e)=>{var n=e(7466);r.exports=function(r){return n(r.length)}},6339:(r,t,e)=>{var n=e(7293),o=e(614),i=e(2597),u=e(9781),c=e(6530).CONFIGURABLE,a=e(2788),f=e(9909),s=f.enforce,p=f.get,l=Object.defineProperty,v=u&&!n((function(){return 8!==l((function(){}),"length",{value:8}).length})),y=String(String).split("String"),b=r.exports=function(r,t,e){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),e&&e.getter&&(t="get "+t),e&&e.setter&&(t="set "+t),(!i(r,"name")||c&&r.name!==t)&&(u?l(r,"name",{value:t,configurable:!0}):r.name=t),v&&e&&i(e,"arity")&&r.length!==e.arity&&l(r,"length",{value:e.arity});try{e&&i(e,"constructor")&&e.constructor?u&&l(r,"prototype",{writable:!1}):r.prototype&&(r.prototype=void 0)}catch(r){}var n=s(r);return i(n,"source")||(n.source=y.join("string"==typeof t?t:"")),r};Function.prototype.toString=b((function(){return o(this)&&p(this).source||a(this)}),"toString")},4758:r=>{var t=Math.ceil,e=Math.floor;r.exports=Math.trunc||function(r){var n=+r;return(n>0?e:t)(n)}},133:(r,t,e)=>{var n=e(7392),o=e(7293);r.exports=!!Object.getOwnPropertySymbols&&!o((function(){var r=Symbol();return!String(r)||!(Object(r)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},8536:(r,t,e)=>{var n=e(7854),o=e(614),i=e(2788),u=n.WeakMap;r.exports=o(u)&&/native code/.test(i(u))},30:(r,t,e)=>{var n,o=e(9670),i=e(6048),u=e(748),c=e(3501),a=e(490),f=e(317),s=e(6200),p=s("IE_PROTO"),l=function(){},v=function(r){return"