From e533ba1f15f4e6d75607e8b3b160c3b08dfe093e Mon Sep 17 00:00:00 2001 From: Slim Date: Wed, 20 Dec 2023 15:21:44 +0100 Subject: [PATCH] First commit of project EBS --- .dockerignore | 34 + .editorconfig | 72 + .env | 108 + .env.test | 7 + .eslintrc.json | 33 + .gitattributes | 16 + .github/pull_request_template.md | 45 + .github/workflows/ci.yml | 56 + .github/workflows/cleanup.yml | 33 + .gitignore | 35 + .php-cs-fixer.dist.php | 27 + .trivyignore | 0 Dockerfile | 213 + ERRORS.md | 180 + LICENSE | 680 +- Makefile | 233 + README.md | 2 +- assets/app.js | 18 + assets/controllers.json | 15 + assets/controllers/accordion_controller.js | 9 + assets/controllers/account_controller.js | 65 + assets/controllers/calendar_controller.js | 114 + assets/controllers/menu_controller.js | 8 + assets/controllers/product_controller.js | 34 + .../controllers/productupload_controller.js | 40 + .../productvisibility_controller.js | 18 + assets/controllers/read-more_controller.js | 14 + assets/controllers/search_controller.js | 16 + assets/controllers/tooltips_controller.js | 11 + assets/stimulus.js | 21 + assets/styles/_accordion.scss | 18 + assets/styles/_address.scss | 18 + assets/styles/_calendar.scss | 73 + assets/styles/_card.scss | 22 + assets/styles/_chat.scss | 36 + assets/styles/_connexion.scss | 81 + assets/styles/_conversations.scss | 59 + assets/styles/_custom-variables.scss | 23 + assets/styles/_grid.scss | 51 + assets/styles/_group.scss | 21 + assets/styles/_headings.scss | 34 + assets/styles/_lender.scss | 11 + assets/styles/_my-account.scss | 39 + assets/styles/_pagination.scss | 41 + assets/styles/_product-list.scss | 33 + assets/styles/_product.scss | 85 + assets/styles/_reset.scss | 10 + assets/styles/_upload.scss | 15 + assets/styles/_utilities.scss | 112 + assets/styles/global.scss | 46 + bin/console | 17 + bin/phpunit | 19 + composer.json | 180 + composer.lock | 18594 ++++++++++++++++ composer.md | 23 + config/bundles.php | 36 + config/packages/api_platform.yaml | 24 + config/packages/bazinga_geocoder.yaml | 24 + config/packages/cache.yaml | 23 + config/packages/debug.yaml | 5 + config/packages/doctrine.yaml | 44 + config/packages/doctrine_migrations.yaml | 7 + config/packages/flysystem.yaml | 100 + config/packages/fos_ckeditor.yaml | 10 + config/packages/framework.yaml | 29 + config/packages/hautelook_alice.yaml | 13 + config/packages/http_discovery.yaml | 10 + config/packages/knp_paginator.yaml | 4 + config/packages/mailer.yaml | 10 + config/packages/meilisearch.yaml | 9 + config/packages/mercure.yaml | 8 + config/packages/messenger.yaml | 33 + config/packages/misd_phone_number.yaml | 6 + config/packages/mollie.yaml | 11 + config/packages/monolog.yaml | 61 + config/packages/nelmio_alice.yaml | 15 + config/packages/nelmio_cors.yaml | 10 + config/packages/notifier.yaml | 29 + config/packages/nyholm_psr7.yaml | 21 + config/packages/payum.yaml | 21 + config/packages/routing.yaml | 12 + config/packages/security.yaml | 67 + config/packages/sensio_framework_extra.yaml | 7 + config/packages/snc_redis.yaml | 27 + config/packages/stof_doctrine_extensions.yaml | 10 + config/packages/translation.yaml | 16 + config/packages/twig.yaml | 16 + config/packages/uid.yaml | 4 + config/packages/validator.yaml | 13 + config/packages/web_profiler.yaml | 17 + config/packages/webpack_encore.yaml | 50 + config/packages/workflow.yaml | 56 + config/packages_extra/doctrine.yaml | 11 + config/packages_extra/flysystem.yaml | 53 + config/packages_extra/mailer.yaml | 17 + config/packages_extra/uuid.yaml | 11 + config/preload.php | 7 + config/routes.yaml | 13 + config/routes/annotations.yaml | 12 + config/routes/api_platform.yaml | 4 + config/routes/framework.yaml | 4 + config/routes/ux_autocomplete.yaml | 3 + config/routes/web_profiler.yaml | 8 + config/services.yaml | 53 + docker-compose.override.yml | 67 + docker-compose.override.yml.dist | 23 + docker-compose.prod.yml | 13 + docker-compose.yml | 123 + docker/caddy/Caddyfile | 31 + docker/php/conf.d/app.dev.ini | 6 + docker/php/conf.d/app.ini | 15 + docker/php/conf.d/app.prod.ini | 2 + docker/php/docker-entrypoint.sh | 66 + docker/php/docker-healthcheck.sh | 8 + docker/php/php-fpm.d/zz-docker.conf | 8 + docs/README.md | 77 + docs/architecture.md | 8 + docs/composer.md | 35 + docs/configuration.md | 137 + docs/crons.md | 80 + docs/database.md | 129 + docs/front-api-calls.md | 19 + docs/geoloc.md | 38 + docs/images/apache2-default-page.png | Bin 0 -> 60978 bytes docs/images/archi.png | Bin 0 -> 99119 bytes docs/images/base-color.png | Bin 0 -> 44255 bytes docs/images/mcd.png | Bin 0 -> 597598 bytes .../service_request_status_workflow.png | Bin 0 -> 42159 bytes docs/images/updated-color.png | Bin 0 -> 41160 bytes docs/install.md | 248 + docs/symfony.md | 88 + docs/theme.md | 48 + docs/uploads.md | 8 + fixtures/.gitignore | 0 fixtures/dev | 1 + fixtures/prod | 1 + fixtures/prod-boot/category.yaml | 18 + fixtures/prod-boot/configuration.yaml | 18 + fixtures/prod-boot/menu.yaml | 5 + fixtures/prod-boot/page.yaml | 20 + fixtures/prod-boot/user.yaml | 17 + fixtures/test/address.yaml | 49 + fixtures/test/category.yaml | 102 + fixtures/test/configuration.yaml | 18 + fixtures/test/group.yaml | 81 + fixtures/test/group_offer.yaml | 84 + fixtures/test/menu.yaml | 5 + fixtures/test/menu_item.yaml | 97 + fixtures/test/messages.yaml | 20 + fixtures/test/page.yaml | 94 + fixtures/test/payment.yaml | 27 + fixtures/test/product.yaml | 190 + fixtures/test/product_availability.yaml | 34 + fixtures/test/service_request.yaml | 67 + fixtures/test/user.yaml | 173 + fixtures/test/user_group.yaml | 83 + helm/chart/.gitignore | 1 + helm/chart/.helmignore | 23 + helm/chart/Chart.lock | 18 + helm/chart/Chart.yaml | 48 + helm/chart/README.md | 21 + helm/chart/templates/NOTES.txt | 22 + helm/chart/templates/_helpers.tpl | 92 + helm/chart/templates/configmap.yaml | 28 + .../cronjobs/cronjobEndMembership.yaml | 148 + .../cronjobNotifyMembershipExpiration1.yaml | 148 + .../cronjobNotifyMembershipExpiration7.yaml | 148 + .../cronjobNotifyServiceRequestDatesEnd.yaml | 148 + ...cronjobNotifyServiceRequestDatesStart.yaml | 148 + helm/chart/templates/deployment.yaml | 370 + helm/chart/templates/fixtures-job.yaml | 210 + helm/chart/templates/hpa.yaml | 28 + helm/chart/templates/ingress.yaml | 61 + helm/chart/templates/secrets.yaml | 27 + helm/chart/templates/service.yaml | 15 + helm/chart/templates/serviceaccount.yaml | 12 + .../templates/tests/test-connection.yaml | 15 + helm/chart/test_minikube.sh | 49 + helm/chart/values-minikube.yml | 44 + helm/chart/values-prod.yml | 34 + helm/chart/values.yaml | 219 + migrations/.gitignore | 0 migrations/2023/Version20230103090224.php | 25 + package.json | 37 + phpstan.neon | 24 + phpunit.xml.dist | 63 + public/.gitignore | 1 + public/apes.png | Bin 0 -> 23977 bytes public/ckeditor.css | 3 + public/index.php | 11 + public/svg/article.svg | 6 + public/svg/chat.svg | 3 + public/svg/funding.png | Bin 0 -> 69910 bytes public/svg/logo-black.svg | 5 + public/svg/logo.svg | 5 + public/svg/placeholder.svg | 6 + public/svg/product.svg | 6 + rector.php | 16 + src/ApiResource/.gitignore | 0 src/ApiResource/GroupResource.php | 28 + src/Command/CommandTrait.php | 46 + src/Command/EndMembershipCommand.php | 97 + .../NotifyMembershipExpirationCommand.php | 98 + .../NotifyServiceRequestDatesCommand.php | 116 + src/Controller/.gitignore | 0 .../Admin/AbstractCategoryCrudController.php | 279 + .../Admin/AbstractMenuCrudController.php | 168 + .../Admin/AbstractMenuItemCrudController.php | 284 + .../Admin/AbstractProductCrudController.php | 276 + .../Admin/AbstractUserCrudController.php | 446 + .../AdminSecuredCrudControllerInterface.php | 16 + .../Admin/AdministratorCrudController.php | 110 + .../Admin/CategoryObjectCrudController.php | 25 + .../Admin/CategoryServiceCrudController.php | 23 + src/Controller/Admin/DashboardController.php | 209 + .../Admin/Dev/DevToolsController.php | 44 + src/Controller/Admin/FooterCrudController.php | 33 + ...oupAdminSecuredCrudControllerInterface.php | 9 + src/Controller/Admin/GroupCrudController.php | 329 + .../Admin/GroupOfferCrudController.php | 180 + src/Controller/Admin/MenuCrudController.php | 37 + .../Admin/MenuItemCrudController.php | 45 + .../Admin/MenuItemFooterCrudController.php | 45 + .../Admin/MenuItemLinkCrudController.php | 25 + ...mMenuSocialNetwordFooterCrudController.php | 39 + .../MenuItemSocialNetworkCrudController.php | 39 + .../Admin/NewMenuFooterLinkController.php | 24 + src/Controller/Admin/ObjectCrudController.php | 100 + src/Controller/Admin/PageCrudController.php | 114 + src/Controller/Admin/ParametersController.php | 51 + .../Admin/PaymentCrudController.php | 113 + src/Controller/Admin/PlaceCrudController.php | 62 + .../Admin/ServiceCrudController.php | 94 + .../Admin/ServiceRequestCrudController.php | 169 + src/Controller/Admin/UserCrudController.php | 100 + .../Admin/UserGroupCrudController.php | 260 + src/Controller/AppController.php | 48 + src/Controller/Cms/CmsController.php | 38 + src/Controller/FlashTrait.php | 18 + src/Controller/Group/CreateGroupAction.php | 93 + src/Controller/Group/GroupController.php | 140 + src/Controller/Group/GroupTrait.php | 25 + src/Controller/Menu/MenuController.php | 77 + src/Controller/PaginationTrait.php | 34 + src/Controller/Payment/DoneAction.php | 76 + src/Controller/Payment/GroupOfferTrait.php | 25 + src/Controller/Payment/PrepareAction.php | 66 + src/Controller/Product/ProductController.php | 91 + src/Controller/RequestTrait.php | 26 + .../Security/AccountCreateController.php | 126 + .../Security/LostPasswordAction.php | 43 + .../Security/ResetPasswordAction.php | 70 + .../Security/SecurityController.php | 28 + src/Controller/SecurityTrait.php | 28 + .../User/Account/ChangeLoginAction.php | 62 + .../User/Account/ChangePasswordAction.php | 56 + .../User/Account/DeleteUserAvatarAction.php | 47 + .../User/Account/EditProfileAction.php | 63 + src/Controller/User/Account/ProfileAction.php | 64 + src/Controller/User/AddressController.php | 132 + .../User/Group/UserGroupController.php | 128 + src/Controller/User/MyAccountAction.php | 52 + .../User/Product/DeleteProductAction.php | 62 + .../User/Product/DeleteProductPhotoAction.php | 61 + .../DeleteProductUnavailabilityAction.php | 59 + .../User/Product/DuplicateProductAction.php | 66 + .../User/Product/ObjectController.php | 89 + .../Product/ProductAvailabilityController.php | 76 + src/Controller/User/Product/ProductTrait.php | 27 + .../User/Product/ServiceController.php | 90 + .../User/Product/UserProductsController.php | 94 + .../ServiceRequest/ConversationController.php | 79 + .../User/ServiceRequest/MyLendingsAction.php | 57 + .../User/ServiceRequest/MyLoansAction.php | 55 + .../ServiceRequestController.php | 75 + ...ServiceRequestStatusWorkflowController.php | 118 + .../ServiceRequest/ServiceRequestTrait.php | 37 + src/Controller/User/VacationModeAction.php | 43 + src/Controller/i18nTrait.php | 30 + .../Processor/ValidationProcessor.php | 31 + .../LocalesCompilerPass.php | 23 + src/Doctrine/Behavior/TimestampableEntity.php | 49 + src/Doctrine/Listener/ProductListener.php | 43 + src/Doctrine/Listener/UserListener.php | 65 + src/Doctrine/Manager/MessageManager.php | 88 + .../Manager/ProductAvailabilityManager.php | 38 + src/Doctrine/Manager/ProductManager.php | 123 + .../Manager/ServiceRequestManager.php | 94 + src/Doctrine/Manager/UserManager.php | 210 + src/Dto/Product/Search.php | 94 + src/Dto/User/UserAddressStep1Data.php | 58 + src/EasyAdmin/Field/FieldTrait.php | 35 + src/EasyAdmin/Filter/EnumFilter.php | 38 + src/EasyAdmin/Filter/User/GroupFilter.php | 45 + src/EasyAdmin/Filter/User/MyUsersFilter.php | 42 + .../Filter/UserGroup/MyGroupFilter.php | 42 + src/EasyAdmin/Filter/UuidFilter.php | 43 + .../Form/Type/GroupMembershipType.php | 30 + .../Form/Type/GroupOfferTypeType.php | 30 + src/EasyAdmin/Form/Type/GroupType.php | 52 + src/EasyAdmin/Form/Type/GroupTypeType.php | 30 + src/EasyAdmin/Form/Type/LoanStatusType.php | 27 + src/EasyAdmin/Form/Type/ProductStatusType.php | 30 + .../Form/Type/ProductVisibilityType.php | 30 + .../Form/Type/SocialMediaTypeType.php | 27 + .../Form/Type/UserMembershipType.php | 30 + src/EasyAdmin/Form/Type/UserType.php | 53 + src/Entity/.gitignore | 0 src/Entity/Address.php | 389 + src/Entity/Category.php | 252 + src/Entity/Configuration.php | 151 + src/Entity/Group.php | 387 + src/Entity/GroupOffer.php | 172 + src/Entity/ImageInterface.php | 10 + src/Entity/ImagesInterface.php | 13 + src/Entity/Menu.php | 144 + src/Entity/MenuItem.php | 255 + src/Entity/Message.php | 267 + src/Entity/Page.php | 144 + src/Entity/Payment.php | 91 + src/Entity/PaymentToken.php | 21 + src/Entity/Product.php | 600 + src/Entity/ProductAvailability.php | 173 + src/Entity/ProductObjectTrait.php | 104 + src/Entity/ProductServiceTrait.php | 34 + src/Entity/ServiceRequest.php | 334 + src/Entity/User.php | 897 + src/Entity/UserConfirmationTrait.php | 80 + src/Entity/UserGroup.php | 216 + src/Entity/UserLostPasswordTrait.php | 72 + src/Enum/AsArrayTrait.php | 20 + src/Enum/ConfigurationType.php | 10 + src/Enum/Group/GroupMembership.php | 25 + src/Enum/Group/GroupOfferType.php | 50 + src/Enum/Group/GroupType.php | 27 + src/Enum/Group/UserMembership.php | 36 + src/Enum/Menu/LinkType.php | 16 + src/Enum/Message/MessageType.php | 45 + src/Enum/Payment/PaymentMethod.php | 20 + src/Enum/Product/ProductAvailabilityMode.php | 20 + src/Enum/Product/ProductAvailabilityType.php | 15 + src/Enum/Product/ProductStatus.php | 31 + src/Enum/Product/ProductType.php | 25 + src/Enum/Product/ProductVisibility.php | 20 + .../ServiceRequest/ServiceRequestStatus.php | 77 + .../ServiceRequestStatusTransition.php | 20 + src/Enum/SocialMediaType.php | 23 + src/Enum/User/UserType.php | 27 + .../Group/GroupNotFoundException.php | 15 + .../Product/ProductNotFoundException.php | 19 + .../ServiceRequestNotFoundException.php | 19 + .../UserConfirmationTokenExpiredException.php | 24 + .../UserLostPasswordTokenExpiredException.php | 16 + src/Exception/UserNotFoundException.php | 16 + src/Faker/Provider/UuidProvider.php | 19 + src/Flysystem/EasyAdminHelper.php | 38 + src/Flysystem/MediaManager.php | 80 + src/Form/Type/Admin/ParametersFormType.php | 96 + src/Form/Type/Group/CreateGroupFormType.php | 78 + .../AbstractProductCategorySelectFormType.php | 52 + .../Type/Product/AbstractProductFormType.php | 138 + .../Product/CreateProductAvailabilityType.php | 45 + src/Form/Type/Product/GroupSelectFormType.php | 28 + .../Product/ObjectCategorySelectFormType.php | 15 + src/Form/Type/Product/ObjectFormType.php | 54 + src/Form/Type/Product/SearchFormType.php | 123 + .../Product/ServiceCategorySelectFormType.php | 15 + src/Form/Type/Product/ServiceFormType.php | 42 + .../Security/AccountCreateStep1FormType.php | 55 + .../Security/AccountCreateStep2FormType.php | 140 + .../Type/Security/GroupInvitationFormType.php | 42 + .../Type/Security/LostPasswordFormType.php | 42 + .../Type/Security/ResetPasswordFormType.php | 60 + .../AbstractUserProductSelectFormType.php | 54 + .../CreateServiceRequestType.php | 68 + .../ModifyServiceRequestType.php | 45 + .../UserLendingProductSelectFormType.php | 13 + .../UserLoansProductSelectFormType.php | 13 + src/Form/Type/User/AddressStep1FormType.php | 80 + src/Form/Type/User/AddressStep2FormType.php | 55 + src/Form/Type/User/ChangeLoginFormType.php | 58 + src/Form/Type/User/ChangePasswordFormType.php | 68 + src/Form/Type/User/EditProfileFormType.php | 142 + .../User/ServiceRequest/NewMessageType.php | 43 + .../Adapter/NominatimToAddressAdapter.php | 37 + src/Geocoder/GeoProvider.php | 61 + src/Geocoder/GeoProviderInterface.php | 17 + src/Helper/CsvExporter.php | 96 + src/Helper/FileUploader.php | 40 + src/Helper/StringHelper.php | 41 + src/Helper/VarDumperHelper.php | 26 + src/Kernel.php | 48 + src/Mailer/AppMailer.php | 58 + .../Admin/Group/GroupInvitationEmail.php | 56 + src/Mailer/Email/Admin/New/NewAdminEmail.php | 45 + .../PromoteToAdmin/PromoteToAdminEmail.php | 45 + .../Admin/UserGroup/AdminPromotionEmail.php | 48 + .../UserGroup/MainAdminPromotionEmail.php | 48 + .../Email/Command/EndMembershipEmail.php | 59 + .../NotifyMembershipExpirationEmail.php | 59 + .../Command/NotifyServiceRequestEndEmail.php | 59 + .../NotifyServiceRequestStartEmail.php | 59 + src/Mailer/Email/EmailInterface.php | 24 + src/Mailer/Email/EmailTrait.php | 16 + .../Security/CreateAccountStep1Email.php | 63 + .../Email/Security/LostPasswordEmail.php | 45 + .../Email/ServiceRequest/NewMessageEmail.php | 53 + .../ServiceRequest/NewServiceRequest.php | 51 + .../ServiceRequest/ServiceRequestAccepted.php | 52 + .../ServiceRequestConfirmed.php | 53 + .../ServiceRequestModifiedByOwner.php | 54 + .../ServiceRequestModifiedByRecipient.php | 54 + .../ServiceRequest/ServiceRequestRefused.php | 55 + src/Mailer/EmailCollection.php | 29 + .../Command/Admin/AbstractFormCommand.php | 50 + .../Command/Admin/ParametersFormCommand.php | 80 + .../Group/CreateGroupInvitationMessage.php | 23 + src/Message/Command/Payment/DoneCommand.php | 21 + .../Security/AccountCreateStep1Command.php | 27 + .../Security/AccountCreateStep2Command.php | 37 + .../AccountCreateStep2RefreshCommand.php | 17 + .../Command/Security/LostPasswordCommand.php | 17 + .../Command/Security/ResetPasswordCommand.php | 23 + .../Command/User/ChangeLoginCommand.php | 21 + .../User/ChangeVacationModeCommand.php | 16 + .../Group/AcceptGroupInvitationCommand.php | 20 + .../Command/User/Group/JoinGroupCommand.php | 20 + .../Command/User/Group/QuitGroupCommand.php | 41 + .../CreateProductUnavailabilityCommand.php | 23 + .../User/Product/DuplicateProductCommand.php | 23 + .../ServiceRequest/CreateMessageCommand.php | 26 + .../CreateServiceRequestCommand.php | 33 + .../ServiceRequest/ReadMessagesCommand.php | 23 + .../ServiceRequest/TryAutoFinalizeCommand.php | 20 + .../Command/User/UpdateAddressCommand.php | 29 + .../Query/Admin/ParametersFormQuery.php | 16 + .../Query/Admin/Poc/PocGeolocQuery.php | 18 + .../Query/Admin/User/UserAddressQuery.php | 44 + src/Message/Query/Group/GetGroupByIdQuery.php | 21 + .../Query/Group/GetGroupMembersQuery.php | 21 + src/Message/Query/Group/GetGroupsQuery.php | 24 + .../Query/Product/GetProductByIdQuery.php | 25 + .../GetProductUnavailabilitiesQuery.php | 18 + .../Query/Security/GetUserByTokenQuery.php | 24 + .../Query/Security/ResetPasswordQuery.php | 21 + .../Query/User/Account/GetUserQuery.php | 20 + .../Query/User/GetUserObjectsQuery.php | 19 + .../Query/User/GetUserServicesQuery.php | 19 + .../User/ServiceRequest/GetLendingsQuery.php | 25 + .../User/ServiceRequest/GetLoansQuery.php | 25 + .../GetServiceRequestByIdQuery.php | 19 + src/MessageBus/CommandBus.php | 24 + src/MessageBus/CommandBusInterface.php | 10 + src/MessageBus/QueryBus.php | 24 + src/MessageBus/QueryBusInterface.php | 10 + .../Admin/ParametersFormCommandHandler.php | 28 + .../Command/Payment/DoneCommandHandler.php | 77 + .../CreateGroupInvitationMessageHandler.php | 83 + .../CreateProductAvailabilityHandler.php | 34 + .../DuplicateProductCommandHandler.php | 39 + .../AccountCreateStep1CommandHandler.php | 40 + .../AccountCreateStep2CommandHandler.php | 54 + ...ccountCreateStep2RefreshCommandHandler.php | 38 + .../Security/LostPasswordCommandHandler.php | 47 + .../Security/ResetPasswordCommandHandler.php | 37 + .../User/ChangeLoginCommandHandler.php | 33 + .../User/ChangeVacationModeCommandHandler.php | 31 + .../AcceptGroupInvitationCommandHandler.php | 37 + .../User/Group/JoinGroupCommandHandler.php | 48 + .../User/Group/QuitGroupCommandHandler.php | 67 + .../CreateMessageCommandHandler.php | 50 + .../CreateServiceRequestCommandHandler.php | 94 + .../ReadMessagesCommandHandler.php | 32 + .../TryAutoFinalizeCommandHandler.php | 37 + .../User/UpdateAddressCommandHandler.php | 50 + .../Admin/ParametersFormQueryHandler.php | 28 + .../Query/Group/GetGroupByIdQueryHandler.php | 30 + .../Query/Group/GetGroupMembersHandler.php | 28 + .../Query/Group/GetGroupsQueryHandler.php | 24 + .../Product/GetProductByIdQueryHandler.php | 40 + ...GetProductUnavailabilitiesQueryHandler.php | 31 + .../Security/GetUserByTokenQueryHandler.php | 41 + .../Security/ResetPasswordQueryHandler.php | 41 + .../GetLendingsQueryHandler.php | 28 + .../ServiceRequest/GetLoansQueryHandler.php | 28 + .../GetServiceRequestByIdQueryHandler.php | 41 + .../User/Account/GetUserQueryHandler.php | 24 + .../Query/User/GetUserObjectsQueryHandler.php | 32 + .../User/GetUserServicesQueryHandler.php | 32 + .../Query/User/UserAddressQueryHandler.php | 32 + src/Notifier/SmsNotifier.php | 58 + src/Notifier/SmsNotifierTrait.php | 30 + src/Payment/PayumManager.php | 90 + src/Repository/.gitignore | 0 src/Repository/AddressRepository.php | 27 + src/Repository/CategoryRepository.php | 89 + src/Repository/ConfigurationRepository.php | 61 + src/Repository/GroupOfferRepository.php | 35 + src/Repository/GroupRepository.php | 90 + src/Repository/MenuItemRepository.php | 94 + src/Repository/MenuRepository.php | 61 + src/Repository/MessageRepository.php | 69 + src/Repository/PageRepository.php | 33 + src/Repository/PaymentRepository.php | 32 + .../ProductAvailabilityRepository.php | 76 + src/Repository/ProductRepository.php | 137 + src/Repository/ServiceRequestRepository.php | 129 + src/Repository/UserGroupRepository.php | 104 + src/Repository/UserRepository.php | 108 + src/Search/Command/IndexProductsCommand.php | 111 + src/Search/Document/GeoDocument.php | 29 + src/Search/Document/ProductDocument.php | 136 + src/Search/Meilisearch.php | 320 + .../Subscriber/SearchResultSubscriber.php | 34 + src/Security/Checker/AuthorizationChecker.php | 45 + .../Checker/UserEmailConfirmedChecker.php | 30 + src/Security/Checker/UserEnabledChecker.php | 30 + .../EntryPoint/AuthenticationEntryPoint.php | 40 + .../Exception/AccountDisabledException.php | 20 + .../AccountEmailNotConfirmedException.php | 20 + src/Security/Voter/ProductVoter.php | 82 + .../ServiceRequest/ServiceRequestVoter.php | 53 + src/Serializer/ProductDocumentNormalizer.php | 53 + src/State/GroupGetStatsProvider.php | 29 + .../Processor/ProductSwitchProcessor.php | 35 + .../Security/CrudControllerSubscriber.php | 43 + src/Subscriber/SecuritySubscriber.php | 41 + ...rviceRequestAcceptTransitionSubscriber.php | 44 + ...equestAutoFinalizeTransitionSubscriber.php | 41 + ...viceRequestConfirmTransitionSubscriber.php | 44 + ...iceRequestFinalizeTransitionSubscriber.php | 49 + ...RequestModifyOwnerTransitionSubscriber.php | 44 + ...estModifyRecipientTransitionSubscriber.php | 44 + .../ServiceRequestAcceptedSubscriber.php | 61 + .../ServiceRequestConfirmedSubscriber.php | 59 + .../ServiceRequestFinishedSubscriber.php | 66 + ...erviceRequestModifiedByOwnerSubscriber.php | 67 + ...ceRequestModifiedByRecipientSubscriber.php | 66 + .../ServiceRequestRefusedSubscriber.php | 76 + src/Test/ContainerRepositoryTrait.php | 116 + src/Test/ContainerTrait.php | 68 + src/Test/KernelTrait.php | 80 + src/Translator/NoTranslator.php | 63 + src/Twig/CategoryExtension.php | 33 + src/Twig/Extension/EntityExtension.php | 34 + src/Twig/Extension/ResponseExtension.php | 24 + src/Twig/Extension/i18nExtension.php | 36 + src/Twig/FlysystemExtension.php | 58 + src/Twig/FlysystemImageInterface.php | 14 + src/Twig/FlysystemImagesInterface.php | 14 + src/Twig/ImageExtensionCollection.php | 27 + src/Twig/ImagesExtensionCollection.php | 27 + src/Twig/MenuExtension.php | 33 + src/Twig/ProductExtension.php | 28 + src/Twig/TwigExtension.php | 34 + src/Twig/UserExtension.php | 33 + .../Category/CategoryParentNotSelf.php | 18 + .../CategoryParentNotSelfValidator.php | 51 + src/Validator/Constraints/File.php | 18 + src/Validator/Constraints/FileValidator.php | 26 + .../Constraints/Group/GroupParentNotSelf.php | 18 + .../Group/GroupParentNotSelfValidator.php | 52 + .../MenuItem/MenuItemParentNotSelf.php | 18 + .../MenuItemParentNotSelfValidator.php | 51 + .../ProductAvailabilityNoOverlap.php | 18 + .../ProductAvailabilityNoOverlapValidator.php | 45 + src/Workflow/ServiceRequestStatusWorkflow.php | 183 + symfony.lock | 589 + templates/admin/dashboard.html.twig | 29 + templates/admin/dev/dev_tools.html.twig | 32 + templates/admin/group/invite.html.twig | 15 + .../admin/group/user_groups_field.html.twig | 7 + templates/admin/loan/product_field.html.twig | 14 + .../admin/loan/product_type_field.html.twig | 2 + templates/admin/loan/user_field.html.twig | 19 + templates/admin/parameters.html.twig | 56 + .../admin/poc/email_notification.html.twig | 17 + templates/admin/poc/geoloc.html.twig | 51 + templates/admin/poc/meilisearch.html.twig | 13 + .../admin/poc/sms_notification.html.twig | 19 + .../product/availability_product.html.twig | 69 + .../service_request/conversation.html.twig | 40 + .../TwigBundle/Exception/error.html.twig | 17 + templates/cms/page.html.twig | 26 + .../components/conversation/_action.html.twig | 44 + .../components/conversation/_avatar.html.twig | 15 + .../components/conversation/_badge.html.twig | 16 + .../conversation/_calendar.html.twig | 24 + .../components/conversation/_chat.html.twig | 29 + .../_modal-confirmation.html.twig | 88 + .../conversation/_modal-finalize.html.twig | 39 + .../conversation/_modal-refuse.html.twig | 38 + .../conversation/_product-info.html.twig | 25 + templates/components/footer/_links.html.twig | 36 + templates/components/footer/_logo.html.twig | 7 + .../footer/_social_network.html.twig | 12 + .../form/_address_form_theme.html.twig | 42 + .../form/_password_visibility.html.twig | 43 + .../components/form/_photo_preview.html.twig | 11 + templates/components/form/_select.html.twig | 5 + templates/components/group/_card.html.twig | 20 + .../components/group/_first_offer.html.twig | 19 + .../components/group/_list-content.html.twig | 26 + .../components/group/_member_card.html.twig | 36 + templates/components/group/_modal.html.twig | 54 + .../components/group/_modal_offers.html.twig | 49 + .../components/item/_conversation.html.twig | 39 + templates/components/item/_product.html.twig | 122 + .../components/layout/_back_to_link.html.twig | 13 + templates/components/layout/_footer.html.twig | 5 + .../layout/_multiple_searchbar.html.twig | 5 + templates/components/layout/_navbar.html.twig | 127 + .../components/layout/_pagination.html.twig | 5 + .../components/layout/_searchbar.html.twig | 22 + templates/components/layout/_text.html.twig | 5 + .../components/layout/_title_3.html.twig | 5 + .../components/layout/_title_5.html.twig | 5 + .../components/list/_conversations.html.twig | 15 + templates/components/list/_products.html.twig | 12 + .../components/product/_address.html.twig | 19 + .../product/_address_form.html.twig | 11 + .../components/product/_calendar.html.twig | 96 + templates/components/product/_card.html.twig | 54 + .../components/product/_carousel.html.twig | 26 + .../components/product/_images.html.twig | 11 + templates/components/product/_info.html.twig | 94 + .../components/product/_lender.html.twig | 38 + templates/components/product/_modal.html.twig | 44 + .../product/_object_fields.html.twig | 39 + .../components/product/_search.html.twig | 95 + .../components/product/_section.html.twig | 26 + .../product/_service_fields.html.twig | 28 + .../components/product/_tab_content.html.twig | 36 + .../product/_write_message.html.twig | 13 + .../product/service_request/_submit.html.twig | 3 + .../service_request/_visibility.html.twig | 7 + templates/components/utils/_badge.html.twig | 33 + .../components/utils/_notification.html.twig | 21 + templates/easy_admin/button/back.html.twig | 2 + .../crud/_edit_image_preview.html.twig | 14 + .../crud/_js_upload_size_validation.html.twig | 21 + .../easy_admin/crud/form_theme.html.twig | 77 + templates/easy_admin/field/boolean.html.twig | 7 + .../field/boolean_check_only.html.twig | 7 + .../field/flysystem_image.html.twig | 20 + .../field/flysystem_images.html.twig | 27 + templates/easy_admin/field/json.html.twig | 1 + .../easy_admin/field/user_email.html.twig | 1 + .../admin/group/group_invitation.html.twig | 19 + templates/email/admin/new/new_admin.html.twig | 10 + .../promote_to_admin.html.twig | 9 + .../user_group/admin_promotion.html.twig | 9 + .../user_group/main_admin_promotion.html.twig | 9 + .../email/command/end_membership.html.twig | 9 + .../notify_membership_expiration.html.twig | 9 + .../notify_service_request_end.html.twig | 9 + .../notify_service_request_start.html.twig | 9 + .../security/create_account_step1.html.twig | 22 + .../email/security/lost_password.html.twig | 15 + .../email/service_request/accepted.html.twig | 20 + .../email/service_request/confirmed.html.twig | 20 + .../service_request/message/new.html.twig | 19 + .../service_request/modified_by.html.twig | 24 + templates/email/service_request/new.html.twig | 17 + .../email/service_request/refused.html.twig | 18 + templates/index.html.twig | 24 + templates/layout/base.html.twig | 66 + templates/layout/connection.html.twig | 40 + .../pages/account/address/step1.html.twig | 35 + .../pages/account/address/step2.html.twig | 32 + .../pages/account/conversation.html.twig | 204 + templates/pages/account/index.html.twig | 199 + .../pages/account/lendings/list.html.twig | 30 + templates/pages/account/loans/list.html.twig | 29 + templates/pages/account/loans/new.html.twig | 63 + .../pages/account/product/list.html.twig | 75 + templates/pages/group/create.html.twig | 30 + templates/pages/group/list.html.twig | 36 + templates/pages/group/members.html.twig | 42 + templates/pages/group/show.html.twig | 61 + .../group/show/_logged_with_link.html.twig | 58 + .../group/show/_logged_without_link.html.twig | 30 + templates/pages/login.html.twig | 66 + templates/pages/password/lost.html.twig | 45 + templates/pages/password/reset.html.twig | 44 + templates/pages/product/edit_object.html.twig | 37 + .../pages/product/edit_service.html.twig | 41 + templates/pages/product/list.html.twig | 12 + templates/pages/product/new_object.html.twig | 37 + templates/pages/product/new_service.html.twig | 42 + .../product/product_availability.html.twig | 47 + templates/pages/product/show.html.twig | 28 + templates/pages/register/step1.html.twig | 50 + templates/pages/register/step2.html.twig | 70 + .../pages/user/account/change_login.html.twig | 29 + .../user/account/change_password.html.twig | 37 + .../pages/user/account/edit_profile.html.twig | 70 + .../pages/user/account/profile.html.twig | 64 + templates/pages/user/group/list.html.twig | 79 + tests/Api/ApiResource/GroupResourceTest.php | 37 + .../Processor/ProductSwitchProcessorTest.php | 89 + tests/E2E/Controller/AppControllerTest.php | 23 + tests/Fixtures/images/apes.png | Bin 0 -> 23977 bytes tests/Functional/ChoiceFormFieldTrait.php | 27 + .../Admin/AdministratorCrudControllerTest.php | 139 + .../CategoryObjectCrudControllerTest.php | 82 + .../CategoryServiceCrudControllerTest.php | 49 + .../DashboardControllerAsGroupAdminTest.php | 29 + .../Admin/DashboardControllerTest.php | 24 + .../Admin/Dev/DevToolsControllerTest.php | 25 + .../Admin/FooterCrudControllerTest.php | 39 + .../Admin/FooterItemCrudControllerTest.php | 107 + .../GroupCrudControllerAsGroupAdminTest.php | 33 + .../Admin/GroupCrudControllerTest.php | 121 + ...oupOfferCrudControllerAsGroupAdminTest.php | 36 + .../Admin/GroupOfferCrudControllerTest.php | 56 + .../Admin/MenuCrudControllerTest.php | 39 + .../Admin/MenuItemCrudControllerTest.php | 108 + .../Admin/ObjectCrudControllerTest.php | 88 + .../Admin/PageCrudControllerTest.php | 44 + .../Admin/ParametersControllerTest.php | 79 + .../Admin/PaymentCrudControllerTest.php | 33 + .../Admin/PlaceCrudControllerTest.php | 36 + .../Admin/ServiceCrudControllerTest.php | 55 + .../ServiceRequestCrudControllerTest.php | 58 + .../Admin/UserCrudControllerTest.php | 93 + ...serGroupCrudControllerAsGroupAdminTest.php | 36 + .../Admin/UserGroupCrudControllerTest.php | 65 + .../Controller/AppControllerTest.php | 52 + .../Controller/Cms/CmsControllerTest.php | 40 + .../Group/CreateGroupActionTest.php | 57 + .../Controller/Group/GroupControllerTest.php | 101 + .../Controller/Payment/PrepareActionTest.php | 64 + .../Product/ObjectControllerTest.php | 209 + .../ProductAvailabilityControllerTest.php | 58 + .../Product/ProductControllerTest.php | 80 + .../Product/ProductSearchControllerTest.php | 67 + .../Product/ServiceControllerTest.php | 134 + .../Security/AccountCreateActionStep1Test.php | 107 + .../AccountCreateActionStep2PlaceTest.php | 53 + ...untCreateActionStep2UserInvitationTest.php | 49 + .../AccountCreateActionStep2UserTest.php | 54 + .../Security/LostPasswordActionTest.php | 46 + .../Security/ResetPasswordActionTest.php | 58 + .../Security/SecurityControllerTest.php | 137 + .../User/Account/ChangeLoginActionTest.php | 53 + .../User/Account/ChangePasswordActionTest.php | 98 + .../Account/DeleteUserAvatarActionTest.php | 35 + .../User/Account/EditProfileActionTest.php | 108 + .../User/Account/ProfileActionTest.php | 48 + .../Controller/User/AddressControllerTest.php | 158 + .../UserGroupAcceptInvitationActionTest.php | 63 + .../User/Group/UserGroupControllerTest.php | 78 + .../Group/UserGroupQuitGroupActionTest.php | 62 + .../User/Product/DeleteProductActionTest.php | 66 + .../Product/DeleteProductPhotoActionTest.php | 67 + .../DeleteProductUnavailabilityActionTest.php | 47 + .../Product/DuplicateProductActionTest.php | 64 + .../ConversationControllerTest.php | 90 + .../ServiceRequest/MyLendingsActionTest.php | 40 + .../User/ServiceRequest/MyLoansActionTest.php | 40 + .../ServiceRequestControllerTest.php | 107 + ...atusWorkflowControllerAutoFinalizeTest.php | 38 + ...stStatusWorkflowControllerFinalizeTest.php | 46 + ...uestStatusWorkflowControllerRefuseTest.php | 62 + ...iceRequestStatusWorkflowControllerTest.php | 84 + ...ceRequestStatusWorkflowModifyOwnerTest.php | 72 + ...questStatusWorkflowModifyRecipientTest.php | 46 + .../User/UserProductsControllerTest.php | 65 + .../User/VacationModeActionTest.php | 32 + .../Command/EndMembershipCommandTest.php | 44 + .../NotifyMembershipExpirationCommandTest.php | 46 + .../NotifyServiceRequestDatesCommandTest.php | 48 + .../Processor/ValidationProcessorTest.php | 25 + .../Doctrine/Manager/ProductManagerTest.php | 30 + .../Integration/Doctrine/UserManagerTest.php | 39 + .../Flysystem/EasyAdminHelperTest.php | 33 + tests/Integration/Helper/FileUploaderTest.php | 37 + tests/Integration/Mailer/AppMailerTest.php | 21 + .../Payment/DoneCommandHandlerTest.php | 79 + .../AccountCreateStep2CommandHandlerTest.php | 36 + ...cceptGroupInvitationCommandHandlerTest.php | 32 + .../Group/JoinGroupCommandHandlerTest.php | 82 + .../Group/QuitGroupCommandHandlerTest.php | 45 + .../DuplicateProductCommandHandlerTest.php | 31 + .../User/UserAddressQueryHandlerTest.php | 37 + .../Integration/Notifier/SmsNotifierTest.php | 28 + .../Repository/AddressRepositoryTest.php | 27 + .../Repository/CategoryRepositoryTest.php | 49 + .../ConfigurationRepositoryTest.php | 49 + .../Repository/GroupOfferRepositoryTest.php | 26 + .../Repository/GroupRepositoryTest.php | 49 + .../Repository/MenuItemRepositoryTest.php | 39 + .../Repository/MenuRepositoryTest.php | 39 + .../Repository/MessageRepositoryTest.php | 42 + .../ProductAvailabilityRepositoryTest.php | 26 + .../Repository/ProductRepositoryTest.php | 72 + .../ServiceRequestRepositoryTest.php | 47 + .../Repository/UserGroupRepositoryTest.php | 30 + .../Repository/UserRepositoryTest.php | 53 + .../Command/IndexProductsCommandTest.php | 67 + tests/Integration/Search/MeilisearchTest.php | 28 + .../Checker/AuthorizationCheckerTest.php | 21 + .../Translator/NotranslatorTest.php | 22 + .../Twig/Extension/CategoryExtensionTest.php | 28 + .../Twig/Extension/EntityExtensionTest.php | 30 + .../Twig/Extension/FlysystemExtensionTest.php | 58 + .../Twig/Extension/I18nExtensionTest.php | 21 + .../Twig/Extension/MenuExtensionTest.php | 27 + .../Twig/Extension/ResponseExtensionTest.php | 20 + .../Twig/Extension/TwigExtensionTest.php | 20 + .../Twig/Extension/UserExtensionTest.php | 30 + .../ServiceRequestStatusWorkflowTest.php | 203 + tests/Mock/Geocoder/GeoProviderMock.php | 56 + tests/TestReference.php | 130 + .../Controller/Payment/DoneActionTest.php | 159 + .../Doctrine/Manager/ProductManagerTest.php | 58 + .../Unit/Doctrine/Manager/UserManagerTest.php | 50 + .../Dto/Admin/AbstractFormCommandTest.php | 17 + tests/Unit/Dto/Admin/DummyFormCommand.php | 22 + tests/Unit/Dto/Product/SearchTest.php | 34 + .../AccountCreateStep1CommandTest.php | 41 + tests/Unit/Entity/AddressTest.php | 32 + tests/Unit/Entity/CategoryTest.php | 21 + tests/Unit/Entity/ConfigurationTest.php | 19 + tests/Unit/Entity/DummyImage.php | 15 + tests/Unit/Entity/DummyImages.php | 15 + tests/Unit/Entity/GroupOfferTest.php | 20 + tests/Unit/Entity/GroupTest.php | 48 + tests/Unit/Entity/MenuItemTest.php | 30 + tests/Unit/Entity/MenuTest.php | 32 + tests/Unit/Entity/MessageTest.php | 77 + tests/Unit/Entity/PageTest.php | 20 + tests/Unit/Entity/PaymentTest.php | 51 + tests/Unit/Entity/ProductAvailibilityTest.php | 35 + tests/Unit/Entity/ProductTest.php | 131 + tests/Unit/Entity/ServiceRequestTest.php | 84 + tests/Unit/Entity/UserGroupTest.php | 46 + tests/Unit/Entity/UserTest.php | 63 + tests/Unit/Enum/Group/GroupMembershipTest.php | 17 + tests/Unit/Enum/Group/GroupOfferTypeTest.php | 17 + tests/Unit/Enum/Group/UserMembershipTest.php | 18 + .../ServiceRequestStatusTest.php | 30 + tests/Unit/Enum/User/UserTypeTest.php | 21 + tests/Unit/Geocoder/GeoProviderTest.php | 70 + tests/Unit/Helper/StringHelperTest.php | 19 + tests/Unit/Helper/VardumperHelperTest.php | 18 + tests/Unit/Notifier/SmsNotifierTest.php | 38 + .../Unit/Security/Voter/ProductVoterTest.php | 44 + .../ServiceRequestVoterTest.php | 38 + .../Subscriber/SecuritySubscriberTest.php | 17 + .../CategoryParentNotSelfValidatorTest.php | 54 + .../Constraints/FileValidatorTest.php | 38 + .../Group/GroupParentNotSelfValidatorTest.php | 54 + .../MenuItemParentNotSelfValidatorTest.php | 54 + ...ductAvailabilityNoOverlapValidatorTest.php | 49 + tests/bootstrap.php | 13 + translations/.gitignore | 0 translations/EasyAdminBundle.fr.xlf | 16 + translations/admin.en.xlf | 15 + translations/admin.fr.xlf | 358 + .../admin.fr.xlf | 25 + .../AbstractUserCrudController/admin.fr.xlf | 15 + .../GroupOfferCrudController/admin.fr.xlf | 44 + .../Admin/PaymentCrudController/admin.fr.xlf | 65 + .../UserGroupCrudController/admin.fr.xlf | 50 + .../Group/GroupController/messages.fr.xlf | 19 + .../Payment/DoneAction/messages.fr.xlf | 34 + .../AccountCreateController/messages.fr.xlf | 34 + .../Account/ChangeLoginAction/messages.fr.xlf | 14 + .../ChangePasswordAction/messages.fr.xlf | 14 + .../DeleteUserAvatarAction/messages.fr.xlf | 14 + .../Account/EditProfileAction/messages.fr.xlf | 14 + .../Group/UserGroupController/messages.fr.xlf | 24 + .../DeleteProductAction/messages.fr.xlf | 14 + .../messages.fr.xlf | 14 + .../DeleteProductPhotoAction/messages.fr.xlf | 15 + .../DuplicateProductAction/messages.fr.xlf | 14 + .../ConversationController/messages.fr.xlf | 14 + .../messages.fr.xlf | 69 + .../User/VacationModeAction/messages.fr.xlf | 14 + .../MessageManager/messages_system.fr.xlf | 69 + .../Manager/ProductManager/messages.fr.xlf | 15 + .../ServiceRequestManager/messages.fr.xlf | 19 + .../app/Entity/Product/validators.fr.xlf | 15 + .../app/Enum/Group/GroupType/messages.fr.xlf | 20 + .../Product/ObjectFormType/messages.fr.xlf | 15 + .../Product/SearchFormType/messages.fr.xlf | 50 + .../Product/ServiceFormType/messages.fr.xlf | 15 + .../GroupInvitationFormType/admin.fr.xlf | 21 + .../User/AddressStep2FormType/messages.fr.xlf | 15 + .../AddressStep2FormType/validators.fr.xlf | 15 + .../Group/GroupInvitationEmail/email.fr.xlf | 14 + .../UserGroup/AdminPromotion/email.fr.xlf | 14 + .../UserGroup/MainAdminPromotion/email.fr.xlf | 14 + .../Command/EndMembershipEmail/email.fr.xlf | 15 + .../NotifyMembershipExpiration/email.fr.xlf | 15 + .../NotifyServiceRequestEndEmail/email.fr.xlf | 15 + .../email.fr.xlf | 15 + .../CreateAccountStep1Email/email.fr.xlf | 19 + .../NewServiceRequest/email.fr.xlf | 15 + .../ServiceRequestAccepted/email.fr.xlf | 14 + .../ServiceRequestConfirmed/email.fr.xlf | 14 + .../ServiceRequestModifiedOwner/email.fr.xlf | 14 + .../email.fr.xlf | 14 + .../ServiceRequestRefused/email.fr.xlf | 14 + translations/category/admin.fr.xlf | 46 + translations/category/validators.fr.xlf | 16 + translations/group/admin.fr.xlf | 69 + translations/group/messages.fr.xlf | 24 + translations/group/validators.fr.xlf | 14 + translations/menu/admin.fr.xlf | 183 + translations/menu/validators.fr.xlf | 14 + translations/menuitem/validators.fr.xlf | 15 + translations/message/email.fr.xlf | 16 + translations/message/messages.fr.xlf | 26 + translations/page/admin.fr.xlf | 45 + translations/parameters/admin.fr.xlf | 85 + translations/product/admin.fr.xlf | 167 + translations/product/messages.fr.xlf | 221 + .../product_availability/messages.fr.xlf | 29 + translations/security.en.xlf | 16 + translations/security.fr.xlf | 22 + .../security/account_create/security.fr.xlf | 89 + .../security/account_create/validators.fr.xlf | 31 + translations/security/login/security.fr.xlf | 46 + .../security/lost_password/email.fr.xlf | 16 + .../security/lost_password/messages.fr.xlf | 21 + .../security/lost_password/security.fr.xlf | 41 + .../security/reset_password/messages.fr.xlf | 26 + .../security/reset_password/security.fr.xlf | 21 + translations/service_request/admin.fr.xlf | 113 + translations/service_request/messages.fr.xlf | 34 + .../service_request/validators.fr.xlf | 19 + translations/shared/date.fr.xlf | 19 + .../templates/admin/group/invite/admin.fr.xlf | 23 + .../form/photo_preview/messages.fr.xlf | 15 + .../components/item/product/messages.fr.xlf | 42 + .../components/layout/navbar/messages.fr.xlf | 31 + .../product/calendar/messages.fr.xlf | 46 + .../components/product/lender/messages.fr.xlf | 19 + .../product/object_fields/messages.fr.xlf | 19 + .../components/product/search/messages.fr.xlf | 45 + .../product/write_message/messages.fr.xlf | 14 + .../admin/group/group_invitation/email.fr.xlf | 34 + .../email/admin/new/new_admin/email.fr.xlf | 29 + .../email/admin/promote_to_admin/email.fr.xlf | 24 + .../user_group/admin_promotion/email.fr.xlf | 19 + .../main_admin_promotion/email.fr.xlf | 19 + .../email/command/end_membership/email.fr.xlf | 20 + .../notify_membership_expiration/email.fr.xlf | 20 + .../notify_service_request_end/email.fr.xlf | 20 + .../notify_service_request_start/email.fr.xlf | 20 + .../create_account_step1/email.fr.xlf | 39 + .../service_request/accepted/email.fr.xlf | 30 + .../service_request/confirmed/email.fr.xlf | 30 + .../service_request/modified_by/email.fr.xlf | 35 + .../service_request/refused/email.fr.xlf | 25 + .../templates/layout/base/messages.fr.xlf | 14 + .../account/conversation/messages.fr.xlf | 139 + .../pages/account/index/messages.fr.xlf | 91 + .../account/lendings/list/messages.fr.xlf | 29 + .../pages/account/loans/list/messages.fr.xlf | 34 + .../pages/account/loans/new/messages.fr.xlf | 18 + .../account/product/list/messages.fr.xlf | 78 + .../pages/group/create/messages.fr.xlf | 51 + .../pages/group/list/messages.fr.xlf | 35 + .../pages/group/members/messages.fr.xlf | 29 + .../pages/group/show/messages.fr.xlf | 139 + .../pages/group/user/messages.fr.xlf | 19 + .../templates/pages/page/messages.fr.xlf | 14 + .../pages/product/new_object/messages.fr.xlf | 14 + .../pages/product/new_service/messages.fr.xlf | 14 + .../product_availability/messages.fr.xlf | 34 + .../pages/product/show/messages.fr.xlf | 14 + .../pages/register/step2/security.fr.xlf | 19 + .../user/change_password/messages.fr.xlf | 40 + .../pages/user/edit_profile/messages.fr.xlf | 76 + .../pages/user/profile/messages.fr.xlf | 15 + .../twig/exception/error/messages.fr.xlf | 29 + .../templates/user/account/messages.fr.xlf | 30 + .../templates/user/group/list/messages.fr.xlf | 74 + translations/user/address/messages.fr.xlf | 93 + translations/user/admin.fr.xlf | 139 + .../user/change_login/messages.fr.xlf | 14 + .../user/conversation/messages.fr.xlf | 26 + translations/validators.fr.xlf | 22 + webpack.config.js | 76 + yarn.lock | 4800 ++++ 989 files changed, 74032 insertions(+), 662 deletions(-) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.test create mode 100644 .eslintrc.json create mode 100644 .gitattributes create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/cleanup.yml create mode 100644 .gitignore create mode 100644 .php-cs-fixer.dist.php create mode 100644 .trivyignore create mode 100644 Dockerfile create mode 100644 ERRORS.md create mode 100644 Makefile create mode 100644 assets/app.js create mode 100644 assets/controllers.json create mode 100644 assets/controllers/accordion_controller.js create mode 100644 assets/controllers/account_controller.js create mode 100644 assets/controllers/calendar_controller.js create mode 100644 assets/controllers/menu_controller.js create mode 100644 assets/controllers/product_controller.js create mode 100644 assets/controllers/productupload_controller.js create mode 100644 assets/controllers/productvisibility_controller.js create mode 100644 assets/controllers/read-more_controller.js create mode 100644 assets/controllers/search_controller.js create mode 100644 assets/controllers/tooltips_controller.js create mode 100644 assets/stimulus.js create mode 100644 assets/styles/_accordion.scss create mode 100644 assets/styles/_address.scss create mode 100644 assets/styles/_calendar.scss create mode 100644 assets/styles/_card.scss create mode 100644 assets/styles/_chat.scss create mode 100644 assets/styles/_connexion.scss create mode 100644 assets/styles/_conversations.scss create mode 100644 assets/styles/_custom-variables.scss create mode 100644 assets/styles/_grid.scss create mode 100644 assets/styles/_group.scss create mode 100644 assets/styles/_headings.scss create mode 100644 assets/styles/_lender.scss create mode 100644 assets/styles/_my-account.scss create mode 100644 assets/styles/_pagination.scss create mode 100644 assets/styles/_product-list.scss create mode 100644 assets/styles/_product.scss create mode 100644 assets/styles/_reset.scss create mode 100644 assets/styles/_upload.scss create mode 100644 assets/styles/_utilities.scss create mode 100644 assets/styles/global.scss create mode 100755 bin/console create mode 100755 bin/phpunit create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 composer.md create mode 100644 config/bundles.php create mode 100644 config/packages/api_platform.yaml create mode 100644 config/packages/bazinga_geocoder.yaml create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/debug.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/flysystem.yaml create mode 100644 config/packages/fos_ckeditor.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/hautelook_alice.yaml create mode 100644 config/packages/http_discovery.yaml create mode 100644 config/packages/knp_paginator.yaml create mode 100644 config/packages/mailer.yaml create mode 100644 config/packages/meilisearch.yaml create mode 100644 config/packages/mercure.yaml create mode 100644 config/packages/messenger.yaml create mode 100644 config/packages/misd_phone_number.yaml create mode 100644 config/packages/mollie.yaml create mode 100644 config/packages/monolog.yaml create mode 100644 config/packages/nelmio_alice.yaml create mode 100644 config/packages/nelmio_cors.yaml create mode 100644 config/packages/notifier.yaml create mode 100644 config/packages/nyholm_psr7.yaml create mode 100644 config/packages/payum.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/security.yaml create mode 100644 config/packages/sensio_framework_extra.yaml create mode 100644 config/packages/snc_redis.yaml create mode 100644 config/packages/stof_doctrine_extensions.yaml create mode 100644 config/packages/translation.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/uid.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/packages/web_profiler.yaml create mode 100644 config/packages/webpack_encore.yaml create mode 100644 config/packages/workflow.yaml create mode 100644 config/packages_extra/doctrine.yaml create mode 100644 config/packages_extra/flysystem.yaml create mode 100644 config/packages_extra/mailer.yaml create mode 100644 config/packages_extra/uuid.yaml create mode 100644 config/preload.php create mode 100644 config/routes.yaml create mode 100644 config/routes/annotations.yaml create mode 100644 config/routes/api_platform.yaml create mode 100644 config/routes/framework.yaml create mode 100644 config/routes/ux_autocomplete.yaml create mode 100644 config/routes/web_profiler.yaml create mode 100644 config/services.yaml create mode 100644 docker-compose.override.yml create mode 100644 docker-compose.override.yml.dist create mode 100644 docker-compose.prod.yml create mode 100644 docker-compose.yml create mode 100644 docker/caddy/Caddyfile create mode 100644 docker/php/conf.d/app.dev.ini create mode 100644 docker/php/conf.d/app.ini create mode 100644 docker/php/conf.d/app.prod.ini create mode 100755 docker/php/docker-entrypoint.sh create mode 100644 docker/php/docker-healthcheck.sh create mode 100644 docker/php/php-fpm.d/zz-docker.conf create mode 100644 docs/README.md create mode 100644 docs/architecture.md create mode 100644 docs/composer.md create mode 100644 docs/configuration.md create mode 100644 docs/crons.md create mode 100644 docs/database.md create mode 100644 docs/front-api-calls.md create mode 100644 docs/geoloc.md create mode 100644 docs/images/apache2-default-page.png create mode 100644 docs/images/archi.png create mode 100644 docs/images/base-color.png create mode 100644 docs/images/mcd.png create mode 100755 docs/images/service_request_status_workflow.png create mode 100644 docs/images/updated-color.png create mode 100644 docs/install.md create mode 100644 docs/symfony.md create mode 100644 docs/theme.md create mode 100644 docs/uploads.md create mode 100644 fixtures/.gitignore create mode 120000 fixtures/dev create mode 120000 fixtures/prod create mode 100644 fixtures/prod-boot/category.yaml create mode 100644 fixtures/prod-boot/configuration.yaml create mode 100644 fixtures/prod-boot/menu.yaml create mode 100644 fixtures/prod-boot/page.yaml create mode 100644 fixtures/prod-boot/user.yaml create mode 100644 fixtures/test/address.yaml create mode 100644 fixtures/test/category.yaml create mode 100644 fixtures/test/configuration.yaml create mode 100644 fixtures/test/group.yaml create mode 100644 fixtures/test/group_offer.yaml create mode 100644 fixtures/test/menu.yaml create mode 100644 fixtures/test/menu_item.yaml create mode 100644 fixtures/test/messages.yaml create mode 100644 fixtures/test/page.yaml create mode 100644 fixtures/test/payment.yaml create mode 100644 fixtures/test/product.yaml create mode 100644 fixtures/test/product_availability.yaml create mode 100644 fixtures/test/service_request.yaml create mode 100644 fixtures/test/user.yaml create mode 100644 fixtures/test/user_group.yaml create mode 100644 helm/chart/.gitignore create mode 100644 helm/chart/.helmignore create mode 100644 helm/chart/Chart.lock create mode 100644 helm/chart/Chart.yaml create mode 100644 helm/chart/README.md create mode 100644 helm/chart/templates/NOTES.txt create mode 100644 helm/chart/templates/_helpers.tpl create mode 100644 helm/chart/templates/configmap.yaml create mode 100644 helm/chart/templates/cronjobs/cronjobEndMembership.yaml create mode 100644 helm/chart/templates/cronjobs/cronjobNotifyMembershipExpiration1.yaml create mode 100644 helm/chart/templates/cronjobs/cronjobNotifyMembershipExpiration7.yaml create mode 100644 helm/chart/templates/cronjobs/cronjobNotifyServiceRequestDatesEnd.yaml create mode 100644 helm/chart/templates/cronjobs/cronjobNotifyServiceRequestDatesStart.yaml create mode 100644 helm/chart/templates/deployment.yaml create mode 100644 helm/chart/templates/fixtures-job.yaml create mode 100644 helm/chart/templates/hpa.yaml create mode 100644 helm/chart/templates/ingress.yaml create mode 100644 helm/chart/templates/secrets.yaml create mode 100644 helm/chart/templates/service.yaml create mode 100644 helm/chart/templates/serviceaccount.yaml create mode 100644 helm/chart/templates/tests/test-connection.yaml create mode 100755 helm/chart/test_minikube.sh create mode 100644 helm/chart/values-minikube.yml create mode 100644 helm/chart/values-prod.yml create mode 100644 helm/chart/values.yaml create mode 100644 migrations/.gitignore create mode 100755 migrations/2023/Version20230103090224.php create mode 100644 package.json create mode 100644 phpstan.neon create mode 100644 phpunit.xml.dist create mode 100644 public/.gitignore create mode 100644 public/apes.png create mode 100644 public/ckeditor.css create mode 100644 public/index.php create mode 100644 public/svg/article.svg create mode 100644 public/svg/chat.svg create mode 100644 public/svg/funding.png create mode 100644 public/svg/logo-black.svg create mode 100644 public/svg/logo.svg create mode 100644 public/svg/placeholder.svg create mode 100644 public/svg/product.svg create mode 100644 rector.php create mode 100644 src/ApiResource/.gitignore create mode 100644 src/ApiResource/GroupResource.php create mode 100644 src/Command/CommandTrait.php create mode 100644 src/Command/EndMembershipCommand.php create mode 100644 src/Command/NotifyMembershipExpirationCommand.php create mode 100644 src/Command/NotifyServiceRequestDatesCommand.php create mode 100644 src/Controller/.gitignore create mode 100644 src/Controller/Admin/AbstractCategoryCrudController.php create mode 100644 src/Controller/Admin/AbstractMenuCrudController.php create mode 100644 src/Controller/Admin/AbstractMenuItemCrudController.php create mode 100755 src/Controller/Admin/AbstractProductCrudController.php create mode 100755 src/Controller/Admin/AbstractUserCrudController.php create mode 100644 src/Controller/Admin/AdminSecuredCrudControllerInterface.php create mode 100755 src/Controller/Admin/AdministratorCrudController.php create mode 100644 src/Controller/Admin/CategoryObjectCrudController.php create mode 100644 src/Controller/Admin/CategoryServiceCrudController.php create mode 100755 src/Controller/Admin/DashboardController.php create mode 100755 src/Controller/Admin/Dev/DevToolsController.php create mode 100644 src/Controller/Admin/FooterCrudController.php create mode 100644 src/Controller/Admin/GroupAdminSecuredCrudControllerInterface.php create mode 100755 src/Controller/Admin/GroupCrudController.php create mode 100755 src/Controller/Admin/GroupOfferCrudController.php create mode 100644 src/Controller/Admin/MenuCrudController.php create mode 100644 src/Controller/Admin/MenuItemCrudController.php create mode 100644 src/Controller/Admin/MenuItemFooterCrudController.php create mode 100644 src/Controller/Admin/MenuItemLinkCrudController.php create mode 100644 src/Controller/Admin/MenuItemMenuSocialNetwordFooterCrudController.php create mode 100644 src/Controller/Admin/MenuItemSocialNetworkCrudController.php create mode 100644 src/Controller/Admin/NewMenuFooterLinkController.php create mode 100644 src/Controller/Admin/ObjectCrudController.php create mode 100755 src/Controller/Admin/PageCrudController.php create mode 100755 src/Controller/Admin/ParametersController.php create mode 100755 src/Controller/Admin/PaymentCrudController.php create mode 100755 src/Controller/Admin/PlaceCrudController.php create mode 100644 src/Controller/Admin/ServiceCrudController.php create mode 100755 src/Controller/Admin/ServiceRequestCrudController.php create mode 100755 src/Controller/Admin/UserCrudController.php create mode 100755 src/Controller/Admin/UserGroupCrudController.php create mode 100644 src/Controller/AppController.php create mode 100644 src/Controller/Cms/CmsController.php create mode 100644 src/Controller/FlashTrait.php create mode 100644 src/Controller/Group/CreateGroupAction.php create mode 100644 src/Controller/Group/GroupController.php create mode 100644 src/Controller/Group/GroupTrait.php create mode 100644 src/Controller/Menu/MenuController.php create mode 100644 src/Controller/PaginationTrait.php create mode 100755 src/Controller/Payment/DoneAction.php create mode 100644 src/Controller/Payment/GroupOfferTrait.php create mode 100755 src/Controller/Payment/PrepareAction.php create mode 100644 src/Controller/Product/ProductController.php create mode 100644 src/Controller/RequestTrait.php create mode 100644 src/Controller/Security/AccountCreateController.php create mode 100644 src/Controller/Security/LostPasswordAction.php create mode 100644 src/Controller/Security/ResetPasswordAction.php create mode 100644 src/Controller/Security/SecurityController.php create mode 100644 src/Controller/SecurityTrait.php create mode 100644 src/Controller/User/Account/ChangeLoginAction.php create mode 100644 src/Controller/User/Account/ChangePasswordAction.php create mode 100644 src/Controller/User/Account/DeleteUserAvatarAction.php create mode 100644 src/Controller/User/Account/EditProfileAction.php create mode 100644 src/Controller/User/Account/ProfileAction.php create mode 100644 src/Controller/User/AddressController.php create mode 100644 src/Controller/User/Group/UserGroupController.php create mode 100644 src/Controller/User/MyAccountAction.php create mode 100644 src/Controller/User/Product/DeleteProductAction.php create mode 100644 src/Controller/User/Product/DeleteProductPhotoAction.php create mode 100644 src/Controller/User/Product/DeleteProductUnavailabilityAction.php create mode 100644 src/Controller/User/Product/DuplicateProductAction.php create mode 100644 src/Controller/User/Product/ObjectController.php create mode 100644 src/Controller/User/Product/ProductAvailabilityController.php create mode 100644 src/Controller/User/Product/ProductTrait.php create mode 100644 src/Controller/User/Product/ServiceController.php create mode 100644 src/Controller/User/Product/UserProductsController.php create mode 100644 src/Controller/User/ServiceRequest/ConversationController.php create mode 100644 src/Controller/User/ServiceRequest/MyLendingsAction.php create mode 100644 src/Controller/User/ServiceRequest/MyLoansAction.php create mode 100644 src/Controller/User/ServiceRequest/ServiceRequestController.php create mode 100644 src/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowController.php create mode 100644 src/Controller/User/ServiceRequest/ServiceRequestTrait.php create mode 100644 src/Controller/User/VacationModeAction.php create mode 100644 src/Controller/i18nTrait.php create mode 100644 src/DataFixtures/Processor/ValidationProcessor.php create mode 100644 src/DependencyInjection/LocalesCompilerPass.php create mode 100644 src/Doctrine/Behavior/TimestampableEntity.php create mode 100644 src/Doctrine/Listener/ProductListener.php create mode 100644 src/Doctrine/Listener/UserListener.php create mode 100644 src/Doctrine/Manager/MessageManager.php create mode 100644 src/Doctrine/Manager/ProductAvailabilityManager.php create mode 100644 src/Doctrine/Manager/ProductManager.php create mode 100644 src/Doctrine/Manager/ServiceRequestManager.php create mode 100644 src/Doctrine/Manager/UserManager.php create mode 100644 src/Dto/Product/Search.php create mode 100644 src/Dto/User/UserAddressStep1Data.php create mode 100644 src/EasyAdmin/Field/FieldTrait.php create mode 100644 src/EasyAdmin/Filter/EnumFilter.php create mode 100644 src/EasyAdmin/Filter/User/GroupFilter.php create mode 100644 src/EasyAdmin/Filter/User/MyUsersFilter.php create mode 100644 src/EasyAdmin/Filter/UserGroup/MyGroupFilter.php create mode 100644 src/EasyAdmin/Filter/UuidFilter.php create mode 100644 src/EasyAdmin/Form/Type/GroupMembershipType.php create mode 100644 src/EasyAdmin/Form/Type/GroupOfferTypeType.php create mode 100644 src/EasyAdmin/Form/Type/GroupType.php create mode 100644 src/EasyAdmin/Form/Type/GroupTypeType.php create mode 100644 src/EasyAdmin/Form/Type/LoanStatusType.php create mode 100644 src/EasyAdmin/Form/Type/ProductStatusType.php create mode 100644 src/EasyAdmin/Form/Type/ProductVisibilityType.php create mode 100644 src/EasyAdmin/Form/Type/SocialMediaTypeType.php create mode 100644 src/EasyAdmin/Form/Type/UserMembershipType.php create mode 100644 src/EasyAdmin/Form/Type/UserType.php create mode 100644 src/Entity/.gitignore create mode 100644 src/Entity/Address.php create mode 100644 src/Entity/Category.php create mode 100644 src/Entity/Configuration.php create mode 100755 src/Entity/Group.php create mode 100644 src/Entity/GroupOffer.php create mode 100644 src/Entity/ImageInterface.php create mode 100644 src/Entity/ImagesInterface.php create mode 100644 src/Entity/Menu.php create mode 100644 src/Entity/MenuItem.php create mode 100644 src/Entity/Message.php create mode 100644 src/Entity/Page.php create mode 100644 src/Entity/Payment.php create mode 100644 src/Entity/PaymentToken.php create mode 100644 src/Entity/Product.php create mode 100644 src/Entity/ProductAvailability.php create mode 100644 src/Entity/ProductObjectTrait.php create mode 100644 src/Entity/ProductServiceTrait.php create mode 100644 src/Entity/ServiceRequest.php create mode 100755 src/Entity/User.php create mode 100644 src/Entity/UserConfirmationTrait.php create mode 100644 src/Entity/UserGroup.php create mode 100644 src/Entity/UserLostPasswordTrait.php create mode 100644 src/Enum/AsArrayTrait.php create mode 100644 src/Enum/ConfigurationType.php create mode 100644 src/Enum/Group/GroupMembership.php create mode 100644 src/Enum/Group/GroupOfferType.php create mode 100644 src/Enum/Group/GroupType.php create mode 100644 src/Enum/Group/UserMembership.php create mode 100644 src/Enum/Menu/LinkType.php create mode 100644 src/Enum/Message/MessageType.php create mode 100644 src/Enum/Payment/PaymentMethod.php create mode 100644 src/Enum/Product/ProductAvailabilityMode.php create mode 100644 src/Enum/Product/ProductAvailabilityType.php create mode 100644 src/Enum/Product/ProductStatus.php create mode 100644 src/Enum/Product/ProductType.php create mode 100644 src/Enum/Product/ProductVisibility.php create mode 100644 src/Enum/ServiceRequest/ServiceRequestStatus.php create mode 100644 src/Enum/ServiceRequest/ServiceRequestStatusTransition.php create mode 100644 src/Enum/SocialMediaType.php create mode 100755 src/Enum/User/UserType.php create mode 100644 src/Exception/Group/GroupNotFoundException.php create mode 100644 src/Exception/Product/ProductNotFoundException.php create mode 100644 src/Exception/ServiceRequest/ServiceRequestNotFoundException.php create mode 100644 src/Exception/UserConfirmationTokenExpiredException.php create mode 100644 src/Exception/UserLostPasswordTokenExpiredException.php create mode 100644 src/Exception/UserNotFoundException.php create mode 100644 src/Faker/Provider/UuidProvider.php create mode 100644 src/Flysystem/EasyAdminHelper.php create mode 100644 src/Flysystem/MediaManager.php create mode 100755 src/Form/Type/Admin/ParametersFormType.php create mode 100644 src/Form/Type/Group/CreateGroupFormType.php create mode 100644 src/Form/Type/Product/AbstractProductCategorySelectFormType.php create mode 100644 src/Form/Type/Product/AbstractProductFormType.php create mode 100644 src/Form/Type/Product/CreateProductAvailabilityType.php create mode 100644 src/Form/Type/Product/GroupSelectFormType.php create mode 100644 src/Form/Type/Product/ObjectCategorySelectFormType.php create mode 100644 src/Form/Type/Product/ObjectFormType.php create mode 100644 src/Form/Type/Product/SearchFormType.php create mode 100644 src/Form/Type/Product/ServiceCategorySelectFormType.php create mode 100644 src/Form/Type/Product/ServiceFormType.php create mode 100755 src/Form/Type/Security/AccountCreateStep1FormType.php create mode 100755 src/Form/Type/Security/AccountCreateStep2FormType.php create mode 100755 src/Form/Type/Security/GroupInvitationFormType.php create mode 100644 src/Form/Type/Security/LostPasswordFormType.php create mode 100644 src/Form/Type/Security/ResetPasswordFormType.php create mode 100644 src/Form/Type/ServiceRequest/AbstractUserProductSelectFormType.php create mode 100755 src/Form/Type/ServiceRequest/CreateServiceRequestType.php create mode 100755 src/Form/Type/ServiceRequest/ModifyServiceRequestType.php create mode 100644 src/Form/Type/ServiceRequest/UserLendingProductSelectFormType.php create mode 100644 src/Form/Type/ServiceRequest/UserLoansProductSelectFormType.php create mode 100755 src/Form/Type/User/AddressStep1FormType.php create mode 100755 src/Form/Type/User/AddressStep2FormType.php create mode 100644 src/Form/Type/User/ChangeLoginFormType.php create mode 100644 src/Form/Type/User/ChangePasswordFormType.php create mode 100644 src/Form/Type/User/EditProfileFormType.php create mode 100755 src/Form/Type/User/ServiceRequest/NewMessageType.php create mode 100644 src/Geocoder/Adapter/NominatimToAddressAdapter.php create mode 100644 src/Geocoder/GeoProvider.php create mode 100644 src/Geocoder/GeoProviderInterface.php create mode 100644 src/Helper/CsvExporter.php create mode 100644 src/Helper/FileUploader.php create mode 100644 src/Helper/StringHelper.php create mode 100644 src/Helper/VarDumperHelper.php create mode 100644 src/Kernel.php create mode 100644 src/Mailer/AppMailer.php create mode 100644 src/Mailer/Email/Admin/Group/GroupInvitationEmail.php create mode 100644 src/Mailer/Email/Admin/New/NewAdminEmail.php create mode 100644 src/Mailer/Email/Admin/PromoteToAdmin/PromoteToAdminEmail.php create mode 100644 src/Mailer/Email/Admin/UserGroup/AdminPromotionEmail.php create mode 100644 src/Mailer/Email/Admin/UserGroup/MainAdminPromotionEmail.php create mode 100644 src/Mailer/Email/Command/EndMembershipEmail.php create mode 100644 src/Mailer/Email/Command/NotifyMembershipExpirationEmail.php create mode 100644 src/Mailer/Email/Command/NotifyServiceRequestEndEmail.php create mode 100644 src/Mailer/Email/Command/NotifyServiceRequestStartEmail.php create mode 100644 src/Mailer/Email/EmailInterface.php create mode 100644 src/Mailer/Email/EmailTrait.php create mode 100644 src/Mailer/Email/Security/CreateAccountStep1Email.php create mode 100644 src/Mailer/Email/Security/LostPasswordEmail.php create mode 100644 src/Mailer/Email/ServiceRequest/NewMessageEmail.php create mode 100644 src/Mailer/Email/ServiceRequest/NewServiceRequest.php create mode 100644 src/Mailer/Email/ServiceRequest/ServiceRequestAccepted.php create mode 100644 src/Mailer/Email/ServiceRequest/ServiceRequestConfirmed.php create mode 100644 src/Mailer/Email/ServiceRequest/ServiceRequestModifiedByOwner.php create mode 100644 src/Mailer/Email/ServiceRequest/ServiceRequestModifiedByRecipient.php create mode 100644 src/Mailer/Email/ServiceRequest/ServiceRequestRefused.php create mode 100644 src/Mailer/EmailCollection.php create mode 100644 src/Message/Command/Admin/AbstractFormCommand.php create mode 100755 src/Message/Command/Admin/ParametersFormCommand.php create mode 100755 src/Message/Command/Group/CreateGroupInvitationMessage.php create mode 100644 src/Message/Command/Payment/DoneCommand.php create mode 100755 src/Message/Command/Security/AccountCreateStep1Command.php create mode 100755 src/Message/Command/Security/AccountCreateStep2Command.php create mode 100755 src/Message/Command/Security/AccountCreateStep2RefreshCommand.php create mode 100644 src/Message/Command/Security/LostPasswordCommand.php create mode 100644 src/Message/Command/Security/ResetPasswordCommand.php create mode 100644 src/Message/Command/User/ChangeLoginCommand.php create mode 100644 src/Message/Command/User/ChangeVacationModeCommand.php create mode 100644 src/Message/Command/User/Group/AcceptGroupInvitationCommand.php create mode 100644 src/Message/Command/User/Group/JoinGroupCommand.php create mode 100644 src/Message/Command/User/Group/QuitGroupCommand.php create mode 100644 src/Message/Command/User/Product/CreateProductUnavailabilityCommand.php create mode 100644 src/Message/Command/User/Product/DuplicateProductCommand.php create mode 100644 src/Message/Command/User/ServiceRequest/CreateMessageCommand.php create mode 100644 src/Message/Command/User/ServiceRequest/CreateServiceRequestCommand.php create mode 100644 src/Message/Command/User/ServiceRequest/ReadMessagesCommand.php create mode 100644 src/Message/Command/User/ServiceRequest/TryAutoFinalizeCommand.php create mode 100644 src/Message/Command/User/UpdateAddressCommand.php create mode 100644 src/Message/Query/Admin/ParametersFormQuery.php create mode 100644 src/Message/Query/Admin/Poc/PocGeolocQuery.php create mode 100644 src/Message/Query/Admin/User/UserAddressQuery.php create mode 100644 src/Message/Query/Group/GetGroupByIdQuery.php create mode 100644 src/Message/Query/Group/GetGroupMembersQuery.php create mode 100644 src/Message/Query/Group/GetGroupsQuery.php create mode 100644 src/Message/Query/Product/GetProductByIdQuery.php create mode 100644 src/Message/Query/Product/GetProductUnavailabilitiesQuery.php create mode 100644 src/Message/Query/Security/GetUserByTokenQuery.php create mode 100644 src/Message/Query/Security/ResetPasswordQuery.php create mode 100644 src/Message/Query/User/Account/GetUserQuery.php create mode 100644 src/Message/Query/User/GetUserObjectsQuery.php create mode 100644 src/Message/Query/User/GetUserServicesQuery.php create mode 100644 src/Message/Query/User/ServiceRequest/GetLendingsQuery.php create mode 100644 src/Message/Query/User/ServiceRequest/GetLoansQuery.php create mode 100644 src/Message/Query/User/ServiceRequest/GetServiceRequestByIdQuery.php create mode 100644 src/MessageBus/CommandBus.php create mode 100644 src/MessageBus/CommandBusInterface.php create mode 100644 src/MessageBus/QueryBus.php create mode 100644 src/MessageBus/QueryBusInterface.php create mode 100644 src/MessageHandler/Command/Admin/ParametersFormCommandHandler.php create mode 100644 src/MessageHandler/Command/Payment/DoneCommandHandler.php create mode 100644 src/MessageHandler/Command/Product/CreateGroupInvitationMessageHandler.php create mode 100644 src/MessageHandler/Command/Product/CreateProductAvailabilityHandler.php create mode 100644 src/MessageHandler/Command/Product/DuplicateProductCommandHandler.php create mode 100644 src/MessageHandler/Command/Security/AccountCreateStep1CommandHandler.php create mode 100644 src/MessageHandler/Command/Security/AccountCreateStep2CommandHandler.php create mode 100644 src/MessageHandler/Command/Security/AccountCreateStep2RefreshCommandHandler.php create mode 100644 src/MessageHandler/Command/Security/LostPasswordCommandHandler.php create mode 100644 src/MessageHandler/Command/Security/ResetPasswordCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ChangeLoginCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ChangeVacationModeCommandHandler.php create mode 100644 src/MessageHandler/Command/User/Group/AcceptGroupInvitationCommandHandler.php create mode 100644 src/MessageHandler/Command/User/Group/JoinGroupCommandHandler.php create mode 100644 src/MessageHandler/Command/User/Group/QuitGroupCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ServiceRequest/CreateMessageCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ServiceRequest/CreateServiceRequestCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ServiceRequest/ReadMessagesCommandHandler.php create mode 100644 src/MessageHandler/Command/User/ServiceRequest/TryAutoFinalizeCommandHandler.php create mode 100644 src/MessageHandler/Command/User/UpdateAddressCommandHandler.php create mode 100644 src/MessageHandler/Query/Admin/ParametersFormQueryHandler.php create mode 100644 src/MessageHandler/Query/Group/GetGroupByIdQueryHandler.php create mode 100644 src/MessageHandler/Query/Group/GetGroupMembersHandler.php create mode 100644 src/MessageHandler/Query/Group/GetGroupsQueryHandler.php create mode 100644 src/MessageHandler/Query/Product/GetProductByIdQueryHandler.php create mode 100644 src/MessageHandler/Query/Product/GetProductUnavailabilitiesQueryHandler.php create mode 100644 src/MessageHandler/Query/Security/GetUserByTokenQueryHandler.php create mode 100644 src/MessageHandler/Query/Security/ResetPasswordQueryHandler.php create mode 100644 src/MessageHandler/Query/ServiceRequest/GetLendingsQueryHandler.php create mode 100644 src/MessageHandler/Query/ServiceRequest/GetLoansQueryHandler.php create mode 100644 src/MessageHandler/Query/ServiceRequest/GetServiceRequestByIdQueryHandler.php create mode 100644 src/MessageHandler/Query/User/Account/GetUserQueryHandler.php create mode 100644 src/MessageHandler/Query/User/GetUserObjectsQueryHandler.php create mode 100644 src/MessageHandler/Query/User/GetUserServicesQueryHandler.php create mode 100644 src/MessageHandler/Query/User/UserAddressQueryHandler.php create mode 100644 src/Notifier/SmsNotifier.php create mode 100644 src/Notifier/SmsNotifierTrait.php create mode 100644 src/Payment/PayumManager.php create mode 100644 src/Repository/.gitignore create mode 100644 src/Repository/AddressRepository.php create mode 100644 src/Repository/CategoryRepository.php create mode 100644 src/Repository/ConfigurationRepository.php create mode 100644 src/Repository/GroupOfferRepository.php create mode 100644 src/Repository/GroupRepository.php create mode 100644 src/Repository/MenuItemRepository.php create mode 100644 src/Repository/MenuRepository.php create mode 100644 src/Repository/MessageRepository.php create mode 100644 src/Repository/PageRepository.php create mode 100644 src/Repository/PaymentRepository.php create mode 100644 src/Repository/ProductAvailabilityRepository.php create mode 100644 src/Repository/ProductRepository.php create mode 100644 src/Repository/ServiceRequestRepository.php create mode 100644 src/Repository/UserGroupRepository.php create mode 100644 src/Repository/UserRepository.php create mode 100644 src/Search/Command/IndexProductsCommand.php create mode 100644 src/Search/Document/GeoDocument.php create mode 100644 src/Search/Document/ProductDocument.php create mode 100755 src/Search/Meilisearch.php create mode 100644 src/Search/Subscriber/SearchResultSubscriber.php create mode 100644 src/Security/Checker/AuthorizationChecker.php create mode 100644 src/Security/Checker/UserEmailConfirmedChecker.php create mode 100644 src/Security/Checker/UserEnabledChecker.php create mode 100644 src/Security/EntryPoint/AuthenticationEntryPoint.php create mode 100644 src/Security/Exception/AccountDisabledException.php create mode 100644 src/Security/Exception/AccountEmailNotConfirmedException.php create mode 100644 src/Security/Voter/ProductVoter.php create mode 100644 src/Security/Voter/ServiceRequest/ServiceRequestVoter.php create mode 100644 src/Serializer/ProductDocumentNormalizer.php create mode 100644 src/State/GroupGetStatsProvider.php create mode 100644 src/State/Processor/ProductSwitchProcessor.php create mode 100644 src/Subscriber/Security/CrudControllerSubscriber.php create mode 100644 src/Subscriber/SecuritySubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestAcceptTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestAutoFinalizeTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestConfirmTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestFinalizeTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestModifyOwnerTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/Guard/ServiceRequestModifyRecipientTransitionSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestAcceptedSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestConfirmedSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestFinishedSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestModifiedByOwnerSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestModifiedByRecipientSubscriber.php create mode 100644 src/Subscriber/Workflow/ServiceRequestRefusedSubscriber.php create mode 100755 src/Test/ContainerRepositoryTrait.php create mode 100644 src/Test/ContainerTrait.php create mode 100644 src/Test/KernelTrait.php create mode 100644 src/Translator/NoTranslator.php create mode 100755 src/Twig/CategoryExtension.php create mode 100644 src/Twig/Extension/EntityExtension.php create mode 100644 src/Twig/Extension/ResponseExtension.php create mode 100644 src/Twig/Extension/i18nExtension.php create mode 100644 src/Twig/FlysystemExtension.php create mode 100644 src/Twig/FlysystemImageInterface.php create mode 100644 src/Twig/FlysystemImagesInterface.php create mode 100644 src/Twig/ImageExtensionCollection.php create mode 100644 src/Twig/ImagesExtensionCollection.php create mode 100644 src/Twig/MenuExtension.php create mode 100755 src/Twig/ProductExtension.php create mode 100644 src/Twig/TwigExtension.php create mode 100644 src/Twig/UserExtension.php create mode 100644 src/Validator/Constraints/Category/CategoryParentNotSelf.php create mode 100644 src/Validator/Constraints/Category/CategoryParentNotSelfValidator.php create mode 100755 src/Validator/Constraints/File.php create mode 100755 src/Validator/Constraints/FileValidator.php create mode 100644 src/Validator/Constraints/Group/GroupParentNotSelf.php create mode 100644 src/Validator/Constraints/Group/GroupParentNotSelfValidator.php create mode 100644 src/Validator/Constraints/MenuItem/MenuItemParentNotSelf.php create mode 100644 src/Validator/Constraints/MenuItem/MenuItemParentNotSelfValidator.php create mode 100644 src/Validator/Constraints/ServiceRequest/ProductAvailabilityNoOverlap.php create mode 100644 src/Validator/Constraints/ServiceRequest/ProductAvailabilityNoOverlapValidator.php create mode 100644 src/Workflow/ServiceRequestStatusWorkflow.php create mode 100644 symfony.lock create mode 100644 templates/admin/dashboard.html.twig create mode 100644 templates/admin/dev/dev_tools.html.twig create mode 100644 templates/admin/group/invite.html.twig create mode 100644 templates/admin/group/user_groups_field.html.twig create mode 100644 templates/admin/loan/product_field.html.twig create mode 100644 templates/admin/loan/product_type_field.html.twig create mode 100644 templates/admin/loan/user_field.html.twig create mode 100644 templates/admin/parameters.html.twig create mode 100644 templates/admin/poc/email_notification.html.twig create mode 100644 templates/admin/poc/geoloc.html.twig create mode 100644 templates/admin/poc/meilisearch.html.twig create mode 100644 templates/admin/poc/sms_notification.html.twig create mode 100644 templates/admin/product/availability_product.html.twig create mode 100644 templates/admin/service_request/conversation.html.twig create mode 100644 templates/bundles/TwigBundle/Exception/error.html.twig create mode 100644 templates/cms/page.html.twig create mode 100644 templates/components/conversation/_action.html.twig create mode 100644 templates/components/conversation/_avatar.html.twig create mode 100644 templates/components/conversation/_badge.html.twig create mode 100644 templates/components/conversation/_calendar.html.twig create mode 100644 templates/components/conversation/_chat.html.twig create mode 100644 templates/components/conversation/_modal-confirmation.html.twig create mode 100644 templates/components/conversation/_modal-finalize.html.twig create mode 100644 templates/components/conversation/_modal-refuse.html.twig create mode 100644 templates/components/conversation/_product-info.html.twig create mode 100644 templates/components/footer/_links.html.twig create mode 100644 templates/components/footer/_logo.html.twig create mode 100644 templates/components/footer/_social_network.html.twig create mode 100644 templates/components/form/_address_form_theme.html.twig create mode 100644 templates/components/form/_password_visibility.html.twig create mode 100644 templates/components/form/_photo_preview.html.twig create mode 100644 templates/components/form/_select.html.twig create mode 100644 templates/components/group/_card.html.twig create mode 100644 templates/components/group/_first_offer.html.twig create mode 100644 templates/components/group/_list-content.html.twig create mode 100644 templates/components/group/_member_card.html.twig create mode 100644 templates/components/group/_modal.html.twig create mode 100644 templates/components/group/_modal_offers.html.twig create mode 100644 templates/components/item/_conversation.html.twig create mode 100644 templates/components/item/_product.html.twig create mode 100644 templates/components/layout/_back_to_link.html.twig create mode 100644 templates/components/layout/_footer.html.twig create mode 100644 templates/components/layout/_multiple_searchbar.html.twig create mode 100644 templates/components/layout/_navbar.html.twig create mode 100644 templates/components/layout/_pagination.html.twig create mode 100644 templates/components/layout/_searchbar.html.twig create mode 100644 templates/components/layout/_text.html.twig create mode 100644 templates/components/layout/_title_3.html.twig create mode 100644 templates/components/layout/_title_5.html.twig create mode 100644 templates/components/list/_conversations.html.twig create mode 100644 templates/components/list/_products.html.twig create mode 100644 templates/components/product/_address.html.twig create mode 100644 templates/components/product/_address_form.html.twig create mode 100644 templates/components/product/_calendar.html.twig create mode 100644 templates/components/product/_card.html.twig create mode 100644 templates/components/product/_carousel.html.twig create mode 100644 templates/components/product/_images.html.twig create mode 100644 templates/components/product/_info.html.twig create mode 100644 templates/components/product/_lender.html.twig create mode 100644 templates/components/product/_modal.html.twig create mode 100644 templates/components/product/_object_fields.html.twig create mode 100644 templates/components/product/_search.html.twig create mode 100644 templates/components/product/_section.html.twig create mode 100644 templates/components/product/_service_fields.html.twig create mode 100644 templates/components/product/_tab_content.html.twig create mode 100644 templates/components/product/_write_message.html.twig create mode 100644 templates/components/product/service_request/_submit.html.twig create mode 100644 templates/components/product/service_request/_visibility.html.twig create mode 100644 templates/components/utils/_badge.html.twig create mode 100644 templates/components/utils/_notification.html.twig create mode 100644 templates/easy_admin/button/back.html.twig create mode 100644 templates/easy_admin/crud/_edit_image_preview.html.twig create mode 100644 templates/easy_admin/crud/_js_upload_size_validation.html.twig create mode 100755 templates/easy_admin/crud/form_theme.html.twig create mode 100644 templates/easy_admin/field/boolean.html.twig create mode 100644 templates/easy_admin/field/boolean_check_only.html.twig create mode 100644 templates/easy_admin/field/flysystem_image.html.twig create mode 100644 templates/easy_admin/field/flysystem_images.html.twig create mode 100644 templates/easy_admin/field/json.html.twig create mode 100644 templates/easy_admin/field/user_email.html.twig create mode 100644 templates/email/admin/group/group_invitation.html.twig create mode 100644 templates/email/admin/new/new_admin.html.twig create mode 100644 templates/email/admin/promote_to_admin/promote_to_admin.html.twig create mode 100644 templates/email/admin/user_group/admin_promotion.html.twig create mode 100644 templates/email/admin/user_group/main_admin_promotion.html.twig create mode 100644 templates/email/command/end_membership.html.twig create mode 100644 templates/email/command/notify_membership_expiration.html.twig create mode 100644 templates/email/command/notify_service_request_end.html.twig create mode 100644 templates/email/command/notify_service_request_start.html.twig create mode 100644 templates/email/security/create_account_step1.html.twig create mode 100644 templates/email/security/lost_password.html.twig create mode 100644 templates/email/service_request/accepted.html.twig create mode 100644 templates/email/service_request/confirmed.html.twig create mode 100644 templates/email/service_request/message/new.html.twig create mode 100644 templates/email/service_request/modified_by.html.twig create mode 100644 templates/email/service_request/new.html.twig create mode 100644 templates/email/service_request/refused.html.twig create mode 100644 templates/index.html.twig create mode 100644 templates/layout/base.html.twig create mode 100644 templates/layout/connection.html.twig create mode 100644 templates/pages/account/address/step1.html.twig create mode 100644 templates/pages/account/address/step2.html.twig create mode 100644 templates/pages/account/conversation.html.twig create mode 100644 templates/pages/account/index.html.twig create mode 100644 templates/pages/account/lendings/list.html.twig create mode 100644 templates/pages/account/loans/list.html.twig create mode 100644 templates/pages/account/loans/new.html.twig create mode 100644 templates/pages/account/product/list.html.twig create mode 100644 templates/pages/group/create.html.twig create mode 100644 templates/pages/group/list.html.twig create mode 100644 templates/pages/group/members.html.twig create mode 100644 templates/pages/group/show.html.twig create mode 100644 templates/pages/group/show/_logged_with_link.html.twig create mode 100644 templates/pages/group/show/_logged_without_link.html.twig create mode 100644 templates/pages/login.html.twig create mode 100644 templates/pages/password/lost.html.twig create mode 100644 templates/pages/password/reset.html.twig create mode 100644 templates/pages/product/edit_object.html.twig create mode 100644 templates/pages/product/edit_service.html.twig create mode 100644 templates/pages/product/list.html.twig create mode 100644 templates/pages/product/new_object.html.twig create mode 100644 templates/pages/product/new_service.html.twig create mode 100644 templates/pages/product/product_availability.html.twig create mode 100644 templates/pages/product/show.html.twig create mode 100644 templates/pages/register/step1.html.twig create mode 100644 templates/pages/register/step2.html.twig create mode 100644 templates/pages/user/account/change_login.html.twig create mode 100644 templates/pages/user/account/change_password.html.twig create mode 100644 templates/pages/user/account/edit_profile.html.twig create mode 100644 templates/pages/user/account/profile.html.twig create mode 100644 templates/pages/user/group/list.html.twig create mode 100644 tests/Api/ApiResource/GroupResourceTest.php create mode 100644 tests/Api/State/Processor/ProductSwitchProcessorTest.php create mode 100644 tests/E2E/Controller/AppControllerTest.php create mode 100644 tests/Fixtures/images/apes.png create mode 100644 tests/Functional/ChoiceFormFieldTrait.php create mode 100644 tests/Functional/Controller/Admin/AdministratorCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/CategoryObjectCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/CategoryServiceCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/DashboardControllerAsGroupAdminTest.php create mode 100644 tests/Functional/Controller/Admin/DashboardControllerTest.php create mode 100644 tests/Functional/Controller/Admin/Dev/DevToolsControllerTest.php create mode 100644 tests/Functional/Controller/Admin/FooterCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/FooterItemCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/GroupCrudControllerAsGroupAdminTest.php create mode 100644 tests/Functional/Controller/Admin/GroupCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/GroupOfferCrudControllerAsGroupAdminTest.php create mode 100644 tests/Functional/Controller/Admin/GroupOfferCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/MenuCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/MenuItemCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/ObjectCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/PageCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/ParametersControllerTest.php create mode 100644 tests/Functional/Controller/Admin/PaymentCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/PlaceCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/ServiceCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/ServiceRequestCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/UserCrudControllerTest.php create mode 100644 tests/Functional/Controller/Admin/UserGroupCrudControllerAsGroupAdminTest.php create mode 100644 tests/Functional/Controller/Admin/UserGroupCrudControllerTest.php create mode 100644 tests/Functional/Controller/AppControllerTest.php create mode 100644 tests/Functional/Controller/Cms/CmsControllerTest.php create mode 100644 tests/Functional/Controller/Group/CreateGroupActionTest.php create mode 100644 tests/Functional/Controller/Group/GroupControllerTest.php create mode 100644 tests/Functional/Controller/Payment/PrepareActionTest.php create mode 100644 tests/Functional/Controller/Product/ObjectControllerTest.php create mode 100644 tests/Functional/Controller/Product/ProductAvailabilityControllerTest.php create mode 100644 tests/Functional/Controller/Product/ProductControllerTest.php create mode 100644 tests/Functional/Controller/Product/ProductSearchControllerTest.php create mode 100644 tests/Functional/Controller/Product/ServiceControllerTest.php create mode 100644 tests/Functional/Controller/Security/AccountCreateActionStep1Test.php create mode 100644 tests/Functional/Controller/Security/AccountCreateActionStep2PlaceTest.php create mode 100644 tests/Functional/Controller/Security/AccountCreateActionStep2UserInvitationTest.php create mode 100644 tests/Functional/Controller/Security/AccountCreateActionStep2UserTest.php create mode 100644 tests/Functional/Controller/Security/LostPasswordActionTest.php create mode 100644 tests/Functional/Controller/Security/ResetPasswordActionTest.php create mode 100644 tests/Functional/Controller/Security/SecurityControllerTest.php create mode 100644 tests/Functional/Controller/User/Account/ChangeLoginActionTest.php create mode 100644 tests/Functional/Controller/User/Account/ChangePasswordActionTest.php create mode 100644 tests/Functional/Controller/User/Account/DeleteUserAvatarActionTest.php create mode 100644 tests/Functional/Controller/User/Account/EditProfileActionTest.php create mode 100644 tests/Functional/Controller/User/Account/ProfileActionTest.php create mode 100644 tests/Functional/Controller/User/AddressControllerTest.php create mode 100644 tests/Functional/Controller/User/Group/UserGroupAcceptInvitationActionTest.php create mode 100644 tests/Functional/Controller/User/Group/UserGroupControllerTest.php create mode 100644 tests/Functional/Controller/User/Group/UserGroupQuitGroupActionTest.php create mode 100644 tests/Functional/Controller/User/Product/DeleteProductActionTest.php create mode 100644 tests/Functional/Controller/User/Product/DeleteProductPhotoActionTest.php create mode 100644 tests/Functional/Controller/User/Product/DeleteProductUnavailabilityActionTest.php create mode 100644 tests/Functional/Controller/User/Product/DuplicateProductActionTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ConversationControllerTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/MyLendingsActionTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/MyLoansActionTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestControllerTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowControllerAutoFinalizeTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowControllerFinalizeTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowControllerRefuseTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowControllerTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowModifyOwnerTest.php create mode 100644 tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowModifyRecipientTest.php create mode 100644 tests/Functional/Controller/User/UserProductsControllerTest.php create mode 100644 tests/Functional/Controller/User/VacationModeActionTest.php create mode 100644 tests/Integration/Command/EndMembershipCommandTest.php create mode 100644 tests/Integration/Command/NotifyMembershipExpirationCommandTest.php create mode 100644 tests/Integration/Command/NotifyServiceRequestDatesCommandTest.php create mode 100644 tests/Integration/DataFixtures/Processor/ValidationProcessorTest.php create mode 100644 tests/Integration/Doctrine/Manager/ProductManagerTest.php create mode 100644 tests/Integration/Doctrine/UserManagerTest.php create mode 100644 tests/Integration/Flysystem/EasyAdminHelperTest.php create mode 100644 tests/Integration/Helper/FileUploaderTest.php create mode 100644 tests/Integration/Mailer/AppMailerTest.php create mode 100644 tests/Integration/MessageHandler/Payment/DoneCommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/Security/AccountCreateStep2CommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/User/Group/AcceptGroupInvitationCommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/User/Group/JoinGroupCommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/User/Group/QuitGroupCommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/User/Product/DuplicateProductCommandHandlerTest.php create mode 100644 tests/Integration/MessageHandler/User/UserAddressQueryHandlerTest.php create mode 100644 tests/Integration/Notifier/SmsNotifierTest.php create mode 100644 tests/Integration/Repository/AddressRepositoryTest.php create mode 100644 tests/Integration/Repository/CategoryRepositoryTest.php create mode 100644 tests/Integration/Repository/ConfigurationRepositoryTest.php create mode 100644 tests/Integration/Repository/GroupOfferRepositoryTest.php create mode 100644 tests/Integration/Repository/GroupRepositoryTest.php create mode 100644 tests/Integration/Repository/MenuItemRepositoryTest.php create mode 100644 tests/Integration/Repository/MenuRepositoryTest.php create mode 100644 tests/Integration/Repository/MessageRepositoryTest.php create mode 100644 tests/Integration/Repository/ProductAvailabilityRepositoryTest.php create mode 100644 tests/Integration/Repository/ProductRepositoryTest.php create mode 100644 tests/Integration/Repository/ServiceRequestRepositoryTest.php create mode 100644 tests/Integration/Repository/UserGroupRepositoryTest.php create mode 100644 tests/Integration/Repository/UserRepositoryTest.php create mode 100644 tests/Integration/Search/Command/IndexProductsCommandTest.php create mode 100644 tests/Integration/Search/MeilisearchTest.php create mode 100644 tests/Integration/Security/Checker/AuthorizationCheckerTest.php create mode 100644 tests/Integration/Translator/NotranslatorTest.php create mode 100644 tests/Integration/Twig/Extension/CategoryExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/EntityExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/FlysystemExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/I18nExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/MenuExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/ResponseExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/TwigExtensionTest.php create mode 100644 tests/Integration/Twig/Extension/UserExtensionTest.php create mode 100644 tests/Integration/Workflow/ServiceRequestStatusWorkflowTest.php create mode 100644 tests/Mock/Geocoder/GeoProviderMock.php create mode 100644 tests/TestReference.php create mode 100644 tests/Unit/Controller/Payment/DoneActionTest.php create mode 100644 tests/Unit/Doctrine/Manager/ProductManagerTest.php create mode 100644 tests/Unit/Doctrine/Manager/UserManagerTest.php create mode 100644 tests/Unit/Dto/Admin/AbstractFormCommandTest.php create mode 100644 tests/Unit/Dto/Admin/DummyFormCommand.php create mode 100644 tests/Unit/Dto/Product/SearchTest.php create mode 100644 tests/Unit/Dto/Security/AccountCreateStep1CommandTest.php create mode 100644 tests/Unit/Entity/AddressTest.php create mode 100644 tests/Unit/Entity/CategoryTest.php create mode 100644 tests/Unit/Entity/ConfigurationTest.php create mode 100644 tests/Unit/Entity/DummyImage.php create mode 100644 tests/Unit/Entity/DummyImages.php create mode 100644 tests/Unit/Entity/GroupOfferTest.php create mode 100644 tests/Unit/Entity/GroupTest.php create mode 100644 tests/Unit/Entity/MenuItemTest.php create mode 100644 tests/Unit/Entity/MenuTest.php create mode 100644 tests/Unit/Entity/MessageTest.php create mode 100644 tests/Unit/Entity/PageTest.php create mode 100644 tests/Unit/Entity/PaymentTest.php create mode 100644 tests/Unit/Entity/ProductAvailibilityTest.php create mode 100644 tests/Unit/Entity/ProductTest.php create mode 100644 tests/Unit/Entity/ServiceRequestTest.php create mode 100644 tests/Unit/Entity/UserGroupTest.php create mode 100644 tests/Unit/Entity/UserTest.php create mode 100644 tests/Unit/Enum/Group/GroupMembershipTest.php create mode 100644 tests/Unit/Enum/Group/GroupOfferTypeTest.php create mode 100644 tests/Unit/Enum/Group/UserMembershipTest.php create mode 100644 tests/Unit/Enum/ServiceRequest/ServiceRequestStatusTest.php create mode 100644 tests/Unit/Enum/User/UserTypeTest.php create mode 100644 tests/Unit/Geocoder/GeoProviderTest.php create mode 100644 tests/Unit/Helper/StringHelperTest.php create mode 100644 tests/Unit/Helper/VardumperHelperTest.php create mode 100644 tests/Unit/Notifier/SmsNotifierTest.php create mode 100644 tests/Unit/Security/Voter/ProductVoterTest.php create mode 100644 tests/Unit/Security/Voter/ServiceRequest/ServiceRequestVoterTest.php create mode 100644 tests/Unit/Subscriber/SecuritySubscriberTest.php create mode 100644 tests/Unit/Validator/Constraints/Category/CategoryParentNotSelfValidatorTest.php create mode 100644 tests/Unit/Validator/Constraints/FileValidatorTest.php create mode 100644 tests/Unit/Validator/Constraints/Group/GroupParentNotSelfValidatorTest.php create mode 100644 tests/Unit/Validator/Constraints/MenuItem/MenuItemParentNotSelfValidatorTest.php create mode 100644 tests/Unit/Validator/Constraints/ServiceRequest/ProductAvailabilityNoOverlapValidatorTest.php create mode 100644 tests/bootstrap.php create mode 100644 translations/.gitignore create mode 100644 translations/EasyAdminBundle.fr.xlf create mode 100644 translations/admin.en.xlf create mode 100644 translations/admin.fr.xlf create mode 100644 translations/app/Controller/Admin/AbstractCategoryCrudController/admin.fr.xlf create mode 100644 translations/app/Controller/Admin/AbstractUserCrudController/admin.fr.xlf create mode 100644 translations/app/Controller/Admin/GroupOfferCrudController/admin.fr.xlf create mode 100644 translations/app/Controller/Admin/PaymentCrudController/admin.fr.xlf create mode 100644 translations/app/Controller/Admin/UserGroupCrudController/admin.fr.xlf create mode 100644 translations/app/Controller/Group/GroupController/messages.fr.xlf create mode 100644 translations/app/Controller/Payment/DoneAction/messages.fr.xlf create mode 100644 translations/app/Controller/Security/AccountCreateController/messages.fr.xlf create mode 100644 translations/app/Controller/User/Account/ChangeLoginAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Account/ChangePasswordAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Account/DeleteUserAvatarAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Account/EditProfileAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Group/UserGroupController/messages.fr.xlf create mode 100644 translations/app/Controller/User/Product/DeleteProductAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Product/DeleteProductAvailabilityAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Product/DeleteProductPhotoAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/Product/DuplicateProductAction/messages.fr.xlf create mode 100644 translations/app/Controller/User/ServiceRequest/ConversationController/messages.fr.xlf create mode 100644 translations/app/Controller/User/ServiceRequest/ServiceRequestWorkflowController/messages.fr.xlf create mode 100644 translations/app/Controller/User/VacationModeAction/messages.fr.xlf create mode 100644 translations/app/Doctrine/Manager/MessageManager/messages_system.fr.xlf create mode 100644 translations/app/Doctrine/Manager/ProductManager/messages.fr.xlf create mode 100644 translations/app/Doctrine/Manager/ServiceRequestManager/messages.fr.xlf create mode 100644 translations/app/Entity/Product/validators.fr.xlf create mode 100644 translations/app/Enum/Group/GroupType/messages.fr.xlf create mode 100644 translations/app/Form/Type/Product/ObjectFormType/messages.fr.xlf create mode 100644 translations/app/Form/Type/Product/SearchFormType/messages.fr.xlf create mode 100644 translations/app/Form/Type/Product/ServiceFormType/messages.fr.xlf create mode 100644 translations/app/Form/Type/Security/GroupInvitationFormType/admin.fr.xlf create mode 100644 translations/app/Form/Type/User/AddressStep2FormType/messages.fr.xlf create mode 100644 translations/app/Form/Type/User/AddressStep2FormType/validators.fr.xlf create mode 100644 translations/app/Mailer/Email/Admin/Group/GroupInvitationEmail/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Admin/UserGroup/AdminPromotion/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Admin/UserGroup/MainAdminPromotion/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Command/EndMembershipEmail/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Command/NotifyMembershipExpiration/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Command/NotifyServiceRequestEndEmail/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Command/NotifyServiceRequestStartEmail/email.fr.xlf create mode 100644 translations/app/Mailer/Email/Security/CreateAccountStep1Email/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/NewServiceRequest/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/ServiceRequestAccepted/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/ServiceRequestConfirmed/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/ServiceRequestModifiedOwner/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/ServiceRequestModifiedRecipient/email.fr.xlf create mode 100644 translations/app/Mailer/Email/ServiceRequest/ServiceRequestRefused/email.fr.xlf create mode 100644 translations/category/admin.fr.xlf create mode 100644 translations/category/validators.fr.xlf create mode 100644 translations/group/admin.fr.xlf create mode 100644 translations/group/messages.fr.xlf create mode 100644 translations/group/validators.fr.xlf create mode 100644 translations/menu/admin.fr.xlf create mode 100644 translations/menu/validators.fr.xlf create mode 100644 translations/menuitem/validators.fr.xlf create mode 100644 translations/message/email.fr.xlf create mode 100644 translations/message/messages.fr.xlf create mode 100644 translations/page/admin.fr.xlf create mode 100644 translations/parameters/admin.fr.xlf create mode 100644 translations/product/admin.fr.xlf create mode 100644 translations/product/messages.fr.xlf create mode 100644 translations/product/product_availability/messages.fr.xlf create mode 100644 translations/security.en.xlf create mode 100644 translations/security.fr.xlf create mode 100644 translations/security/account_create/security.fr.xlf create mode 100644 translations/security/account_create/validators.fr.xlf create mode 100644 translations/security/login/security.fr.xlf create mode 100644 translations/security/lost_password/email.fr.xlf create mode 100644 translations/security/lost_password/messages.fr.xlf create mode 100644 translations/security/lost_password/security.fr.xlf create mode 100644 translations/security/reset_password/messages.fr.xlf create mode 100644 translations/security/reset_password/security.fr.xlf create mode 100644 translations/service_request/admin.fr.xlf create mode 100644 translations/service_request/messages.fr.xlf create mode 100644 translations/service_request/validators.fr.xlf create mode 100644 translations/shared/date.fr.xlf create mode 100644 translations/templates/admin/group/invite/admin.fr.xlf create mode 100644 translations/templates/components/form/photo_preview/messages.fr.xlf create mode 100644 translations/templates/components/item/product/messages.fr.xlf create mode 100644 translations/templates/components/layout/navbar/messages.fr.xlf create mode 100644 translations/templates/components/product/calendar/messages.fr.xlf create mode 100644 translations/templates/components/product/lender/messages.fr.xlf create mode 100644 translations/templates/components/product/object_fields/messages.fr.xlf create mode 100644 translations/templates/components/product/search/messages.fr.xlf create mode 100644 translations/templates/components/product/write_message/messages.fr.xlf create mode 100644 translations/templates/email/admin/group/group_invitation/email.fr.xlf create mode 100644 translations/templates/email/admin/new/new_admin/email.fr.xlf create mode 100644 translations/templates/email/admin/promote_to_admin/email.fr.xlf create mode 100644 translations/templates/email/admin/user_group/admin_promotion/email.fr.xlf create mode 100644 translations/templates/email/admin/user_group/main_admin_promotion/email.fr.xlf create mode 100644 translations/templates/email/command/end_membership/email.fr.xlf create mode 100644 translations/templates/email/command/notify_membership_expiration/email.fr.xlf create mode 100644 translations/templates/email/command/notify_service_request_end/email.fr.xlf create mode 100644 translations/templates/email/command/notify_service_request_start/email.fr.xlf create mode 100644 translations/templates/email/security/create_account_step1/email.fr.xlf create mode 100644 translations/templates/email/service_request/accepted/email.fr.xlf create mode 100644 translations/templates/email/service_request/confirmed/email.fr.xlf create mode 100644 translations/templates/email/service_request/modified_by/email.fr.xlf create mode 100644 translations/templates/email/service_request/refused/email.fr.xlf create mode 100644 translations/templates/layout/base/messages.fr.xlf create mode 100644 translations/templates/pages/account/conversation/messages.fr.xlf create mode 100644 translations/templates/pages/account/index/messages.fr.xlf create mode 100644 translations/templates/pages/account/lendings/list/messages.fr.xlf create mode 100644 translations/templates/pages/account/loans/list/messages.fr.xlf create mode 100644 translations/templates/pages/account/loans/new/messages.fr.xlf create mode 100644 translations/templates/pages/account/product/list/messages.fr.xlf create mode 100644 translations/templates/pages/group/create/messages.fr.xlf create mode 100644 translations/templates/pages/group/list/messages.fr.xlf create mode 100644 translations/templates/pages/group/members/messages.fr.xlf create mode 100644 translations/templates/pages/group/show/messages.fr.xlf create mode 100644 translations/templates/pages/group/user/messages.fr.xlf create mode 100644 translations/templates/pages/page/messages.fr.xlf create mode 100644 translations/templates/pages/product/new_object/messages.fr.xlf create mode 100644 translations/templates/pages/product/new_service/messages.fr.xlf create mode 100644 translations/templates/pages/product/product_availability/messages.fr.xlf create mode 100644 translations/templates/pages/product/show/messages.fr.xlf create mode 100644 translations/templates/pages/register/step2/security.fr.xlf create mode 100644 translations/templates/pages/user/change_password/messages.fr.xlf create mode 100644 translations/templates/pages/user/edit_profile/messages.fr.xlf create mode 100644 translations/templates/pages/user/profile/messages.fr.xlf create mode 100644 translations/templates/twig/exception/error/messages.fr.xlf create mode 100644 translations/templates/user/account/messages.fr.xlf create mode 100644 translations/templates/user/group/list/messages.fr.xlf create mode 100644 translations/user/address/messages.fr.xlf create mode 100644 translations/user/admin.fr.xlf create mode 100644 translations/user/change_login/messages.fr.xlf create mode 100644 translations/user/conversation/messages.fr.xlf create mode 100644 translations/validators.fr.xlf create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9cdac0b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,34 @@ +**/*.log +**/*.md +**/*.php~ +**/*.dist.php +**/*.dist +**/*.cache +**/._* +**/.dockerignore +**/.DS_Store +**/.git/ +**/.gitattributes +**/.gitignore +**/.gitmodules +**/docker-compose.*.yaml +**/docker-compose.*.yml +**/docker-compose.yaml +**/docker-compose.yml +**/Dockerfile +**/Thumbs.db +.github/ +docs/ +helm/ +Makefile +node_modules/ +public/build/ +public/bundles/ +tests/ +var/ +vendor/ +.editorconfig +.env.*.local +.env.local +.env.local.php +.env.test diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3ac9219 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,72 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +# Change these settings to your own preference +indent_style = space +indent_size = 4 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{js,html,ts,tsx}] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[*.php] +indent_style = space +indent_size = 4 + +[*.sh] +indent_style = tab +indent_size = 4 + +[*.xml{,.dist}] +indent_style = space +indent_size = 4 + +[*.{yaml,yml}] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = false + +[.github/workflows/*.yml] +indent_style = space +indent_size = 2 + +[.gitmodules] +indent_style = tab +indent_size = 4 + +[.php_cs{,.dist}] +indent_style = space +indent_size = 4 + +[.travis.yml] +indent_style = space +indent_size = 2 + +[composer.json] +indent_style = space +indent_size = 4 + +[docker-compose{,.*}.{yaml,yml}] +indent_style = space +indent_size = 2 + +[Dockerfile] +indent_style = tab +indent_size = 4 diff --git a/.env b/.env new file mode 100644 index 0000000..abc5c9b --- /dev/null +++ b/.env @@ -0,0 +1,108 @@ +# 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_DEBUG=1 +APP_SECRET=fd8e6e32f64b1dddcfe849f88de35019 +###< 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%/var/data.db" +# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4" +DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8" +###< doctrine/doctrine-bundle ### + +###> nelmio/cors-bundle ### +CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' +###< nelmio/cors-bundle ### + +###> symfony/messenger ### +# Choose one of the transports below +MESSENGER_TRANSPORT_DSN=doctrine://default +# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages +# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages +###< symfony/messenger ### + +###> symfony/mercure-bundle ### +# See https://symfony.com/doc/current/mercure.html#configuration +# The URL of the Mercure hub, used by the app to publish updates (can be a local URL) +MERCURE_URL=https://example.com/.well-known/mercure +# The public URL of the Mercure hub, used by the browser to connect +MERCURE_PUBLIC_URL=https://example.com/.well-known/mercure +# The secret used to sign the JWTs +MERCURE_JWT_SECRET="!ChangeThisMercureHubJWTSecretKey!" +###< symfony/mercure-bundle ### + +###> symfony/mailer ### +MAILER_DSN=null://null +# MAILER_DSN=smtp://mailer:1025 +# MAILER_DSN=null://null +###< symfony/mailer ### + +###> symfony/google-mailer ### +# Gmail SHOULD NOT be used on production, use it in development only. +# It can be used with an application password, see https://support.google.com/accounts/answer/185833?visit_id=638042796580302159-1820620508&p=InvalidSecondFactor&rd=1 +# MAILER_DSN=gmail://USERNAME:PASSWORD@default +###< symfony/google-mailer ### + +###> symfony/twilio-notifier ### +# SMS_DSN=twilio://SID:TOKEN@default?from=FROM +###< symfony/twilio-notifier ### + +###> symfony/ovh-cloud-notifier ### +# SMS_DSN=ovhcloud://APPLICATION_KEY:APPLICATION_SECRET@default?consumer_key=CONSUMER_KEY&service_name=SERVICE_NAME +###< symfony/ovh-cloud-notifier ### + +###> symfony/notifier ### +# This is main the DNS that is used by the notifier component +# the other below are just example for two different third party vendors +#SMS_DSN=twilio://SID:TOKEN@default?from=FROM +SMS_DSN=null://null +###< symfony/notifier ### + +###> symfony/fake-sms-notifier ### +FAKE_SMS_DSN=fakesms+email://mailer?to=admin&from=PlateformCoop +###< symfony/fake-sms-notifier ### + +###> snc/redis-bundle ### +# passwords that contain special characters (@, %, :, +) must be urlencoded +REDIS_URL=redis://redis +###< snc/redis-bundle ### + +###> meilisearch/meilisearch-symfony ### +MEILISEARCH_URL=http://meilisearch:7700 +MEILISEARCH_API_KEY=ms +###< meilisearch/meilisearch-symfony ### + +###> payum/payum-bundle ### +# @see https://my.mollie.com/dashboard/org_XXXXXXXX/developers/api-keys +# even it's a fake key it must start with 'test_' or 'live_' and must be at least 30 characters long +PAYUM_APIKEY=test_FRabcdefghijklmnopqrstuvwxyzab +PAYUM_GATEWAY=mollie +###< payum/payum-bundle ### + +###> league/flysystem-bundle ### +STORAGE_BUCKET=images +STORAGE_ENDPOINT=http://storage:9000 +STORAGE_REGION=us-east-1 +STORAGE_USE_PATH_STYLE_ENDPOINT=true +STORAGE_KEY=app +STORAGE_SECRET=!ChangeMe! +###< league/flysystem-bundle ### diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..1ac4142 --- /dev/null +++ b/.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=test +PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots +PAYUM_GATEWAY=offline diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..4100f74 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": "eslint:recommended", + "overrides": [ + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2, + { "ignoreComments": true } + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ] + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..590d686 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,16 @@ +* text=auto eol=lf + +*.conf text eol=lf +*.html text eol=lf +*.ini text eol=lf +*.js text eol=lf +*.json text eol=lf +*.md text eol=lf +*.php text eol=lf +*.sh text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +bin/console text eol=lf + +*.ico binary +*.png binary diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..d6a0af1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,45 @@ +# Description + +Please include a summary of the changes and the related issue. +Please also include relevant motivation and context. + +Related to # (issue) + +## Type of change + +Please delete options that are not relevant. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Cleanup/refactoring of an existing feature (code quality change without feature modification) +- [ ] Improvment of an existing feature (minor tweak) +- [ ] Documentation (no code) + +# How Has This Been Tested? + +Please describe the tests that you ran to verify your changes. Put below at least a file +that was modified/added for the tests of this feature/bugfix. + +- [ ] Test A + +# Checklist: + +- [ ] I have assigned myself to the related ticket +- [ ] I have read the ticket carefully and the code addresses exactly what is described in it +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] Tests pass locally (`make test-complete`) +- [ ] Code coverage is still at 100% (`make coverage`) +- [ ] My code follows the style guidelines of this project, `make ci` should run without error +- [ ] Translations have been added, I didn't put raw text in PHP files or Twig templates +- [ ] I have performed a self-review of my code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] Git rebase have been made, and the PR can be merged without conflict +- [ ] All CI checks are ✅ +- [ ] I have removed the draft status of the PR +- [ ] I have removed the WIP tag on the PR and also in the title +- [ ] I have added the RFR (ready for review) tag on the PR +- [ ] I have added the DEPLOY tag and the feature/fix can be tested on the dedicated environment +- [ ] I have assigned someone to review the PR + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..49c0df0 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: + push: + +jobs: + build: + name: Docker build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Pull images + run: docker compose pull + - name: Start services + run: docker compose up --build -d + - name: Wait for services + run: | + while status="$(docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" "$(docker compose ps -q php)")"; do + case $status in + starting) sleep 1;; + healthy) exit 0;; + unhealthy) exit 1;; + esac + done + exit 1 + - name: Check HTTP reachability + run: curl http://localhost + - name: Check HTTPS reachability + run: curl -k https://localhost + - name: Test manifest file + run: mkdir -p public/build; docker compose exec -T php echo "{}" > public/build/manifest.json + - name: Create test database + run: docker compose exec -T php bin/console -e test doctrine:database:create + - name: Create database schema + run: docker compose exec -T php bin/console -e test doctrine:schema:create + - name: Setup Messenger + run: docker compose exec -T php bin/console -e test messenger:setup-transports + - name: Initializing Fixtures + run: docker compose exec -T php bin/console -e test hautelook:fixtures:load --no-interaction --no-bundles + - name: Meilisearch indexation + run: docker compose exec -T php bin/console -e test app:index-products + - name: PHPUnit + run: docker compose exec -T php bin/phpunit + - name: Doctrine Schema Validator + run: docker compose exec -T php bin/console doctrine:schema:validate --skip-sync + - name: PHP CS Fixer + run: docker compose exec -T php sh -c './vendor/bin/php-cs-fixer fix --allow-risky=yes --dry-run --format=checkstyle | ./vendor/bin/cs2pr' + - name: PHPStan + run: docker compose exec -T php ./vendor/bin/phpstan analyse --memory-limit=-1 --error-format=github + - name: Twig Linter + run: docker compose exec -T php ./vendor/bin/twigcs templates/ --exclude vendor + - name: Install eslint + run: docker run --rm -w "/usr/app" -v "${PWD}":/usr/app gmolaire/yarn yarn add eslint + - name: Run eslint on javascript files + run: docker run --rm -w "/usr/app" -v "${PWD}":/usr/app gmolaire/yarn yarn lint diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml new file mode 100644 index 0000000..7488082 --- /dev/null +++ b/.github/workflows/cleanup.yml @@ -0,0 +1,33 @@ +name: Cleanup + +on: + pull_request: + types: [ closed ] + +jobs: + cleanup: + name: Cleanup + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set KUBECONFIG + run: | + mkdir ~/.kube + echo ${{ secrets.KUBECONFIG }} | base64 -d > ~/.kube/config + kubectl config view + + - name: Uninstall helm release + id: uninstall_helm_release + run: | + export RELEASE_NAME=pr-$(jq --raw-output .pull_request.number $GITHUB_EVENT_PATH) + echo "Uninstalling release ${RELEASE_NAME}" + if ! helm uninstall ${RELEASE_NAME} --kube-context nonprod --wait ; then + echo "HELM Uninstall has failed !" + echo "Please ask the SRE team to manually clean remaining objects" + exit 1 + fi + echo "HELM uninstall successfull" + echo "Cleaning remaining PVC..." + kubectl delete pvc -l app.kubernetes.io/instance=$RELEASE_NAME diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1ea8b40 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> friendsofphp/php-cs-fixer ### +/.php-cs-fixer.php +/.php-cs-fixer.cache +###< friendsofphp/php-cs-fixer ### + +###> symfony/phpunit-bridge ### +###< symfony/phpunit-bridge ### + +###> phpunit/phpunit ### +/phpunit.xml +.phpunit.result.cache +docs/coverage +###< phpunit/phpunit ### + +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### + +###> league/flysystem-bundle ### +storage +###< league/flysystem-bundle ### diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..c68ff2a --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,27 @@ +in(__DIR__) + ->exclude('var') + ->exclude('tmp') + ->exclude('node_modules') +; + +return (new PhpCsFixer\Config())->setRules([ + '@Symfony' => true, + 'array_syntax' => ['syntax' => 'short'], // https://cs.symfony.com/doc/rules/array_notation/array_syntax.html + 'declare_strict_types' => true, // https://cs.symfony.com/doc/rules/strict/declare_strict_types.html + 'php_unit_fqcn_annotation' => false, // https://cs.symfony.com/doc/rules/php_unit/php_unit_fqcn_annotation.html + 'yoda_style' => false, // https://cs.symfony.com/doc/rules/control_structure/yoda_style.html + 'phpdoc_to_comment' => false, // https://cs.symfony.com/doc/rules/phpdoc/phpdoc_to_comment.html # Needed for PHPStan @var annotations + 'native_function_invocation' => [ // https://cs.symfony.com/doc/rules/function_notation/native_function_invocation.html + 'include' => ['@compiler_optimized'], // https://cs.symfony.com/doc/rules/function_notation/native_function_invocation.html#include + 'scope' => 'namespaced', // https://cs.symfony.com/doc/rules/function_notation/native_function_invocation.html#scope + 'strict' => true // https://cs.symfony.com/doc/rules/function_notation/native_function_invocation.html#strict + ], + ]) +->setFinder($finder); diff --git a/.trivyignore b/.trivyignore new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..becedd2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,213 @@ +# the different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +ARG PHP_VERSION=8.1 +ARG CADDY_VERSION=2 + +# yarn build +FROM gmolaire/yarn AS yarn_build +WORKDIR /usr/app +RUN apt-get update && apt-get install tar +RUN mkdir -p /usr/app/vendor/symfony +RUN curl -L https://github.com/symfony/ux-autocomplete/archive/v2.7.1.tar.gz -o ux-autocomplete.tar.gz +RUN tar -xzvf ux-autocomplete.tar.gz --directory /usr/app/vendor/symfony +RUN mv /usr/app/vendor/symfony/ux-autocomplete-2.7.1 /usr/app/vendor/symfony/ux-autocomplete +COPY package.json yarn.lock . +RUN yarn install +COPY . . +RUN yarn build + +# Prod image +FROM php:${PHP_VERSION}-fpm-alpine AS app_php + +# needed for security update until base image is updated +RUN apk upgrade libcurl curl openssl openssl-dev libressl libcrypto3 libssl3 + +# Allow to use development versions of Symfony +ARG STABILITY="stable" +ENV STABILITY ${STABILITY} + +# Allow to select Symfony version +ARG SYMFONY_VERSION="" +ENV SYMFONY_VERSION ${SYMFONY_VERSION} + +ENV APP_ENV=prod + +WORKDIR /srv/app + +# php extensions installer: https://github.com/mlocati/docker-php-extension-installer +ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ +RUN chmod +x /usr/local/bin/install-php-extensions + +# persistent / runtime deps +RUN apk add --no-cache \ + acl \ + fcgi \ + file \ + gettext \ + git \ + nghttp2 \ + libcrypto3 \ + libssl3 \ + ; + +RUN set -eux; \ + install-php-extensions \ + intl \ + zip \ + apcu \ + opcache \ + xsl \ + redis \ + bcmath \ + ; + +###> doctrine/doctrine-bundle ### +RUN apk add --no-cache --virtual .pgsql-deps postgresql-dev; \ + docker-php-ext-install -j$(nproc) pdo_pgsql; \ + apk add --no-cache --virtual .pgsql-rundeps so:libpq.so.5; \ + apk del .pgsql-deps +###< doctrine/doctrine-bundle ### +###< recipes ### + +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" +COPY docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/ +COPY docker/php/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/ + +COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf +RUN mkdir -p /var/run/php + +COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck +RUN chmod +x /usr/local/bin/docker-healthcheck + +HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"] + +COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + +ENTRYPOINT ["docker-entrypoint"] +CMD ["php-fpm"] + +# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +RUN chown -R www-data: /srv/app/ /var/run/php/ + +# prevent the reinstallation of vendors at every changes in the source code +USER www-data +COPY --chown=www-data:www-data composer.* symfony.* ./ +RUN set -eux; \ + if [ -f composer.json ]; then \ + composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress; \ + composer clear-cache; \ + fi + +# copy sources +COPY --chown=www-data:www-data . . +RUN rm -Rf docker/ + +RUN set -eux; \ + mkdir -p var/cache var/log; \ + if [ -f composer.json ]; then \ + composer dump-autoload --classmap-authoritative --no-dev; \ + composer dump-env prod; \ + COMPOSER_MEMORY_LIMIT=-1 composer run-script --no-dev post-install-cmd; \ + chmod +x bin/console; sync; \ + fi; + +# copy yarn build output +COPY --from=yarn_build --chown=www-data:www-data /usr/app/public/build/ public/build/ + +# Dev image +FROM app_php AS app_php_dev + +USER root + +###> recipes ### +###> symfony/panther ### +# Chromium and ChromeDriver +ENV PANTHER_NO_SANDBOX 1 +# Not mandatory, but recommended +ENV PANTHER_CHROME_ARGUMENTS='--disable-dev-shm-usage' +RUN apk add --no-cache chromium chromium-chromedriver + +# Firefox and geckodriver +#ARG GECKODRIVER_VERSION=0.29.0 +#RUN apk add --no-cache firefox +#RUN wget -q https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER_VERSION/geckodriver-v$GECKODRIVER_VERSION-linux64.tar.gz; \ +# tar -zxf geckodriver-v$GECKODRIVER_VERSION-linux64.tar.gz -C /usr/bin; \ +# rm geckodriver-v$GECKODRIVER_VERSION-linux64.tar.gz +###< symfony/panther ### + + +# Additional dev tools (graphviz is to have the dot program to generate the workflows' graphs) +RUN apk add --no-cache \ + make \ + nano \ + vim \ + neovim \ + graphviz \ + ; + +# Load aliases at interactive shell (sh -l) +ENV ENV="/etc/profile" + +ENV APP_ENV=dev XDEBUG_MODE=off +USER www-data +# We must create directories to avoid problems with EasyAdmin which checks rights +# even a cloud storgae is used (thoses directories will stay empty when a cloud +# storage is used). +RUN mkdir -p /srv/app/public/storage/uploads/category +RUN mkdir -p /srv/app/public/storage/uploads/menu +RUN mkdir -p /srv/app/public/storage/uploads/product +RUN mkdir -p /srv/app/public/storage/uploads/user + +USER root +VOLUME /srv/app/var/ + +RUN rm $PHP_INI_DIR/conf.d/app.prod.ini; \ + mv "$PHP_INI_DIR/php.ini" "$PHP_INI_DIR/php.ini-production"; \ + mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" + +COPY docker/php/conf.d/app.dev.ini $PHP_INI_DIR/conf.d/ + +RUN set -eux; \ + install-php-extensions xdebug + +RUN rm -f .env.local.php + +# Build Caddy with the Mercure and Vulcain modules +# FROM caddy:${CADDY_VERSION}-builder-alpine AS app_caddy_builder + +# Temporary fix for https://github.com/dunglas/mercure/issues/770 +# https://github.com/dunglas/symfony-docker/pull/407/files + +FROM caddy:2.7-builder-alpine AS app_caddy_builder + +# RUN xcaddy build \ +# --with github.com/dunglas/mercure \ +# --with github.com/dunglas/mercure/caddy \ +# --with github.com/dunglas/vulcain \ +# --with github.com/dunglas/vulcain/caddy + +RUN xcaddy build \ + --with github.com/dunglas/mercure/caddy \ + --with github.com/dunglas/vulcain/caddy + +# Caddy image +FROM caddy:${CADDY_VERSION} AS app_caddy + +# needed for security update until base image is updated +RUN apk upgrade libcurl curl openssl openssl-dev libressl libcrypto1.1 libssl1.1 libcrypto3 libssl3 + +WORKDIR /srv/app + +COPY --from=app_caddy_builder /usr/bin/caddy /usr/bin/caddy +COPY --from=app_php /srv/app/public public/ +COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile diff --git a/ERRORS.md b/ERRORS.md new file mode 100644 index 0000000..46d7968 --- /dev/null +++ b/ERRORS.md @@ -0,0 +1,180 @@ +# Errors + +This documention gives solutions for some errors occuring in the project. + +## 1. Makefile + +### Error 1.1 + + plateformcoop-ebs$ docker compose exec php ./vendor/bin/php-cs-fixer fix --allow-risky=yes + OCI runtime exec failed: exec failed: unable to start container process: exec: "./vendor/bin/php-cs-fixer": permission denied: unknown + +### Solution 1.1 + +Verify that the executables in `vendor/bin`have the executblale right: + + cd /srv/app/vendor/bin; chmod +x * + + +## 2. PHPStan + +### Error 2.1 + + tests/Integration/Translator/NotranslatorTest.php + --------------------------------------------------------------------------- + Service "App\Translator\NoTranslator" is not registered in the container. + --------------------------------------------------------------------------- + +### Solution 2.1 + +To resolve this error, run: + + make stan-cc + + +## 3. PHPUnit + +### Error 3.1 + + ..........................................make: *** [Makefile:159: test] Error 137 + +### Solution 3.1 + +Check if there is no `dump()` in a loop. + +### Error 3.2 + + ..................make: *** [test] Error 139 + +### Solution 3.2 + +It seems to be a temporary Docker error. Run again the tests. Try the debug mode +`make test-debug` if the error is still there to find the faulty tests. + + +### Error 3.3 + +``` +1) App\Tests\Functional\Controller\User\ServiceRequest\ServiceRequestStatusWorkflowControllerRefuseTest::testTransitionRefuseSuccess + +LogicException: The selected node does not have a form ancestor. + +/srv/app/vendor/symfony/dom-crawler/Form.php:372 +/srv/app/vendor/symfony/dom-crawler/AbstractUriElement.php:45 +/srv/app/vendor/symfony/dom-crawler/Form.php:38 +/srv/app/vendor/symfony/dom-crawler/Crawler.php:838 +/srv/app/tests/Functional/Controller/User/ServiceRequest/ServiceRequestStatusWorkflowControllerRefuseTest.php:35 +``` + +It's because we have the same traduction in two places. + +``` +
+ +
+ + + +``` + +### Solution 3.2 + +``` +
+ +
+``` + +Change the traduction key for the first button + + +## 4. Geocoding/Nominatim + +### Error 4.1 + +Error for all the geocoding tests (poc or modify my address): + + ErrorException: Handling "App\Message\Query\Admin\User\UserAddressQuery" failed: Serialization of 'Closure' is not allowed + in /srv/app/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:129 + +It is because the Nominatim service is down (error 502, bad gateway). +Disable the cache in `config/packages/bazinga_geocoder.yaml` to see the real error: + + The geocoder server returned an invalid response (502) for query "https://nominatim.openstreetmap.org/search?format=jsonv2&q=Timipi%2C%20Fives%2C%20france&addressdetails=1&extratags=1&limit=3&accept-language=fr". + We could not parse it. + + https://nominatim.openstreetmap.org/search?format=jsonv2&q=Timipi%2C%20Fives%2C%20france&addressdetails=1&extratags=1&limit=3&accept-language=fr" + + 502 Bad Gateway + nginx + +### Solution 4.1 + +Wait. + +It would be nice if the bundle could hande this error correclty and at least return +an empty results array if there is such an error. +As it is made now, we can't catch this error, which is quite problematic. +Create a new issue on the bundle to see what can be done. + +### Todo for 4.1 + +Use mocks for the test env. + + +## 5. Docker + +### Error 5.1 + +When running a command with make like `make cs` we have he error: + + OCI runtime exec failed: exec failed: unable to start container process: read init-p: connection reset by peer: unknown + +### Solution 5.1 + +Restart Docker. + + +## 6. Symfony + +### Error 6.1 + +When trying to access a controller we just created: + + Could not resolve argument $productId of "App\Controller\User\Product\DeleteProductAction::__invoke()", maybe you forgot to register the controller as a service or missed tagging it with the "controller.service_arguments"? + +### Solution 6.1 + +There is a mismatch between the arguments of the controller action and the route +requirements, fix them (eg: `productId` instead of `id`. + + + +## 7. Meilisearch + +### Error 7.1 + +When indexing a document: + + The primary key inference failed as the engine found 2 fields ending with `id` in their names: 'id' and 'ownerId'. + Please specify the primary key manually using the `primaryKey` query parameter? + +### Solution 6.1 + +The primary key must specified to avoid confusion. It can be set using the second +argument of the `addDocument()` functions. + + $this->getIndex()->addDocuments([$this->normalizeProduct($product)], self::PRIMARY_KEY); diff --git a/LICENSE b/LICENSE index 0ad25db..bc6b2a1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,661 +1,19 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. +Copyright (c) Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..30aecf9 --- /dev/null +++ b/Makefile @@ -0,0 +1,233 @@ +# Config +CURRENT_UID := $(shell id -u) +CURRENT_GID := $(shell id -g) + +SHELL = sh +REDIS_PORT = 6389 + +# Executables (local) +DOCKER = docker +DOCKER_COMP = docker compose +REDIS = redis-cli + +# Docker containers +PHP_CONT = $(DOCKER_COMP) exec php + +# see https://hub.docker.com/r/gmolaire/yarn +YARN_CONT = $(DOCKER) run -it --rm -w "/usr/app" -v "${PWD}":/usr/app gmolaire/yarn yarn + +# Main executables +PHP = $(PHP_CONT) php +COMPOSER = $(PHP_CONT) composer +SYMFONY = $(PHP_CONT) bin/console +PHPUNIT = $(PHP_CONT) bin/phpunit + +# Vendors executables +PHPSTAN = $(PHP_CONT) ./vendor/bin/phpstan +PHP_CS_FIXER = $(PHP_CONT) ./vendor/bin/php-cs-fixer +TWIGCS = $(PHP_CONT) ./vendor/bin/twigcs +RECTOR = $(PHP_CONT) ./vendor/bin/rector + +# Misc +.DEFAULT_GOAL = help +.PHONY = help build up start down logs sh composer vendor sf cc ci cs lint-twigcs + +## —— 🎵 🐳 The Symfony Docker Makefile 🐳 🎵 ————————————————————————————————— +help: ## Outputs this help screen + @grep -E '(^[a-zA-Z0-9_-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}{printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' | sed -e 's/\[32m##/[33m/' + +## —— Docker 🐳 ———————————————————————————————————————————————————————————————— +build: ## Builds the Docker images + @$(DOCKER_COMP) build --pull + +up: ## Start the docker hub in detached mode (no logs) + @$(DOCKER_COMP) up -d + +wait: ## Waits for all containers to be ready + @$(DOCKER_COMP) up --wait + +start: ## Starts the main containers (load-fixtures must be done so the caddy service can be healthy) +start: up yarn-install load-fixtures yarn-dev wait + +start-dev: ## Start additional and optional dev tools in the docker-compose.override.yml.dist file + @$(DOCKER_COMP) -f docker-compose.override.yml.dist up --wait + +stop: ## Stop and remove the docker containers (and volumes) of the project + @$(DOCKER_COMP) down -v --remove-orphans + +logs: ## Show live logs + @$(DOCKER_COMP) logs --tail=0 --follow + +sh: ## Connect to the PHP FPM container + @$(PHP_CONT) sh -l + +linux-fix-perms: ## Fix permissions on Linux + $(PHP_CONT) chown -R $(CURRENT_UID):$(CURRENT_GID) . + +## —— Composer 🧙 —————————————————————————————————————————————————————————————— +composer: ## Run composer, pass the parameter "c=" to run a given command, example: make composer c='req symfony/orm-pack' + @$(eval c ?=) + @$(COMPOSER) $(c) + +vendor: composer.lock ## Install vendors according to the current composer.lock file +vendor: c=install --prefer-dist --no-progress --no-scripts --no-interaction +vendor: composer + +## —— Symfony 🎵 ——————————————————————————————————————————————————————————————— +sf: ## List all Symfony commands or pass the parameter "c=" to run a given command, example: make sf c=about + @$(eval env ?= 'dev') + @$(eval c ?=) + @$(SYMFONY) $(c) --env=$(env) + +cc: c=c:c ## Clear the cache +cc: sf + +purge: ## Purge the all vars files manually + @$(PHP_CONT) sh -c "rm -rf /srv/app/var/*" + +## —— Coding standards ✨ —————————————————————————————————————————————————————— +stan: ## Run PHPStan. Use the 'path' parameter to check a given file only: make stan path=src/Services/ControllerHelper.php + $(eval path ?= ) + @$(PHPSTAN) analyse -c phpstan.neon --memory-limit 1G -vvv $(path) + +stan-cc: ## Clear manually the PHPStan result cache + @$(PHPSTAN) clear-result-cache + +lint-php: ## Lint files with php-cs-fixer (just use fix-php) + $(PHP_CS_FIXER) fix --dry-run --allow-risky=yes + +lint-twig: ## Lint Twig files to check they are well formatted (no parse error) + @$(SYMFONY) lint:twig --env=dev + +lint-twigcs: ## Check Twig coding style + @$(TWIGCS) templates/ --exclude vendor + +lint-container: ## Check there is no problem with the container + @$(SYMFONY) lint:container + +lint-yaml: ## Check all YAML files are well formatted + @$(SYMFONY) lint:yaml --parse-tags config/ translations/ templates/ + +fix-php: ## Fix files with php-cs-fixer + @$(PHP_CS_FIXER) fix --allow-risky=yes + +rector: ## Run rector with current rules in rector.php + @$(RECTOR) process src/ + +ci: ## Run pre-commit checks to ensure the CI will be green +ci: cs lint-yaml lint-container lint-twig lint-twigcs yarn-lint doctrine-validate test-complete + +cs: ## Run PHPStan and php-cs-fixer only +cs: fix-php stan + +## —— Project —————————————————————————————————————————————————————————————————— +load-fixtures: drop-db ## Build the DB, control the schema validity, load fixtures and check the migration status (deb) + $(eval env ?= 'dev') + @$(SYMFONY) doctrine:database:create --if-not-exists --env=$(env) + @$(SYMFONY) doctrine:schema:create --env=$(env) + @$(SYMFONY) doctrine:schema:validate --env=$(env) + @$(SYMFONY) doctrine:migrations:migrate --env=$(env) --no-interaction + @$(SYMFONY) messenger:setup-transports --env=$(env) + @$(SYMFONY) hautelook:fixtures:load --no-interaction -vv --no-bundles --env=$(env) + @$(SYMFONY) app:index-products --env=$(env) + +drop-db: ## Delete the whole database, useful when having integrity problems for data or constraints + $(eval env ?= 'dev') + @$(SYMFONY) doctrine:database:drop --env=$(env) --if-exists --force + +load-test-fixtures: env=test ## Allows to use the test fixtures to debug problems +load-test-fixtures: load-fixtures + +load-prod-fixtures: env=prod +load-prod-fixtures: load-fixtures ## Same than load-fixtures but with only minimum data + +cache-clear: ## Clear the application cache (used for tests) + $(eval env ?= 'dev') + @$(SYMFONY) c:c --env=$(env) + @$(SYMFONY) cache:pool:clear cache.app --env=$(env) + +doctrine-validate: ## Validate the doctrine schema + $(eval env ?= 'dev') + @$(SYMFONY) doctrine:schema:validate --env=$(env) + +doctrine-migrate: ## Run all the available Doctrine migrations + @$(SYMFONY) doctrine:migrations:migrate --no-interaction + +meilisearch-index: + $(eval env ?= 'dev') + @$(SYMFONY) app:index-products --env=$(env) + + +## —— Tests ✅ ————————————————————————————————————————————————————————————————— +test: ## Run tests with optional suite, filter and options + @$(eval testsuite ?= 'all') + @$(eval filter ?= '.') + @$(eval options ?= '--stop-on-failure') + @$(PHPUNIT) --testsuite=$(testsuite) --filter=$(filter) $(options) + +test-complete: ## Run all tests without stopping on the first error +test-complete: env=test +test-complete: options= +test-complete: cc load-fixtures test + +test-debug: ## Run all tests in debug mode +test-debug: env=test +test-debug: options=--debug --stop-on-failure +test-debug: cc load-fixtures test + +test-unit: ## Run unit tests only +test-unit: env=test +test-unit: testsuite=unit +test-unit: test + +test-api: ## Run API tests only +test-api: env=test +test-api: testsuite=api +test-api: test + +test-integration: ## Run integration tests only +test-integration: env=test +test-integration: testsuite=integration +test-integration: load-test-fixtures test + +test-functional: ## Run functional tests only +test-functional: env=test +test-functional: testsuite=functional +test-functional: load-test-fixtures test + +test-e2e: ## Run E2E tests only +test-e2e: env=test +test-e2e: load-test-fixtures test + +coverage: ## Generate the HTML PHPUnit code coverage report locally +coverage: env=test +coverage: load-test-fixtures + # Cache must be generated by PHPUnit so it can run compiler passes + @$(PHP_CONT) sh -c "rm -rf /srv/app/var/cache/test" + @$(DOCKER_COMP) exec -e XDEBUG_MODE=coverage php php -d xdebug.enable=1 -d memory_limit=-1 bin/phpunit --coverage-html=docs/coverage + +## —— Debug 🐞—————————————————————————————————————————————————————————————————— +redis: ## Connect to redis with CLI (redis-cli must be installed locally) + @$(REDIS) -p $(REDIS_PORT) + +redis-cc: ## Flush all Redis cache + @$(REDIS) -p $(REDIS_PORT) flushall + +## —— Yarn 🐱 / JavaScript ————————————————————————————————————————————————————— +yarn-install: ## Install node dependencies with Yarn + @$(YARN_CONT) install + +yarn-dev: ## Build the assets for the dev env + @$(YARN_CONT) dev + +yarn-lint: ## Lint JS files + @$(YARN_CONT) lint + +yarn-cmd: ## Run a given command + @$(eval cmd ?= 'help') + @$(YARN_CONT) $(cmd) + +## —— Doc 📚 ——————————————————————————————————————————————————————————————————— +workflows: ## Generate and update the graphs of all available workflows + @$(PHP_CONT) bin/console workflow:dump service_request_status | dot -Tpng -o docs/service_request_status_workflow.png + @echo "Done!" diff --git a/README.md b/README.md index 37f4280..16d34b6 100644 --- a/README.md +++ b/README.md @@ -205,4 +205,4 @@ La page en question bénéficiera de l’accès au reste du framework, à la bas # Installation et documentation technique -La documentation d'installation et configuration technique de la plateforme est disponible sur [cette page](). +La documentation d'installation et configuration technique de la plateforme est disponible sur [cette page](docs/README.md). diff --git a/assets/app.js b/assets/app.js new file mode 100644 index 0000000..0b36e93 --- /dev/null +++ b/assets/app.js @@ -0,0 +1,18 @@ + +/* + * Welcome to your app's main JavaScript file! + * + * We recommend including the built version of this JavaScript file + * (and its CSS file) in your base layout (base.html.twig). + */ + +// any CSS you import will output into a single css file (app.css in this case) +import './styles/global.scss' + +// start the Stimulus application +import './stimulus' + +import '@fortawesome/fontawesome-free/js/fontawesome' +import '@fortawesome/fontawesome-free/js/solid' +import '@fortawesome/fontawesome-free/js/regular' +import '@fortawesome/fontawesome-free/js/brands' diff --git a/assets/controllers.json b/assets/controllers.json new file mode 100644 index 0000000..1f6fc3a --- /dev/null +++ b/assets/controllers.json @@ -0,0 +1,15 @@ +{ + "controllers": { + "@symfony/ux-autocomplete": { + "autocomplete": { + "enabled": true, + "fetch": "eager", + "autoimport": { + "tom-select/dist/css/tom-select.default.css": true, + "tom-select/dist/css/tom-select.bootstrap5.css": false + } + } + } + }, + "entrypoints": [] +} diff --git a/assets/controllers/accordion_controller.js b/assets/controllers/accordion_controller.js new file mode 100644 index 0000000..bc90d26 --- /dev/null +++ b/assets/controllers/accordion_controller.js @@ -0,0 +1,9 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + toggle() { + const accordionList = this.element.nextElementSibling + this.element.lastElementChild.classList.toggle('rotate-180') + accordionList.classList.toggle('opened') + } +} diff --git a/assets/controllers/account_controller.js b/assets/controllers/account_controller.js new file mode 100644 index 0000000..8eb940d --- /dev/null +++ b/assets/controllers/account_controller.js @@ -0,0 +1,65 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + + hiddenUserInput () { + const divUserInput = document.querySelector('.user-input') + divUserInput.classList.add('hidden') + } + + hiddenPlaceInput() { + const divUserInput = document.querySelector('.place-input') + divUserInput.classList.add('hidden') + } + connect () { + const userInput = this.element.value === 'user' + const placeInput = this.element.value === 'place' + const inputUserLastname = document.querySelector('.input-lastname') + const inputUserFirstname = document.querySelector('.input-firstname') + const inputPlaceName = document.querySelector('.input-name') + + const userInputChecked = userInput && this.element.checked + const placeInputChecked = placeInput && this.element.checked + + if (userInputChecked) { + inputUserFirstname.required = true + inputUserLastname.required = true + this.hiddenPlaceInput() + } + + if (placeInputChecked) { + inputPlaceName.required = true + this.hiddenUserInput() + } + } + + choosenType() { + const placeInput = this.element.value === 'place' + const inputUserLastname = document.querySelector('.input-lastname') + const inputUserFirstname = document.querySelector('.input-firstname') + const inputPlaceName = document.querySelector('.input-name') + + const divUserInput = document.querySelector('.user-input') + const divPlaceInput = document.querySelector('.place-input') + + const placeInputChecked = placeInput && this.element.checked + + if (placeInputChecked) { + inputUserFirstname.removeAttribute('required') + inputUserLastname.removeAttribute('required') + + inputPlaceName.setAttribute('required', '') + + divPlaceInput.classList.remove('hidden') + divUserInput.classList.add('hidden') + } else { + inputPlaceName.removeAttribute('required') + + inputUserFirstname.setAttribute('required', '') + inputUserLastname.setAttribute('required', '') + + divUserInput.classList.remove('hidden') + divPlaceInput.classList.add('hidden') + } + } +} diff --git a/assets/controllers/calendar_controller.js b/assets/controllers/calendar_controller.js new file mode 100644 index 0000000..9e9acec --- /dev/null +++ b/assets/controllers/calendar_controller.js @@ -0,0 +1,114 @@ +import { Controller} from '@hotwired/stimulus' +import flatpickr from 'flatpickr' +import rangePlugin from 'flatpickr/dist/plugins/rangePlugin' +import { French } from 'flatpickr/dist/l10n/fr' +export default class extends Controller { + static values = { + unavailabilities: String + } + + initialize() { + this.fp + this.fpProductOwner + } + + connect() { + const unavailabilities = this.unavailabilitiesValue.split(',') + + const selector = this.element.querySelector('#calendar-start-day') + + const commonOptions = { + locale: { + ...French, + weekdays: { + shorthand: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], // Override shorthand because it is initially in the "lun", "mar", "mer" (etc) format + longhand: French.weekdays.longhand, + } + }, + inline: true, + disable: unavailabilities, + monthSelectorType: 'static', + minDate: 'today', + } + + if (!selector) { + // This flatpickr instance is meant for when a user visits its own product page + this.fpProductOwner = flatpickr('#product-owner-calendar', commonOptions) + + // This prevents owner from selecting days + this.fpProductOwner.daysContainer.addEventListener('click', (event) => { + event.stopPropagation() + }, true) + + return + } + + this.fp = flatpickr(selector, { + ...commonOptions, + allowInput: true, + mode: 'range', + plugins: [new rangePlugin({ input: '#calendar-end-day'})], + onReady(_, __, instance) { + let params = (new URL(location)).searchParams + const startAt = params.get('startAt') + const endAt = params.get('endAt') + + const dates = [] + + if (startAt) dates.push(startAt) + if (endAt) dates.push(endAt) + + if (dates.length) { + instance.setDate(dates, true) + return + } + + const buttonServiceRequestPage = document.querySelector('#create_service_request_submit') + + if (!buttonServiceRequestPage) return + + buttonServiceRequestPage.setAttribute('disabled', '') + }, + onChange() { + const startAtInput = document.querySelector('#calendar-start-day') + const endAtInput = document.querySelector('#calendar-end-day') + const startAt = startAtInput.value + const endAt = endAtInput.value + + const buttonProductPage = document.querySelector('#service-request') + const buttonServiceRequestPage = document.querySelector('#create_service_request_submit') + + if (buttonProductPage) { + startAt && endAt + ? buttonProductPage.removeAttribute('disabled') + : buttonProductPage.setAttribute('disabled', '') + } + + if (buttonServiceRequestPage) { + startAt && endAt + ? buttonServiceRequestPage.removeAttribute('disabled') + : buttonServiceRequestPage.setAttribute('disabled', '') + } + } + }) + } + + resetDates() { + this.fp.clear() + } + + serviceRequest() { + const button = this.element.querySelector('#service-request') + const path = button.dataset.path + const startAtInput = this.element.querySelector('#calendar-start-day') + const endAtInput = this.element.querySelector('#calendar-end-day') + const startAt = startAtInput.value + const endAt = endAtInput.value + + const url = new URL(path, window.location.origin) + url.searchParams.set('startAt', startAt) + url.searchParams.set('endAt', endAt) + + location.href = url + } +} diff --git a/assets/controllers/menu_controller.js b/assets/controllers/menu_controller.js new file mode 100644 index 0000000..cf9c025 --- /dev/null +++ b/assets/controllers/menu_controller.js @@ -0,0 +1,8 @@ +import {Controller} from '@hotwired/stimulus' + +export default class extends Controller { + toggle() { + const menu = document.querySelector('.menu') + menu.classList.toggle('hide') + } +} diff --git a/assets/controllers/product_controller.js b/assets/controllers/product_controller.js new file mode 100644 index 0000000..fab2a2b --- /dev/null +++ b/assets/controllers/product_controller.js @@ -0,0 +1,34 @@ +import { Controller} from '@hotwired/stimulus' +import { Toast } from 'bootstrap' + +export default class extends Controller { + static targets = [ 'activeButton', 'pausedButton', 'activeTag', 'pausedTag' ] + + static values = { + route: String, + } + + async switchStatus() { + const response = await fetch(this.routeValue, { method: 'PATCH' }) + + if (!response.ok) { + const toastElement = document.querySelector('[data-notification=error]') + const toast = new Toast(toastElement) + toast.show() + return + } + + const data = await response.json() + const { status } = data + + const toastElement = document.querySelector(`[data-notification=${status}StatusSuccess]`) + const toast = new Toast(toastElement) + toast.show() + + this.activeButtonTarget.classList.toggle('d-none') + this.pausedButtonTarget.classList.toggle('d-none') + + this.activeTagTarget.classList.toggle('d-none') + this.pausedTagTarget.classList.toggle('d-none') + } +} diff --git a/assets/controllers/productupload_controller.js b/assets/controllers/productupload_controller.js new file mode 100644 index 0000000..46ff046 --- /dev/null +++ b/assets/controllers/productupload_controller.js @@ -0,0 +1,40 @@ +import { Controller} from '@hotwired/stimulus' + +export default class extends Controller { + static targets = ['input', 'feedback'] + + static values = { + uploadMaxsizeByFile: Number, // max size by image allowed + uploadMaxItems: Number, // max number of images allowed + currentImagesCount: Number, // number of images already uploaded + feedbackMessage: String, // image too too big feedback + maxImagesError: String, // count threshold reached error + } + + /** + * 1. Check the size of each file. Remove the selected files if one is incorrect. + * 2. Check the number of images uploaded. + */ + checkUpload() { + const maxAllowedImages = this.uploadMaxItemsValue - this.currentImagesCountValue + if (maxAllowedImages < this.inputTarget.files.length) { + this.feedbackTarget.innerHTML = this.maxImagesErrorValue + this.inputTarget.value = '' + + return + } + + const uploadMaxsizeByFile = 1048576 * this.uploadMaxsizeByFileValue + let feedback = [] + for (let file of this.inputTarget.files) { + if (file.size > uploadMaxsizeByFile) { + feedback.push(this.feedbackMessageValue.replace('%file%', file.name)) + } + } + + if (feedback.length > 0) { + this.feedbackTarget.innerHTML = feedback.join('
') + this.inputTarget.value = '' + } + } +} diff --git a/assets/controllers/productvisibility_controller.js b/assets/controllers/productvisibility_controller.js new file mode 100644 index 0000000..c80a5dc --- /dev/null +++ b/assets/controllers/productvisibility_controller.js @@ -0,0 +1,18 @@ +import { Controller} from '@hotwired/stimulus' + +export default class extends Controller { + static targets = ['public', 'groups'] + + connect () { + if (this.publicTarget.checked) { + this.hideGroups() + } + } + + hideGroups() { + this.groupsTarget.classList.add('hidden') + } + showGroups() { + this.groupsTarget.classList.remove('hidden') + } +} diff --git a/assets/controllers/read-more_controller.js b/assets/controllers/read-more_controller.js new file mode 100644 index 0000000..475a95b --- /dev/null +++ b/assets/controllers/read-more_controller.js @@ -0,0 +1,14 @@ +import {Controller} from '@hotwired/stimulus' + +export default class extends Controller { + toggle() { + const readMoreContainer = document.querySelector('.read') + const buttonToggle = this.element + const opened = readMoreContainer.classList.contains('less') + + readMoreContainer.classList.toggle('less') + readMoreContainer.classList.toggle('more') + + buttonToggle.innerHTML = opened ? 'Voir plus' : 'Voir moins' + } +} diff --git a/assets/controllers/search_controller.js b/assets/controllers/search_controller.js new file mode 100644 index 0000000..56ca318 --- /dev/null +++ b/assets/controllers/search_controller.js @@ -0,0 +1,16 @@ +import { Controller} from '@hotwired/stimulus' + +export default class extends Controller { + static targets = [ 'form' ] + + /** + * Reset the form to blank values (input reset doesn't work with prefilled values). + */ + reset() { + this.formTarget.elements['p[q]'].value = '' + this.formTarget.elements['p[category]'].value = '' + this.formTarget.elements['p[place]'].value = '' + this.formTarget.elements['p[city]'].value = '' + this.formTarget.elements['p[distance]'].forEach(radio => radio.checked = false) + } +} diff --git a/assets/controllers/tooltips_controller.js b/assets/controllers/tooltips_controller.js new file mode 100644 index 0000000..1b6531d --- /dev/null +++ b/assets/controllers/tooltips_controller.js @@ -0,0 +1,11 @@ +import { Controller } from '@hotwired/stimulus' +import { Tooltip } from 'bootstrap' + +export default class extends Controller { + connect() { + const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) + tooltipTriggerList.map(function (tooltipTriggerEl) { + return new Tooltip(tooltipTriggerEl) + }) + } +} diff --git a/assets/stimulus.js b/assets/stimulus.js new file mode 100644 index 0000000..c02d609 --- /dev/null +++ b/assets/stimulus.js @@ -0,0 +1,21 @@ +import { startStimulusApp } from '@symfony/stimulus-bridge' +import { Application } from '@hotwired/stimulus' + +import PasswordVisibility from 'stimulus-password-visibility' +import Carousel from 'stimulus-carousel' +import 'swiper/swiper-bundle.css' + +// 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); + +const application = Application.start() +application.register('carousel', Carousel) +application.register('password-visibility', PasswordVisibility) + diff --git a/assets/styles/_accordion.scss b/assets/styles/_accordion.scss new file mode 100644 index 0000000..f5d39e6 --- /dev/null +++ b/assets/styles/_accordion.scss @@ -0,0 +1,18 @@ +.accordion.rotate-180 { + transition: transform .3s ease-in-out; +} + +.accordion { + transition: transform .3s ease-in-out; +} + +.accordion-list { + max-height: 0; + transition: max-height .3s ease-out; + overflow: hidden; + + &.opened { + max-height: 500px; + transition: max-height .3s ease-in; + } +} diff --git a/assets/styles/_address.scss b/assets/styles/_address.scss new file mode 100644 index 0000000..6c7e675 --- /dev/null +++ b/assets/styles/_address.scss @@ -0,0 +1,18 @@ +.address-card { + display: flex; + align-items: center; + + &-checkbox { + width: fit-content; + } + + &-info { + display: flex; + flex-direction: column; + + > p { + margin: 0; + color: $heading-color; + } + } +} diff --git a/assets/styles/_calendar.scss b/assets/styles/_calendar.scss new file mode 100644 index 0000000..b9e6486 --- /dev/null +++ b/assets/styles/_calendar.scss @@ -0,0 +1,73 @@ +.flatpickr-calendar { + align-self: center; + + &::before, + &::after { + display: none; + } + + .cur-month, + .cur-year { + font-size: $font-size-base !important; + font-weight: $font-weight-normal !important; + } + + .cur-month { + text-transform: capitalize; + } + + .cur-year { + pointer-events: none; + } + + .arrowUp, + .arrowDown { + display: none; + } +} + +.flatpickr-current-month { + padding-top: 10px; +} + +.flatpickr-weekdays { + margin-top: $spacer; +} + +.flatpickr-weekday { + font-weight: $font-weight-normal !important; + color: $gray-600 !important; +} + +.flatpickr-day { + color: $primary !important; + + &.selected { + border: none; + border-radius: 4px !important; + background: $primary; + color: $white !important; + } + + &.inRange { + color: $black !important; + } + + &.prevMonthDay, + &.nextMonthDay { + color: rgba($gray-600, .5) !important; + } +} + +.flatpickr-disabled { + color: $gray-600 !important; + text-decoration: line-through; +} + +.flatpickr-prev-month, +.flatpickr-next-month { + svg { + fill: $primary; + } +} + diff --git a/assets/styles/_card.scss b/assets/styles/_card.scss new file mode 100644 index 0000000..6df14f8 --- /dev/null +++ b/assets/styles/_card.scss @@ -0,0 +1,22 @@ +.card { + .img-container { + @media (min-width: 1200px) { + height: 310px; + } + @media (max-width: 1025px) { + height: 235px; + } + @media (max-width: 700px) { + height: 180px; + } + } + .img { + object-fit: contain; + width: 100%; + } + + .img-default { + object-fit: cover; + width: 100%; + } +} diff --git a/assets/styles/_chat.scss b/assets/styles/_chat.scss new file mode 100644 index 0000000..04760b3 --- /dev/null +++ b/assets/styles/_chat.scss @@ -0,0 +1,36 @@ +.chat-content { + margin-bottom: 200px; +} + +.chat-action { + width: 100%; +} + +@media screen and (min-width: 992px) { + .chat-container { + max-height: 800px; + overflow-y: auto; + position: relative; + + .chat-content { + margin-bottom: 150px; + } + + } + + .chat-action { + width: 75%; + } + .conversation-textarea { + height: 80px; + } +} + +@media screen and (min-width: 992px) and (max-width: 1199px) { + .chat-content { + margin-bottom: 150px; + } + .chat-action { + width: 66.6%; + } +} diff --git a/assets/styles/_connexion.scss b/assets/styles/_connexion.scss new file mode 100644 index 0000000..ce70f6b --- /dev/null +++ b/assets/styles/_connexion.scss @@ -0,0 +1,81 @@ +#account_create_step2_form_type, +#create_group_form_type +{ + display: flex; + + > .form-check { + margin-right: 10px; + + &:last-child { + margin-right: 0; + } + } +} + +label.required:after, +legend.required:after +{ + content: "*" !important; + color: #B02A37; + padding-left: 4px; +} + +label.form-check-label.required:after { + content: '' !important; +} + +#account_create_step2_form_plainPassword_first:invalid, +#account_create_step2_form_plainPassword_second:invalid, +#login-password:invalid { + background-image: none !important; +} + +#account_create_step2_form_plainPassword_first:valid, +#account_create_step2_form_plainPassword_second:valid, +#login-password:valid { + background-image: none !important; +} + +.password-visibility { + display: flex; + align-items: center; + + > input { + border-right: 0; + } + + > .eye { + background-color: transparent; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; + height: fit-content; + padding: 4px 8px 1.2px 4px; + } + + > input.is-invalid ~ .eye { + border: 1px solid #B02A37; + } + + > input.is-invalid ~ span { + display: none; + } +} + +.was-validated { + > .password { + > .password-visibility { + > input:invalid ~ .eye { + border: 1px solid #B02A37; + } + + > input:valid ~ .eye { + border: 1px solid #198754; + } + } + } +} + + + diff --git a/assets/styles/_conversations.scss b/assets/styles/_conversations.scss new file mode 100644 index 0000000..64f7a17 --- /dev/null +++ b/assets/styles/_conversations.scss @@ -0,0 +1,59 @@ +.conversations { + &-link { + transition: background .3s; + + &:hover, + &:focus { + background: rgba($gray-300, 0.3); + color: inherit; + } + } + + &-img { + width: 74px; + aspect-ratio: 1/1; + } +} + +.conversation { + &-message { + border-radius: 4px; + + &.system { + border: 1px solid $gray-400; + } + + &.from_recipient, + &.from_owner { + width: 80%; + } + + &.from_recipient { + background: $blue-100; + } + + &.from_owner { + margin-left: auto; + background: $blue-500; + color: $white; + + .conversation-messageValue { + color: inherit; + } + } + + } + + &-messageValue { + color: $black; + } + + &-textarea { + height: calc(1.5em + 0.75rem + 2px); + } +} + +.label-modal-width.col-sm-2 { + width: 100%; +} + diff --git a/assets/styles/_custom-variables.scss b/assets/styles/_custom-variables.scss new file mode 100644 index 0000000..dc20bde --- /dev/null +++ b/assets/styles/_custom-variables.scss @@ -0,0 +1,23 @@ +$white: #FFFFFF; +$gray: #D4D9DF; +$gray-100: #F8F9FA; +$gray-900: #667080; +$blue-100: #CCE5FF; +$blue-200: #B8DAFF; +$blue-500: #0D6EFD; +$blue-900: #031633; +$red: #B02A37; +$green: #198754; +$yellow: #FFC107; +$gray-border: #CED4DA; + +$dark: $blue-900; +$light: $gray-100; +$primary: $blue-500; + +$heading-color: #152536; +$body-color: #6c757d; + +//FONT +$bolder: 600; +$font-weight-bolder: $bolder; diff --git a/assets/styles/_grid.scss b/assets/styles/_grid.scss new file mode 100644 index 0000000..4d17cc6 --- /dev/null +++ b/assets/styles/_grid.scss @@ -0,0 +1,51 @@ +// GRID PAGE LOAN +.grid-template-loans { + display: grid; + grid-template-areas: + "product calendar" + "message calendar"; + column-gap: 2rem; + grid-template-rows: 100px auto; +} + +// GRID PAGE PRODUCT +.grid-template-product { + display: grid; + grid-template-areas: + "info lender" + "info calendar"; + grid-template-columns: 45rem 3fr; + column-gap: 100px; +} + +.grid { + &-lender { + grid-area: lender; + } + + &-product { + grid-area: product; + } + + &-message { + grid-area: message; + } + + &-calendar { + grid-area: calendar; + } + + &-info { + grid-area: info; + } +} + +@media screen and (max-width: 992px) { + .grid-template-loans, .grid-template-product, .grid-template-conversation { + display: flex; + flex-direction: column; + } + .lender { + display: none; + } +} diff --git a/assets/styles/_group.scss b/assets/styles/_group.scss new file mode 100644 index 0000000..1e755a6 --- /dev/null +++ b/assets/styles/_group.scss @@ -0,0 +1,21 @@ +.card-group { + width: 100%; + + div { + span.badge { + width: fit-content; + } + } +} + +@media screen and (max-width: 991px) { + .group-list { + li { + border-bottom: 1px solid $gray; + + &:last-child { + border: none; + } + } + } +} diff --git a/assets/styles/_headings.scss b/assets/styles/_headings.scss new file mode 100644 index 0000000..a42a117 --- /dev/null +++ b/assets/styles/_headings.scss @@ -0,0 +1,34 @@ +h1, h2, h3, h4, h5, h6 { + color: $heading-color; + font-weight: $font-weight-semibold; +} + +h1 { + font-size: 40px; + font-weight: 600; + line-height: 48.41px; +} + +h2 { + font-size: 32px; + font-weight: 600; + line-height: 38.73px; +} + +h3 { + font-size: 28px; + font-weight: 600; + line-height: 33.89px; +} + +h4 { + font-size: 24px; + font-weight: 600; + line-height: 29.05px; +} + +h5 { + font-size: 20px; + font-weight: 600; + line-height: 24.2px; +} diff --git a/assets/styles/_lender.scss b/assets/styles/_lender.scss new file mode 100644 index 0000000..96f86ab --- /dev/null +++ b/assets/styles/_lender.scss @@ -0,0 +1,11 @@ +.avatar { + width: 24px; + height: 24px; + font-size: 24px; + + &-icon { + &::before { + display: block; + } + } +} diff --git a/assets/styles/_my-account.scss b/assets/styles/_my-account.scss new file mode 100644 index 0000000..777cb98 --- /dev/null +++ b/assets/styles/_my-account.scss @@ -0,0 +1,39 @@ +.myAccount{ + border-bottom: 1px solid $gray-border; + > .myAccount-header { + display: flex; + align-items: center; + > svg { + width: 20px; + height: 20px; + margin-right: 10px; + font-weight: 400; + > path { + fill: $secondary; + } + } + } + + .myAccount-body { + > div { + > svg { + width: 20px; + height: 20px; + > path { + fill: $secondary; + font-weight: lighter; + } + } + } + } +} + +.form-switch { + padding-left: 1em; +} + +@media screen and (min-width: 768px) { + .myAccount { + border-bottom: none; + } +} diff --git a/assets/styles/_pagination.scss b/assets/styles/_pagination.scss new file mode 100644 index 0000000..d0e45e8 --- /dev/null +++ b/assets/styles/_pagination.scss @@ -0,0 +1,41 @@ +._pagination { + display: flex; + align-items: center; + justify-content: space-between; + + > .pagination-items { + padding: 8px 15px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: rgba(102, 112, 128, 0.25) !important; + } + } + + > .pagination-list { + > ul { + margin: 0; + padding: 0; + display: inline-flex; + > li { + padding: 8px 16px; + margin-right: 8px; + list-style: none; + + &.current { + background-color: rgba(102, 112, 128, 0.25) !important; + } + + &:last-child { + margin-right: 0; + } + + &:hover { + background-color: rgba(102, 112, 128, 0.25) !important; + } + } + } + } +} diff --git a/assets/styles/_product-list.scss b/assets/styles/_product-list.scss new file mode 100644 index 0000000..02eaa5c --- /dev/null +++ b/assets/styles/_product-list.scss @@ -0,0 +1,33 @@ +.product-type { + border-radius: 4px 0 0 4px !important; + border: 1px solid $primary !important; + + &:last-child { + border-radius: 0 4px 4px 0 !important; + } +} + +#p_distance { + display: flex; + justify-content: space-evenly; + + .form-check { + .form-check-label { + margin-left: 8px; + } + } +} + +.input-search { + > input { + border-right: 0; + } + + .search { + background-color: transparent; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; + } +} diff --git a/assets/styles/_product.scss b/assets/styles/_product.scss new file mode 100644 index 0000000..528883b --- /dev/null +++ b/assets/styles/_product.scss @@ -0,0 +1,85 @@ +.color-svg-secondary { + > svg { + width: 16px; + height: 16px; + path { + fill: $secondary; + } + } +} + +.product-img{ + max-width: 100%; + max-height: 300px; +} + +.swiper-wrapper { + align-items: center; +} + +.swiper-slide { + display: flex; + justify-content: center; +} + +.swiper-button-next, +.swiper-button-prev { + background: rgba($black, .5); + width: 30px; + height: 30px; + + &:after { + font-size: 14px; + font-weight: 900; + line-height: 0; + color: white; + } +} + +.read { + overflow: hidden; + + &.more { + max-height: 80px; + transition: max-height .3s ease-in-out; + } + + &.less { + max-height: 500px; + transition: max-height .3s ease-in-out; + } +} + +.read-toggle { + text-decoration: underline; +} + +.avatar { + > svg { + width: 50px; + height: 50px; + } +} + +.loan-application { + padding: 8px 12px; + background-color: $secondary; + width: fit-content; + > p { + margin: 0; + } +} + +.comment { + display: flex; + flex-direction: column; + + > .comment-header { + display: flex; + justify-content: space-between; + + > p { + margin: 0; + } + } +} diff --git a/assets/styles/_reset.scss b/assets/styles/_reset.scss new file mode 100644 index 0000000..faacd17 --- /dev/null +++ b/assets/styles/_reset.scss @@ -0,0 +1,10 @@ +a { + text-decoration: none; + color: inherit; +} + +ul { + margin-top: 0; + padding: 0; + list-style-type: none; +} diff --git a/assets/styles/_upload.scss b/assets/styles/_upload.scss new file mode 100644 index 0000000..dd1f517 --- /dev/null +++ b/assets/styles/_upload.scss @@ -0,0 +1,15 @@ +.upload { + width: fit-content; + .upload-input { + padding: 62px; + border: 1px solid $blue-200; + background-color: $blue-100; + + } + + input[type=file] { + visibility: hidden; + width: 0; + height: 0 + } +} diff --git a/assets/styles/_utilities.scss b/assets/styles/_utilities.scss new file mode 100644 index 0000000..247a372 --- /dev/null +++ b/assets/styles/_utilities.scss @@ -0,0 +1,112 @@ +.hidden { + display: none !important; +} + +.cursor-pointer { + cursor: pointer; +} + +.rotate-180 { + transform: rotate(-180deg); +} + +.-rotate-90 { + transform: rotate(-90deg); +} + +.rotate-90 { + transform: rotate(90deg); +} + +.text-gray { + color: $gray-900; +} + +.text-blue-500 { + color: $blue-500; +} + +.fit-content { + width: fit-content; +} + +.fs-7 { + font-size: $font-size-base * .75; +} + +.lh-0 { + line-height: 0; +} + +.bg-primary-100 { + background-color: $blue-100; +} + +.border-primary-200 { + border: 1px solid $blue-200; +} + +.text-bg-blue-custom { + color: $blue-500; + border: 1px solid $blue-200; + background-color: $blue-100; +} + +.featured-image { + width: 74px; + height: 74px; + border-radius: 4px; + object-fit: cover; +} + +.user-image { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; +} +.img-avatar { + display: inline-block; + background-size: cover; + background-position: center center; + border-radius: 50% +} +.bg-secondary-subtle { + background: $gray-100; +} + +.fw-medium { + font-weight: 500; +} + +.default-user-avatar { + font-size: 40px; +} + +.fit-content { + width: fit-content; +} + +.white-space-normal{ + white-space: normal; +} + +.search-input { + > input { + border-right: 0; + } + &-button { + border: 1px solid #ced4da; + border-left: none; + background-color: $white; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; + } +} +@media screen and (max-width: 992px) { + .img-funding { + width: 100%; + } +} diff --git a/assets/styles/global.scss b/assets/styles/global.scss new file mode 100644 index 0000000..5e9c896 --- /dev/null +++ b/assets/styles/global.scss @@ -0,0 +1,46 @@ +// customize some Bootstrap variables +// $primary: darken(#428bca, 20%); // muse rebuild to see the change + +@import "custom-variables"; + +// the ~ allows you to reference things in node_modules +@import "~bootstrap/scss/bootstrap"; +@import "~bootstrap-icons/font/bootstrap-icons"; +@import "~flatpickr/dist/flatpickr.min.css"; + +@import "reset"; +@import "product-list"; +@import "card"; +@import "pagination"; +@import "product"; +@import "utilities"; +@import "my-account"; +@import "connexion"; +@import "conversations"; +@import "accordion"; +@import "calendar"; +@import "headings"; +@import "lender"; +@import "grid"; +@import "upload"; +@import "address"; +@import "chat"; +@import "group"; + +html, +body { + overflow-x: hidden; +} + +body { + // Hack to force footer in the bottom of the page + display: flex; + flex-direction: column; + min-height: 100vh; +} + +* { + margin: 0; + padding: 0; + font-family: 'Inter', sans-serif; +} diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..c933dc5 --- /dev/null +++ b/bin/console @@ -0,0 +1,17 @@ +#!/usr/bin/env php +=8.1.11", + "ext-apcu": "*", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-intl": "*", + "ext-xsl": "*", + "ext-zip": "*", + "api-platform/core": "^3.1", + "craue/formflow-bundle": "^3.6", + "doctrine/annotations": "^1.0", + "doctrine/doctrine-bundle": "^2.7", + "doctrine/doctrine-migrations-bundle": "^3.2", + "doctrine/orm": "^2.13", + "easycorp/easyadmin-bundle": "v4.5.1", + "friendsofsymfony/ckeditor-bundle": "^2.4", + "geocoder-php/nominatim-provider": "^5.6", + "handcraftedinthealps/goodby-csv": "^1.4", + "hautelook/alice-bundle": "^2.11", + "knplabs/knp-paginator-bundle": "^6.1", + "league/commonmark": "^2.3", + "league/flysystem-aws-s3-v3": "^3.15", + "league/flysystem-bundle": "^3.0", + "league/flysystem-google-cloud-storage": "^3.15", + "league/flysystem-memory": "^3.10", + "meilisearch/meilisearch-php": "^1.0", + "moneyphp/money": "^3.3", + "nelmio/cors-bundle": "^2.2", + "nesbot/carbon": "^2.66", + "nyholm/psr7": "^1.0", + "odolbeau/phone-number-bundle": "^3.9", + "payum/offline": "^1.7", + "payum/payum-bundle": "^2.5", + "phpdocumentor/reflection-docblock": "^5.3", + "phpstan/phpdoc-parser": "^1.11", + "sensio/framework-extra-bundle": "^6.2", + "snc/redis-bundle": "^4.3", + "stof/doctrine-extensions-bundle": "^1.7", + "symfony/asset": "6.2.*", + "symfony/cache": "6.2.*", + "symfony/clock": "6.2.*", + "symfony/console": "6.2.*", + "symfony/doctrine-messenger": "6.2.*", + "symfony/dotenv": "6.2.*", + "symfony/expression-language": "6.2.*", + "symfony/fake-sms-notifier": "6.2.*", + "symfony/flex": "^2", + "symfony/form": "6.2.*", + "symfony/framework-bundle": "6.2.*", + "symfony/google-mailer": "6.2.*", + "symfony/html-sanitizer": "6.2.*", + "symfony/http-client": "6.2.*", + "symfony/mailer": "6.2.*", + "symfony/mercure-bundle": "^0.3.5", + "symfony/messenger": "6.2.*", + "symfony/mime": "6.2.*", + "symfony/monolog-bundle": "^3.8", + "symfony/notifier": "6.2.*", + "symfony/ovh-cloud-notifier": "6.2.*", + "symfony/property-access": "6.2.*", + "symfony/property-info": "6.2.*", + "symfony/proxy-manager-bridge": "6.2.*", + "symfony/rate-limiter": "6.2.*", + "symfony/requirements-checker": "^2.0", + "symfony/runtime": "6.2.*", + "symfony/security-bundle": "6.2.*", + "symfony/serializer": "6.2.*", + "symfony/translation-contracts": "^3.2", + "symfony/twig-bridge": "6.2.*", + "symfony/twig-bundle": "6.2.*", + "symfony/twilio-notifier": "6.2.*", + "symfony/uid": "6.2.*", + "symfony/ux-autocomplete": "^2.7", + "symfony/validator": "6.2.*", + "symfony/webpack-encore-bundle": "^1.16", + "symfony/workflow": "6.2.*", + "symfony/yaml": "6.2.*", + "twig/cssinliner-extra": "^3.4", + "twig/extra-bundle": "^3.4", + "twig/inky-extra": "^3.4", + "twig/intl-extra": "^3.5", + "twig/markdown-extra": "^3.4", + "twig/twig": "^2.12|^3.0", + "webbaard/payum-mollie": "^1.0", + "webmozart/assert": "^1.11", + "willdurand/geocoder-bundle": "^5.18" + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "symfony/flex": true, + "symfony/runtime": true, + "phpstan/extension-installer": true, + "php-http/discovery": true + }, + "optimize-autoloader": true, + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "ckeditor:install --tag=4.22.1": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd", + "requirements-checker": "script" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "6.2.*", + "docker": true + } + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "friendsofphp/php-cs-fixer": "^3.12", + "friendsoftwig/twigcs": "^6.1", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-doctrine": "^1.3", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.2", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.5", + "staabm/annotate-pull-request-from-checkstyle": "^1.8", + "symfony/browser-kit": "6.2.*", + "symfony/css-selector": "6.2.*", + "symfony/debug-bundle": "6.2.*", + "symfony/maker-bundle": "^1.47", + "symfony/panther": "^2.0", + "symfony/phpunit-bridge": "^6.1", + "symfony/web-profiler-bundle": "6.2.*", + "zenstruck/messenger-test": "^1.5" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..3c77d18 --- /dev/null +++ b/composer.lock @@ -0,0 +1,18594 @@ +{ + "_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": "3e1f8a3631e991b528d9f68758299e0e", + "packages": [ + { + "name": "alcohol/iso4217", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/alcohol/iso4217.git", + "reference": "422890279c805e98dcea012f3dbbc184ac8afbe5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alcohol/iso4217/zipball/422890279c805e98dcea012f3dbbc184ac8afbe5", + "reference": "422890279c805e98dcea012f3dbbc184ac8afbe5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alcohol\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com" + } + ], + "description": "ISO 4217 PHP Library", + "homepage": "http://alcohol.github.io/iso4217/", + "keywords": [ + "4217", + "ISO 4217", + "currencies", + "iso", + "library" + ], + "support": { + "issues": "https://github.com/alcohol/iso4217/issues", + "source": "https://github.com/alcohol/iso4217" + }, + "time": "2023-02-28T12:25:39+00:00" + }, + { + "name": "api-platform/core", + "version": "v3.1.11", + "source": { + "type": "git", + "url": "https://github.com/api-platform/core.git", + "reference": "1fc611e59f7e87a89eb72ee069342916fc66c62d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/api-platform/core/zipball/1fc611e59f7e87a89eb72ee069342916fc66c62d", + "reference": "1fc611e59f7e87a89eb72ee069342916fc66c62d", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.0 || ^2.0", + "php": ">=8.1", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^3.1", + "symfony/http-foundation": "^6.1", + "symfony/http-kernel": "^6.1", + "symfony/property-access": "^6.1", + "symfony/property-info": "^6.1", + "symfony/serializer": "^6.1", + "symfony/web-link": "^6.1", + "willdurand/negotiation": "^3.0" + }, + "conflict": { + "doctrine/common": "<3.2.2", + "doctrine/dbal": "<2.10", + "doctrine/mongodb-odm": "<2.4", + "doctrine/orm": "<2.14.0", + "doctrine/persistence": "<1.3", + "elasticsearch/elasticsearch": ">=8.0", + "phpspec/prophecy": "<1.15", + "phpunit/phpunit": "<9.5", + "symfony/service-contracts": "<3", + "symfony/var-exporter": "<6.1.1" + }, + "require-dev": { + "behat/behat": "^3.1", + "behat/mink": "^1.9@dev", + "doctrine/cache": "^1.11 || ^2.1", + "doctrine/common": "^3.2.2", + "doctrine/data-fixtures": "^1.2.2", + "doctrine/dbal": "^3.4.0", + "doctrine/doctrine-bundle": "^1.12 || ^2.0", + "doctrine/mongodb-odm": "^2.2", + "doctrine/mongodb-odm-bundle": "^4.0", + "doctrine/orm": "^2.14", + "elasticsearch/elasticsearch": "^7.11.0", + "friends-of-behat/mink-browserkit-driver": "^1.3.1", + "friends-of-behat/mink-extension": "^2.2", + "friends-of-behat/symfony-extension": "^2.1", + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "jangregor/phpstan-prophecy": "^1.0", + "justinrainbow/json-schema": "^5.2.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpdoc-parser": "^1.13", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-doctrine": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-symfony": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "ramsey/uuid": "^3.7 || ^4.0", + "ramsey/uuid-doctrine": "^1.4", + "soyuka/contexts": "^3.3.6", + "soyuka/stubs-mongodb": "^1.0", + "symfony/asset": "^6.1", + "symfony/browser-kit": "^6.1", + "symfony/cache": "^6.1", + "symfony/config": "^6.1", + "symfony/console": "^6.1", + "symfony/css-selector": "^6.1", + "symfony/dependency-injection": "^6.1", + "symfony/doctrine-bridge": "^6.1", + "symfony/dom-crawler": "^6.1", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^6.1", + "symfony/expression-language": "^6.1", + "symfony/finder": "^6.1", + "symfony/form": "^6.1", + "symfony/framework-bundle": "^6.1", + "symfony/http-client": "^6.1", + "symfony/intl": "^6.1", + "symfony/maker-bundle": "^1.24", + "symfony/mercure-bundle": "*", + "symfony/messenger": "^6.1", + "symfony/phpunit-bridge": "^6.1", + "symfony/routing": "^6.1", + "symfony/security-bundle": "^6.1", + "symfony/security-core": "^6.1", + "symfony/twig-bundle": "^6.1", + "symfony/uid": "^6.1", + "symfony/validator": "^6.1", + "symfony/web-profiler-bundle": "^6.1", + "symfony/yaml": "^6.1", + "twig/twig": "^1.42.3 || ^2.12 || ^3.0", + "webonyx/graphql-php": "^14.0 || ^15.0" + }, + "suggest": { + "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.", + "elasticsearch/elasticsearch": "To support Elasticsearch.", + "ocramius/package-versions": "To display the API Platform's version in the debug bar.", + "phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.", + "psr/cache-implementation": "To use metadata caching.", + "ramsey/uuid": "To support Ramsey's UUID identifiers.", + "symfony/cache": "To have metadata caching when using Symfony integration.", + "symfony/config": "To load XML configuration files.", + "symfony/expression-language": "To use authorization features.", + "symfony/http-client": "To use the HTTP cache invalidation system.", + "symfony/messenger": "To support messenger integration.", + "symfony/security": "To use authorization features.", + "symfony/twig-bundle": "To use the Swagger UI integration.", + "symfony/uid": "To support Symfony UUID/ULID identifiers.", + "symfony/web-profiler-bundle": "To use the data collector.", + "webonyx/graphql-php": "To support GraphQL." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2.x-dev" + }, + "symfony": { + "require": "^6.1" + } + }, + "autoload": { + "psr-4": { + "ApiPlatform\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "kevin@dunglas.fr", + "homepage": "https://dunglas.fr" + } + ], + "description": "Build a fully-featured hypermedia or GraphQL API in minutes!", + "homepage": "https://api-platform.com", + "keywords": [ + "Hydra", + "JSON-LD", + "api", + "graphql", + "hal", + "jsonapi", + "openapi", + "rest", + "swagger" + ], + "support": { + "issues": "https://github.com/api-platform/core/issues", + "source": "https://github.com/api-platform/core/tree/v3.1.11" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/api-platform/core", + "type": "tidelift" + } + ], + "time": "2023-05-05T14:18:25+00:00" + }, + { + "name": "aws/aws-crt-php", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/1926277fc71d253dfa820271ac5987bdb193ccf5", + "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "AWS SDK Common Runtime Team", + "email": "aws-sdk-common-runtime@amazon.com" + } + ], + "description": "AWS Common Runtime for PHP", + "homepage": "https://github.com/awslabs/aws-crt-php", + "keywords": [ + "amazon", + "aws", + "crt", + "sdk" + ], + "support": { + "issues": "https://github.com/awslabs/aws-crt-php/issues", + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.1" + }, + "time": "2023-03-24T20:22:19+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "3.270.1", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "efc5a281bcdfb49bc1c608bb1f892403631da077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/efc5a281bcdfb49bc1c608bb1f892403631da077", + "reference": "efc5a281bcdfb49bc1c608bb1f892403631da077", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.0.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "guzzlehttp/promises": "^1.4.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "mtdowling/jmespath.php": "^2.6", + "php": ">=5.5", + "psr/http-message": "^1.0" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Aws\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.270.1" + }, + "time": "2023-05-22T18:23:05+00:00" + }, + { + "name": "behat/transliterator", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0", + "phpunit/phpunit": "^8.5.25 || ^9.5.19" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Transliterator\\": "src/Behat/Transliterator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "support": { + "issues": "https://github.com/Behat/Transliterator/issues", + "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" + }, + "time": "2022-03-30T09:27:43+00:00" + }, + { + "name": "brick/math", + "version": "0.11.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-21T13:15:14+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.3.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-01-11T08:27:00+00:00" + }, + { + "name": "craue/formflow-bundle", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/craue/CraueFormFlowBundle.git", + "reference": "af3db3519a9e62920c439b80d17ff4db689a5d60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/craue/CraueFormFlowBundle/zipball/af3db3519a9e62920c439b80d17ff4db689a5d60", + "reference": "af3db3519a9e62920c439b80d17ff4db689a5d60", + "shasum": "" + }, + "require": { + "php": "^7.3|^8", + "symfony/config": "~4.4|~5.3|^6.0", + "symfony/dependency-injection": "~4.4|~5.3|^6.0", + "symfony/event-dispatcher": "~4.4|~5.3|^6.0", + "symfony/form": "~4.4|~5.3|^6.0", + "symfony/http-foundation": "~4.4|~5.3|^6.0", + "symfony/http-kernel": "~4.4|~5.3|^6.0", + "symfony/options-resolver": "~4.4|~5.3|^6.0", + "symfony/security-core": "~4.4|~5.3|^6.0", + "symfony/translation": "~4.4|~5.3|^6.0", + "symfony/validator": "~4.4|~5.3|^6.0", + "symfony/yaml": "~4.4|~5.3|^6.0" + }, + "require-dev": { + "craue/translations-tests": "^1.1", + "doctrine/annotations": "^1.6", + "doctrine/common": "~2.9|~3.0", + "doctrine/doctrine-bundle": "~1.10|~2.0", + "phpunit/phpunit": "^9.5", + "symfony/browser-kit": "~4.4|~5.3|^6.0", + "symfony/css-selector": "~4.4|~5.3|^6.0", + "symfony/mime": "~4.4|~5.3|^6.0", + "symfony/phpunit-bridge": "^6", + "symfony/security-bundle": "~4.4|~5.3|^6.0", + "symfony/twig-bundle": "~4.4|~5.3|^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + }, + "symfony": { + "require": "~4.4|~5.3|^6.0" + } + }, + "autoload": { + "psr-4": { + "Craue\\FormFlowBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Raue", + "email": "christian.raue@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/craue/CraueFormFlowBundle/contributors" + } + ], + "description": "Multi-step forms for your Symfony project.", + "homepage": "https://github.com/craue/CraueFormFlowBundle", + "keywords": [ + "form", + "step", + "symfony", + "wizard" + ], + "support": { + "issues": "https://github.com/craue/CraueFormFlowBundle/issues", + "source": "https://github.com/craue/CraueFormFlowBundle/tree/3.6.0" + }, + "time": "2022-01-24T14:43:05+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/annotations", + "version": "1.14.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "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.14.3" + }, + "time": "2023-02-01T09:20:38+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": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "db8cda536a034337f7dd63febecc713d4957f9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/db8cda536a034337f7dd63febecc713d4957f9ee", + "reference": "db8cda536a034337f7dd63febecc713d4957f9ee", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^10.0", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "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" + } + ], + "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/2.1.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%2Fcollections", + "type": "tidelift" + } + ], + "time": "2022-12-27T23:41:38+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/data-fixtures", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4", + "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<2.13", + "doctrine/orm": "<2.12", + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "doctrine/dbal": "^2.13 || ^3.0", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.12", + "ext-sqlite3": "*", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0", + "symfony/cache": "^5.0 || ^6.0", + "vimeo/psalm": "^4.10 || ^5.9" + }, + "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\\": "src" + } + }, + "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.6.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2023-04-20T13:08:54+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "11.1.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2022.3", + "phpstan/phpstan": "1.10.9", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.6", + "psalm/plugin-phpunit": "0.18.4", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.6.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2023-04-14T07:25:38+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "7539b3c8bd620f7df6c2c6d510204bd2ce0064e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/7539b3c8bd620f7df6c2c6d510204bd2ce0064e3", + "reference": "7539b3c8bd620f7df6c2c6d510204bd2ce0064e3", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^3.6.0", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.4 || ^8.0", + "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/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/orm": "<2.11 || >=3.0", + "twig/twig": "<1.34 || >=2.0 <2.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/coding-standard": "^9.0", + "doctrine/deprecations": "^1.0", + "doctrine/orm": "^2.11 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpunit/phpunit": "^9.5.26 || ^10.0", + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^4", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1", + "symfony/property-info": "^5.4 || ^6.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0", + "symfony/twig-bridge": "^5.4 || ^6.0", + "symfony/validator": "^5.4 || ^6.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0", + "symfony/yaml": "^5.4 || ^6.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0", + "vimeo/psalm": "^4.30" + }, + "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.9.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": "2023-04-14T05:39:34+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": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:59:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "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/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.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%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-14T08:49:07+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.5.1", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^4.4.16 || ^5.4 || ^6.0", + "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^6.2" + }, + "conflict": { + "doctrine/orm": "<2.12" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "doctrine/orm": "^2.13", + "doctrine/persistence": "^2 || ^3", + "doctrine/sql-formatter": "^1.0", + "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.24", + "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", + "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.6.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%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2023-02-15T18:49:46+00:00" + }, + { + "name": "doctrine/orm", + "version": "2.15.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "9bc6f5b4ac6f1e7d4248b2efbd01a748782075bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/9bc6f5b4ac6f1e7d4248b2efbd01a748782075bc", + "reference": "9bc6f5b4ac6f1e7d4248b2efbd01a748782075bc", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.12.1 || ^2.1.1", + "doctrine/collections": "^1.5 || ^2.1", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^2", + "doctrine/persistence": "^2.4 || ^3", + "ext-ctype": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^4.2 || ^5.0 || ^6.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 3.0" + }, + "require-dev": { + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^12.0", + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/phpstan": "~1.4.10 || 1.10.14", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "vimeo/psalm": "4.30.0 || 5.11.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.15.1" + }, + "time": "2023-05-07T18:56:25+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.1.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/8bf8ab15960787f1a49d405f6eb8c787b4841119", + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^11", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.9.4", + "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.30.0 || 5.3.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.4" + }, + "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": "2023-02-03T11:13:07+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": "easycorp/easyadmin-bundle", + "version": "v4.5.1", + "source": { + "type": "git", + "url": "https://github.com/EasyCorp/EasyAdminBundle.git", + "reference": "9c00e8128b99000e8e400315abe740f864d3e6e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/9c00e8128b99000e8e400315abe740f864d3e6e4", + "reference": "9c00e8128b99000e8e400315abe740f864d3e6e4", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "^2.5", + "doctrine/orm": "^2.10", + "ext-json": "*", + "php": ">=8.0.2", + "symfony/asset": "^5.4|^6.0", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/deprecation-contracts": "^3.0", + "symfony/doctrine-bridge": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^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/property-access": "^5.4|^6.0", + "symfony/security-bundle": "^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" + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^3.4", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-phpunit": "^1.2", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.2", + "psr/log": "^1.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "EasyCorp\\Bundle\\EasyAdminBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Project Contributors", + "homepage": "https://github.com/EasyCorp/EasyAdminBundle/graphs/contributors" + } + ], + "description": "Admin generator for Symfony applications", + "homepage": "https://github.com/EasyCorp/EasyAdminBundle", + "keywords": [ + "admin", + "backend", + "generator" + ], + "support": { + "issues": "https://github.com/EasyCorp/EasyAdminBundle/issues", + "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.5.1" + }, + "funding": [ + { + "url": "https://github.com/javiereguiluz", + "type": "github" + } + ], + "time": "2023-01-19T19:18:11+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-14T14:17:03+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^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": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "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.21-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.22.0" + }, + "time": "2023-05-14T12:31:37+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v6.5.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2", + "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.5.0" + }, + "time": "2023-05-12T15:47:07+00:00" + }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.15", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "3ca65b8edb8d96b46fedc9bb4911396516347129" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/3ca65b8edb8d96b46fedc9bb4911396516347129", + "reference": "3ca65b8edb8d96b46fedc9bb4911396516347129", + "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.15" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2023-05-16T13:18:04+00:00" + }, + { + "name": "friendsofsymfony/ckeditor-bundle", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle.git", + "reference": "a4df4056b2832881e17b939e83f25406a6cc6414" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSCKEditorBundle/zipball/a4df4056b2832881e17b939e83f25406a6cc6414", + "reference": "a4df4056b2832881e17b939e83f25406a6cc6414", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-zip": "*", + "php": "^7.1|^8.0", + "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/expression-language": "^4.4 || ^5.0 || ^6.0", + "symfony/form": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4 || ^5.0 || ^6.0", + "symfony/property-access": "^4.4 || ^5.0 || ^6.0", + "symfony/routing": "^4.4 || ^5.0 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0", + "twig/twig": "^2.4 || ^3.0" + }, + "conflict": { + "sebastian/environment": "<1.3.4", + "sebastian/exporter": "<2.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "matthiasnoback/symfony-dependency-injection-test": "^3.0 || ^4.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0" + }, + "suggest": { + "egeloen/form-extra-bundle": "Allows to load CKEditor asynchronously" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "FOS\\CKEditorBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "FriendsOfSymfony Community", + "homepage": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/graphs/contributors" + } + ], + "description": "Provides a CKEditor integration for your Symfony project.", + "keywords": [ + "CKEditor" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/issues", + "source": "https://github.com/FriendsOfSymfony/FOSCKEditorBundle/tree/2.4.0" + }, + "time": "2022-01-07T12:34:18+00:00" + }, + { + "name": "gedmo/doctrine-extensions", + "version": "v3.11.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", + "reference": "ae4bdf0d567e06b6bb1902a560ee78961b230953" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/ae4bdf0d567e06b6bb1902a560ee78961b230953", + "reference": "ae4bdf0d567e06b6bb1902a560ee78961b230953", + "shasum": "" + }, + "require": { + "behat/transliterator": "~1.2", + "doctrine/annotations": "^1.13 || ^2.0", + "doctrine/collections": "^1.2 || ^2.0", + "doctrine/common": "^2.13 || ^3.0", + "doctrine/event-manager": "^1.2 || ^2.0", + "doctrine/persistence": "^2.2 || ^3.0", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/cache": "^4.4 || ^5.3 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0" + }, + "conflict": { + "doctrine/cache": "<1.11", + "doctrine/dbal": "<2.13.1 || ^3.0 <3.2", + "doctrine/mongodb-odm": "<2.3", + "doctrine/orm": "<2.10.2", + "sebastian/comparator": "<2.0" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/doctrine-bundle": "^2.3", + "doctrine/mongodb-odm": "^2.3", + "doctrine/orm": "^2.10.2", + "friendsofphp/php-cs-fixer": "^3.4.0,<3.10", + "nesbot/carbon": "^2.55", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-doctrine": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/console": "^4.4 || ^5.3 || ^6.0", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^4.4 || ^5.3 || ^6.0" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM", + "symfony/cache": "to cache parsed annotations" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.12-dev" + } + }, + "autoload": { + "psr-4": { + "Gedmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gediminas Morkevicius", + "email": "gediminas.morkevicius@gmail.com" + }, + { + "name": "Gustavo Falco", + "email": "comfortablynumb84@gmail.com" + }, + { + "name": "David Buchmann", + "email": "david@liip.ch" + } + ], + "description": "Doctrine behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine", + "extensions", + "gedmo", + "loggable", + "nestedset", + "odm", + "orm", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "support": { + "email": "gediminas.morkevicius@gmail.com", + "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.11.1", + "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" + }, + "time": "2023-02-20T19:24:07+00:00" + }, + { + "name": "geocoder-php/common-http", + "version": "4.5.0", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/php-common-http.git", + "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/4ee2cee60d21631e2a09c196bf6b9fd296bca728", + "reference": "4ee2cee60d21631e2a09c196bf6b9fd296bca728", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "php-http/client-implementation": "^1.0", + "php-http/discovery": "^1.6", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0", + "psr/http-message-implementation": "^1.0", + "willdurand/geocoder": "^4.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.0", + "php-http/mock-client": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/stopwatch": "~2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Geocoder\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Common files for HTTP based Geocoders", + "homepage": "http://geocoder-php.org", + "keywords": [ + "http geocoder" + ], + "support": { + "source": "https://github.com/geocoder-php/php-common-http/tree/4.5.0" + }, + "time": "2022-07-30T12:09:30+00:00" + }, + { + "name": "geocoder-php/nominatim-provider", + "version": "5.7.0", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/nominatim-provider.git", + "reference": "a50486161f6babad7b1ed7ee7bf86147b0844413" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/nominatim-provider/zipball/a50486161f6babad7b1ed7ee7bf86147b0844413", + "reference": "a50486161f6babad7b1ed7ee7bf86147b0844413", + "shasum": "" + }, + "require": { + "geocoder-php/common-http": "^4.1", + "php": "^7.4 || ^8.0", + "willdurand/geocoder": "^4.0" + }, + "provide": { + "geocoder-php/provider-implementation": "1.0" + }, + "require-dev": { + "geocoder-php/provider-integration-tests": "^1.0", + "php-http/curl-client": "^2.2", + "php-http/message": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Geocoder\\Provider\\Nominatim\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "william.durand1@gmail.com" + } + ], + "description": "Geocoder Nominatim adapter", + "homepage": "http://geocoder-php.org/Geocoder/", + "support": { + "source": "https://github.com/geocoder-php/nominatim-provider/tree/5.7.0" + }, + "time": "2023-03-01T10:18:27+00:00" + }, + { + "name": "geocoder-php/plugin", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/plugin.git", + "reference": "ecda7277f9c3742cd6cf4eeea01b69065a8c2d28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/plugin/zipball/ecda7277f9c3742cd6cf4eeea01b69065a8c2d28", + "reference": "ecda7277f9c3742cd6cf4eeea01b69065a8c2d28", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "php-http/promise": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "willdurand/geocoder": "^4.0" + }, + "require-dev": { + "cache/void-adapter": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Geocoder\\Plugin\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Plugins to Geocoder providers", + "homepage": "http://geocoder-php.org", + "keywords": [ + "geocoder plugin" + ], + "support": { + "source": "https://github.com/geocoder-php/plugin/tree/1.5.0" + }, + "time": "2022-07-30T13:42:14+00:00" + }, + { + "name": "giggsey/libphonenumber-for-php", + "version": "8.13.11", + "source": { + "type": "git", + "url": "https://github.com/giggsey/libphonenumber-for-php.git", + "reference": "e2395dadce92f139fc6ec71bfe8ae46a2e942944" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/e2395dadce92f139fc6ec71bfe8ae46a2e942944", + "reference": "e2395dadce92f139fc6ec71bfe8ae46a2e942944", + "shasum": "" + }, + "require": { + "giggsey/locale": "^1.7|^2.0", + "php": ">=5.3.2", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "pear/pear-core-minimal": "^1.9", + "pear/pear_exception": "^1.0", + "pear/versioncontrol_git": "^0.5", + "phing/phing": "^2.7", + "php-coveralls/php-coveralls": "^1.0|^2.0", + "symfony/console": "^2.8|^3.0|^v4.4|^v5.2", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "libphonenumber\\": "src/" + }, + "exclude-from-classmap": [ + "/src/data/", + "/src/carrier/data/", + "/src/geocoding/data/", + "/src/timezone/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Joshua Gigg", + "email": "giggsey@gmail.com", + "homepage": "https://giggsey.com/" + } + ], + "description": "PHP Port of Google's libphonenumber", + "homepage": "https://github.com/giggsey/libphonenumber-for-php", + "keywords": [ + "geocoding", + "geolocation", + "libphonenumber", + "mobile", + "phonenumber", + "validation" + ], + "support": { + "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", + "source": "https://github.com/giggsey/libphonenumber-for-php" + }, + "time": "2023-04-27T11:06:55+00:00" + }, + { + "name": "giggsey/locale", + "version": "2.4", + "source": { + "type": "git", + "url": "https://github.com/giggsey/Locale.git", + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/giggsey/Locale/zipball/a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "ext-json": "*", + "pear/pear-core-minimal": "^1.9", + "pear/pear_exception": "^1.0", + "pear/versioncontrol_git": "^0.5", + "phing/phing": "^2.7", + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.5|^9.5", + "symfony/console": "^5.0|^6.0", + "symfony/filesystem": "^5.0|^6.0", + "symfony/finder": "^5.0|^6.0", + "symfony/process": "^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Giggsey\\Locale\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joshua Gigg", + "email": "giggsey@gmail.com", + "homepage": "https://giggsey.com/" + } + ], + "description": "Locale functions required by libphonenumber-for-php", + "support": { + "issues": "https://github.com/giggsey/Locale/issues", + "source": "https://github.com/giggsey/Locale/tree/2.4" + }, + "time": "2023-04-13T07:40:58+00:00" + }, + { + "name": "google/auth", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-auth-library-php.git", + "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/07f7f6305f1b7df32b2acf6e101c1225c839c7ac", + "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^6.0", + "guzzlehttp/guzzle": "^6.2.1|^7.0", + "guzzlehttp/psr7": "^2.4.5", + "php": "^7.4||^8.0", + "psr/cache": "^1.0||^2.0||^3.0", + "psr/http-message": "^1.1||^2.0" + }, + "require-dev": { + "guzzlehttp/promises": "^1.3", + "kelvinmo/simplejwt": "0.7.0", + "phpseclib/phpseclib": "^3.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0.0", + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "support": { + "docs": "https://googleapis.github.io/google-auth-library-php/main/", + "issues": "https://github.com/googleapis/google-auth-library-php/issues", + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.28.0" + }, + "time": "2023-05-11T21:58:18+00:00" + }, + { + "name": "google/cloud-core", + "version": "v1.51.2", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-cloud-php-core.git", + "reference": "85dc48d62143f4bbfaa34c24da95003371de7b79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/85dc48d62143f4bbfaa34c24da95003371de7b79", + "reference": "85dc48d62143f4bbfaa34c24da95003371de7b79", + "shasum": "" + }, + "require": { + "google/auth": "^1.18", + "guzzlehttp/guzzle": "^5.3|^6.5.7|^7.4.4", + "guzzlehttp/promises": "^1.3", + "guzzlehttp/psr7": "^1.7|^2.0", + "monolog/monolog": "^1.1|^2.0|^3.0", + "php": ">=7.4", + "psr/http-message": "^1.0", + "rize/uri-template": "~0.3" + }, + "require-dev": { + "erusev/parsedown": "^1.6", + "google/cloud-common-protos": "^0.4", + "google/gax": "^1.9", + "opis/closure": "^3", + "phpdocumentor/reflection": "^5.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "2.*" + }, + "suggest": { + "opis/closure": "May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.", + "symfony/lock": "Required for the Spanner cached based session pool. Please require the following commit: 3.3.x-dev#1ba6ac9" + }, + "bin": [ + "bin/google-cloud-batch" + ], + "type": "library", + "extra": { + "component": { + "id": "cloud-core", + "target": "googleapis/google-cloud-php-core.git", + "path": "Core", + "entry": "src/ServiceBuilder.php" + } + }, + "autoload": { + "psr-4": { + "Google\\Cloud\\Core\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", + "support": { + "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.51.2" + }, + "time": "2023-05-05T23:01:42+00:00" + }, + { + "name": "google/cloud-storage", + "version": "v1.31.2", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-cloud-php-storage.git", + "reference": "7fe96d56856cda550b21779bb95a066b264852da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/7fe96d56856cda550b21779bb95a066b264852da", + "reference": "7fe96d56856cda550b21779bb95a066b264852da", + "shasum": "" + }, + "require": { + "google/cloud-core": "^1.51.1", + "google/crc32": "^0.2.0", + "php": ">=7.4", + "ramsey/uuid": "^4.2.3" + }, + "require-dev": { + "erusev/parsedown": "^1.6", + "google/cloud-pubsub": "^1.0", + "phpdocumentor/reflection": "^5.0", + "phpseclib/phpseclib": "^2.0||^3.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "2.*" + }, + "suggest": { + "google/cloud-pubsub": "May be used to register a topic to receive bucket notifications.", + "phpseclib/phpseclib": "May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2." + }, + "type": "library", + "extra": { + "component": { + "id": "cloud-storage", + "target": "googleapis/google-cloud-php-storage.git", + "path": "Storage", + "entry": "src/StorageClient.php" + } + }, + "autoload": { + "psr-4": { + "Google\\Cloud\\Storage\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Cloud Storage Client for PHP", + "support": { + "source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.31.2" + }, + "time": "2023-05-05T23:01:42+00:00" + }, + { + "name": "google/crc32", + "version": "v0.2.0", + "source": { + "type": "git", + "url": "https://github.com/google/php-crc32.git", + "reference": "948f7945d803dcc1a375152c72f63144c2dadf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/php-crc32/zipball/948f7945d803dcc1a375152c72f63144c2dadf23", + "reference": "948f7945d803dcc1a375152c72f63144c2dadf23", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "v3.15", + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\CRC32\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Andrew Brampton", + "email": "bramp@google.com" + } + ], + "description": "Various CRC32 implementations", + "homepage": "https://github.com/google/php-crc32", + "support": { + "issues": "https://github.com/google/php-crc32/issues", + "source": "https://github.com/google/php-crc32/tree/v0.2.0" + }, + "time": "2023-04-16T22:44:57+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-05-21T14:04:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-05-21T12:31:43+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:11:26+00:00" + }, + { + "name": "handcraftedinthealps/goodby-csv", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/handcraftedinthealps/goodby-csv.git", + "reference": "6dc287cb3c3b8d055a0a4889661ef2aeb0bbdfa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/handcraftedinthealps/goodby-csv/zipball/6dc287cb3c3b8d055a0a4889661ef2aeb0bbdfa8", + "reference": "6dc287cb3c3b8d055a0a4889661ef2aeb0bbdfa8", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-mbstring": "^1.0" + }, + "replace": { + "goodby/csv": "self.version" + }, + "require-dev": { + "mikey179/vfsstream": "^1.1", + "mockery/mockery": "^1.0", + "phpspec/prophecy": "^1.14", + "phpunit/phpunit": "^8.5", + "rector/rector": "^0.12.5", + "suin/php-expose": "^1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Goodby\\CSV": "src/" + }, + "exclude-from-classmap": [ + "/src/Goodby/CSV/Export/Tests/", + "/src/Goodby/CSV/Import/Tests/", + "/src/Goodby/CSV/TestHelper/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "reoring", + "email": "mori.reo@gmail.com", + "homepage": "https://www.facebook.com/reoring", + "role": "Developer" + }, + { + "name": "suin", + "email": "suinyeze@gmail.com", + "homepage": "https://www.facebook.com/suinyeze", + "role": "Developer, Renaming Specialist" + }, + { + "name": "Handcrafted in the alps contributors", + "homepage": "https://github.com/handcraftedinthealps/goodby-csv/graphs/contributors", + "role": "Contributors" + } + ], + "description": "CSV import/export library", + "homepage": "https://github.com/handcraftedinthealps/goodby-csv", + "keywords": [ + "csv", + "export", + "import" + ], + "support": { + "source": "https://github.com/handcraftedinthealps/goodby-csv/tree/1.4.2" + }, + "time": "2023-03-15T19:52:06+00:00" + }, + { + "name": "hautelook/alice-bundle", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/AliceBundle.git", + "reference": "ebaf24ec0318583d8c022966687e2a4979bb9af8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/AliceBundle/zipball/ebaf24ec0318583d8c022966687e2a4979bb9af8", + "reference": "ebaf24ec0318583d8c022966687e2a4979bb9af8", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.5", + "doctrine/doctrine-bundle": "^2.5", + "doctrine/orm": "^2.10.0", + "doctrine/persistence": "^2.2 || ^3.0", + "php": "^8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/finder": "^5.4.2 || ^6.0", + "symfony/framework-bundle": "^5.4.2 || ^6.0", + "theofidry/alice-data-fixtures": "^1.5" + }, + "require-dev": { + "phpspec/prophecy": "^1.7", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "bin-dir": "bin", + "sort-packages": true + }, + "autoload": { + "psr-4": { + "Hautelook\\AliceBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Baldur Rensch", + "email": "brensch@gmail.com" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com", + "homepage": "https://github.com/theofidry" + } + ], + "description": "Symfony bundle to manage fixtures with Alice and Faker.", + "keywords": [ + "Fixture", + "alice", + "faker", + "orm", + "symfony" + ], + "support": { + "issues": "https://github.com/theofidry/AliceBundle/issues", + "source": "https://github.com/theofidry/AliceBundle/tree/2.12.0" + }, + "time": "2023-03-26T09:04:39+00:00" + }, + { + "name": "knplabs/knp-components", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/knp-components.git", + "reference": "6b6efa81ee894e325744bf785d50dc962937b1f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/knp-components/zipball/6b6efa81ee894e325744bf785d50dc962937b1f2", + "reference": "6b6efa81ee894e325744bf785d50dc962937b1f2", + "shasum": "" + }, + "require": { + "php": "^8.0", + "symfony/event-dispatcher-contracts": "^3.0" + }, + "conflict": { + "doctrine/dbal": "<2.10" + }, + "require-dev": { + "doctrine/mongodb-odm": "^2.4", + "doctrine/orm": "^2.12", + "doctrine/phpcr-odm": "^1.6", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.8", + "phpunit/phpunit": "^9.5", + "propel/propel1": "^1.7", + "ruflin/elastica": "^7.0", + "solarium/solarium": "^6.0", + "symfony/http-foundation": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/property-access": "^5.4 || ^6.0" + }, + "suggest": { + "doctrine/common": "to allow usage pagination with Doctrine ArrayCollection", + "doctrine/mongodb-odm": "to allow usage pagination with Doctrine ODM MongoDB", + "doctrine/orm": "to allow usage pagination with Doctrine ORM", + "doctrine/phpcr-odm": "to allow usage pagination with Doctrine ODM PHPCR", + "propel/propel1": "to allow usage pagination with Propel ORM", + "ruflin/elastica": "to allow usage pagination with ElasticSearch Client", + "solarium/solarium": "to allow usage pagination with Solarium Client", + "symfony/http-foundation": "to retrieve arguments from Request", + "symfony/property-access": "to allow sorting arrays" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Component\\": "src/Knp/Component" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "https://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/knp-components/contributors" + } + ], + "description": "Knplabs component library", + "homepage": "http://github.com/KnpLabs/knp-components", + "keywords": [ + "components", + "knp", + "knplabs", + "pager", + "paginator" + ], + "support": { + "issues": "https://github.com/KnpLabs/knp-components/issues", + "source": "https://github.com/KnpLabs/knp-components/tree/v4.1.0" + }, + "time": "2022-12-19T09:36:54+00:00" + }, + { + "name": "knplabs/knp-paginator-bundle", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpPaginatorBundle.git", + "reference": "8da698f0856b1d9c9c02dcacbfc382c5c9440c80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpPaginatorBundle/zipball/8da698f0856b1d9c9c02dcacbfc382c5c9440c80", + "reference": "8da698f0856b1d9c9c02dcacbfc382c5c9440c80", + "shasum": "" + }, + "require": { + "knplabs/knp-components": "^4.1", + "php": "^8.0", + "symfony/config": "^6.0", + "symfony/dependency-injection": "^6.0", + "symfony/event-dispatcher": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/routing": "^6.0", + "symfony/translation": "^6.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "symfony/expression-language": "^6.0", + "symfony/templating": "^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\PaginatorBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "https://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpPaginatorBundle/contributors" + } + ], + "description": "Paginator bundle for Symfony to automate pagination and simplify sorting and other features", + "homepage": "https://github.com/KnpLabs/KnpPaginatorBundle", + "keywords": [ + "bundle", + "knp", + "knplabs", + "pager", + "pagination", + "paginator", + "symfony" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpPaginatorBundle/issues", + "source": "https://github.com/KnpLabs/KnpPaginatorBundle/tree/v6.2.0" + }, + "time": "2023-03-25T06:51:40+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "4.11.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "169123b3ede20a9193480c53de2a8194f8c073ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/169123b3ede20a9193480c53de2a8194f8c073ec", + "reference": "169123b3ede20a9193480c53de2a8194f8c073ec", + "shasum": "" + }, + "require": { + "php": "~8.1.0 || ~8.2.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0.0", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^2.3.0", + "laminas/laminas-stdlib": "^3.6.1", + "phpunit/phpunit": "^10.0.9", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.7.1" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component" + }, + "type": "library", + "autoload": { + "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": "2023-05-14T12:05:38+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", + "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "ext-json": "*", + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.1.0 || ~8.2.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.26.19", + "lcobucci/clock": "^3.0", + "lcobucci/coding-standard": "^9.0", + "phpbench/phpbench": "^1.2.8", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.3", + "phpstan/phpstan-deprecation-rules": "^1.1.2", + "phpstan/phpstan-phpunit": "^1.3.8", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.0.12" + }, + "suggest": { + "lcobucci/clock": ">= 3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-02-25T21:35:16+00:00" + }, + { + "name": "league/commonmark", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "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 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-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": "2023-03-24T15:16:10+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "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": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.15.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.15.1" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-04T09:04:26+00:00" + }, + { + "name": "league/flysystem-aws-s3-v3", + "version": "3.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", + "reference": "d8de61ee10b6a607e7996cff388c5a3a663e8c8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d8de61ee10b6a607e7996cff388c5a3a663e8c8a", + "reference": "d8de61ee10b6a607e7996cff388c5a3a663e8c8a", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "^3.220.0", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3V3\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "AWS S3 filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "aws", + "file", + "files", + "filesystem", + "s3", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/flysystem-bundle", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-bundle.git", + "reference": "4b6e8095dbb9bed9971b4a5d8158cc6d8e720a26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-bundle/zipball/4b6e8095dbb9bed9971b4a5d8158cc6d8e720a26", + "reference": "4b6e8095dbb9bed9971b4a5d8158cc6d8e720a26", + "shasum": "" + }, + "require": { + "league/flysystem": "^3.0", + "php": ">=8.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/options-resolver": "^5.4|^6.0" + }, + "require-dev": { + "league/flysystem-async-aws-s3": "^3.1", + "league/flysystem-aws-s3-v3": "^3.1", + "league/flysystem-azure-blob-storage": "^3.1", + "league/flysystem-ftp": "^3.1", + "league/flysystem-google-cloud-storage": "^3.1", + "league/flysystem-memory": "^3.1", + "league/flysystem-sftp-v3": "^3.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "League\\FlysystemBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Symfony bundle integrating Flysystem into Symfony 5.4+ applications", + "support": { + "issues": "https://github.com/thephpleague/flysystem-bundle/issues", + "source": "https://github.com/thephpleague/flysystem-bundle/tree/3.1.0" + }, + "time": "2022-12-26T19:09:49+00:00" + }, + { + "name": "league/flysystem-google-cloud-storage", + "version": "3.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-google-cloud-storage.git", + "reference": "c7949cd9919801f9820902e02d148e7158ef80e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-google-cloud-storage/zipball/c7949cd9919801f9820902e02d148e7158ef80e0", + "reference": "c7949cd9919801f9820902e02d148e7158ef80e0", + "shasum": "" + }, + "require": { + "google/cloud-storage": "^1.23", + "league/flysystem": "^3.10.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\GoogleCloudStorage\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Google Cloud Storage adapter for Flysystem.", + "keywords": [ + "Flysystem", + "filesystem", + "gcs", + "google cloud storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-google-cloud-storage/issues", + "source": "https://github.com/thephpleague/flysystem-google-cloud-storage/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/flysystem-memory", + "version": "3.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-memory.git", + "reference": "b6caa40a84ae1d7dd9c4c1ff8b797e08790ee892" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-memory/zipball/b6caa40a84ae1d7dd9c4c1ff8b797e08790ee892", + "reference": "b6caa40a84ae1d7dd9c4c1ff8b797e08790ee892", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\InMemory\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "In-memory filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "memory" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-memory/issues", + "source": "https://github.com/thephpleague/flysystem-memory/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.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": "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-components", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-components.git", + "reference": "06f49e726a7fd06063e80f5f8b045fb9128e6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/06f49e726a7fd06063e80f5f8b045fb9128e6c43", + "reference": "06f49e726a7fd06063e80f5f8b045fb9128e6c43", + "shasum": "" + }, + "require": { + "ext-json": "*", + "league/uri-interfaces": "^2.3", + "php": "^7.4 || ^8.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.8.0", + "guzzlehttp/psr7": "^2.2", + "laminas/laminas-diactoros": "^2.11.0", + "league/uri": "^6.0", + "phpstan/phpstan": "^1.7", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "^9.5.20" + }, + "suggest": { + "ext-fileinfo": "Needed to create Data URI from a filepath", + "ext-gmp": "to improve handle IPV4 parsing", + "ext-intl": "to handle IDN host", + "jeremykendall/php-domain-parser": "Public Suffix and Top Level Domain parsing implemented in PHP", + "league/uri": "to allow manipulating URI objects", + "php-64bit": "to improve handle IPV4 parsing", + "psr/http-message-implementation": "to allow manipulating PSR-7 Uri objects" + }, + "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": "URI components manipulation library", + "homepage": "http://uri.thephpleague.com", + "keywords": [ + "authority", + "components", + "fragment", + "host", + "path", + "port", + "query", + "rfc3986", + "scheme", + "uri", + "url", + "userinfo" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-components/issues", + "source": "https://github.com/thephpleague/uri-components/tree/2.4.1" + }, + "funding": [ + { + "url": "https://github.com/nyamsprod", + "type": "github" + } + ], + "time": "2022-05-26T05:50:46+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": "lorenzo/pinky", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/lorenzo/pinky.git", + "reference": "f890472e4a25f89591f176aa03d9588a9d3332a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lorenzo/pinky/zipball/f890472e4a25f89591f176aa03d9588a9d3332a7", + "reference": "f890472e4a25f89591f176aa03d9588a9d3332a7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xsl": "*", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "autoload": { + "files": [ + "src/pinky.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jose Lorenzo Rodriguez", + "email": "jose.zap@gmail.com" + } + ], + "description": "A Foundation for Emails (Inky) template transpiler", + "keywords": [ + "email", + "foundation", + "inky", + "template", + "zurb" + ], + "support": { + "issues": "https://github.com/lorenzo/pinky/issues", + "source": "https://github.com/lorenzo/pinky/tree/1.0.9" + }, + "time": "2023-01-12T16:15:52+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", + "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + }, + "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.8.0" + }, + "time": "2023-04-26T07:27:39+00:00" + }, + { + "name": "meilisearch/meilisearch-php", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/meilisearch/meilisearch-php.git", + "reference": "950d587995bbd72f5eb794a1f3e88eceb34f6245" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/950d587995bbd72f5eb794a1f3e88eceb34f6245", + "reference": "950d587995bbd72f5eb794a1f3e88eceb34f6245", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "php-http/client-common": "^2.0", + "php-http/discovery": "^1.7", + "php-http/httplug": "^2.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "guzzlehttp/guzzle": "^7.1", + "http-interop/http-factory-guzzle": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "1.10.8", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/guzzle": "Use Guzzle ^7 as HTTP client", + "http-interop/http-factory-guzzle": "Factory for guzzlehttp/guzzle" + }, + "type": "library", + "autoload": { + "psr-4": { + "MeiliSearch\\": "src/", + "Meilisearch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Clementine Urquizar", + "email": "clementine@meilisearch.com" + } + ], + "description": "PHP wrapper for the Meilisearch API", + "keywords": [ + "api", + "client", + "instant", + "meilisearch", + "php", + "search" + ], + "support": { + "issues": "https://github.com/meilisearch/meilisearch-php/issues", + "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.1.1" + }, + "time": "2023-04-03T10:05:59+00:00" + }, + { + "name": "mollie/mollie-api-php", + "version": "v2.55.0", + "source": { + "type": "git", + "url": "https://github.com/mollie/mollie-api-php.git", + "reference": "a2be26bd83dd33ea187a2238fbe0b30582c50774" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/a2be26bd83dd33ea187a2238fbe0b30582c50774", + "reference": "a2be26bd83dd33ea187a2238fbe0b30582c50774", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.2", + "ext-curl": "*", + "ext-json": "*", + "ext-openssl": "*", + "php": "^7.2|^8.0" + }, + "require-dev": { + "eloquent/liberator": "^2.0||^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "guzzlehttp/guzzle": "^6.3 || ^7.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^8.5 || ^9.5" + }, + "suggest": { + "mollie/oauth2-mollie-php": "Use OAuth to authenticate with the Mollie API. This is needed for some endpoints. Visit https://docs.mollie.com/ for more information." + }, + "type": "library", + "autoload": { + "psr-4": { + "Mollie\\Api\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Mollie B.V.", + "email": "info@mollie.com" + } + ], + "description": "Mollie API client library for PHP. Mollie is a European Payment Service provider and offers international payment methods such as Mastercard, VISA, American Express and PayPal, and local payment methods such as iDEAL, Bancontact, SOFORT Banking, SEPA direct debit, Belfius Direct Net, KBC Payment Button and various gift cards such as Podiumcadeaukaart and fashioncheque.", + "homepage": "https://www.mollie.com/en/developers", + "keywords": [ + "Apple Pay", + "CBC", + "Przelewy24", + "api", + "bancontact", + "banktransfer", + "belfius", + "belfius direct net", + "charges", + "creditcard", + "direct debit", + "fashioncheque", + "gateway", + "gift cards", + "ideal", + "inghomepay", + "intersolve", + "kbc", + "klarna", + "mistercash", + "mollie", + "paylater", + "payment", + "payments", + "paypal", + "paysafecard", + "podiumcadeaukaart", + "recurring", + "refunds", + "sepa", + "service", + "sliceit", + "sofort", + "sofortbanking", + "subscriptions" + ], + "support": { + "issues": "https://github.com/mollie/mollie-api-php/issues", + "source": "https://github.com/mollie/mollie-api-php/tree/v2.55.0" + }, + "time": "2023-05-09T10:09:56+00:00" + }, + { + "name": "moneyphp/money", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/moneyphp/money.git", + "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/moneyphp/money/zipball/0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", + "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.6" + }, + "require-dev": { + "cache/taggable-cache": "^0.4.0", + "doctrine/instantiator": "^1.0.5", + "ext-bcmath": "*", + "ext-gmp": "*", + "ext-intl": "*", + "florianv/exchanger": "^1.0", + "florianv/swap": "^3.0", + "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3", + "moneyphp/iso-currencies": "^3.2.1", + "php-http/message": "^1.4", + "php-http/mock-client": "^1.0.0", + "phpspec/phpspec": "^3.4.3", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5", + "psr/cache": "^1.0", + "symfony/phpunit-bridge": "^4" + }, + "suggest": { + "ext-bcmath": "Calculate without integer limits", + "ext-gmp": "Calculate without integer limits", + "ext-intl": "Format Money objects with intl", + "florianv/exchanger": "Exchange rates library for PHP", + "florianv/swap": "Exchange rates library for PHP", + "psr/cache-implementation": "Used for Currency caching" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Verraes", + "email": "mathias@verraes.net", + "homepage": "http://verraes.net" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Frederik Bosch", + "email": "f.bosch@genkgo.nl" + } + ], + "description": "PHP implementation of Fowler's Money pattern", + "homepage": "http://moneyphp.org", + "keywords": [ + "Value Object", + "money", + "vo" + ], + "support": { + "issues": "https://github.com/moneyphp/money/issues", + "source": "https://github.com/moneyphp/money/tree/v3.3.3" + }, + "time": "2022-09-21T07:43:36+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:46:10+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^7.5.15" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "files": [ + "src/JmesPath.php" + ], + "psr-4": { + "JmesPath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + }, + "time": "2021-06-14T00:11:39+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "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.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nelmio/alice", + "version": "3.12.2", + "source": { + "type": "git", + "url": "https://github.com/nelmio/alice.git", + "reference": "a020c0767e10dbb7bf1c193e16e94710691133d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/alice/zipball/a020c0767e10dbb7bf1c193e16e94710691133d9", + "reference": "a020c0767e10dbb7bf1c193e16e94710691133d9", + "shasum": "" + }, + "require": { + "fakerphp/faker": "^1.10", + "myclabs/deep-copy": "^1.10", + "php": "^8.1", + "sebastian/comparator": "^3.0 || ^4.0 || ^5.0", + "symfony/property-access": "^5.4 || ^6.0", + "symfony/yaml": "^5.4 || ^6.0" + }, + "conflict": { + "symfony/framework-bundle": "<5.4.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpspec/prophecy": "^1.6", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.3", + "symfony/config": "^5.4 || ^6.0", + "symfony/dependency-injection": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0", + "symfony/var-dumper": "^5.4 || ^6.0" + }, + "suggest": { + "theofidry/alice-data-fixtures": "Wrapper for Alice to provide a persistence layer." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "files": [ + "src/deep_clone.php" + ], + "psr-4": { + "Nelmio\\Alice\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + }, + { + "name": "Tim Shelburne", + "email": "shelburt02@gmail.com" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Expressive fixtures generator", + "keywords": [ + "Fixture", + "data", + "faker", + "test" + ], + "support": { + "issues": "https://github.com/nelmio/alice/issues", + "source": "https://github.com/nelmio/alice/tree/3.12.2" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2023-02-13T11:17:55+00:00" + }, + { + "name": "nelmio/cors-bundle", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioCorsBundle.git", + "reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/185d2c0ae50a3f0b628790170164d5f1c5b7c281", + "reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281", + "shasum": "" + }, + "require": { + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "symfony/phpunit-bridge": "^4.4 || ^5.4 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\CorsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application", + "keywords": [ + "api", + "cors", + "crossdomain" + ], + "support": { + "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.3.1" + }, + "time": "2023-02-16T08:49:29+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.66.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "496712849902241f04902033b0441b269effe001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-01-29T18:53:47+00:00" + }, + { + "name": "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": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.3" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "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": "4.0-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/v4.0.0" + }, + "time": "2023-02-02T10:41:53+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.0" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2023-05-02T11:26:24+00:00" + }, + { + "name": "odolbeau/phone-number-bundle", + "version": "v3.9.1", + "source": { + "type": "git", + "url": "https://github.com/odolbeau/phone-number-bundle.git", + "reference": "a4c084d9709a416511234b49d6803d76b64dbc02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/odolbeau/phone-number-bundle/zipball/a4c084d9709a416511234b49d6803d76b64dbc02", + "reference": "a4c084d9709a416511234b49d6803d76b64dbc02", + "shasum": "" + }, + "require": { + "giggsey/libphonenumber-for-php": "^8.0", + "php": ">=7.4", + "symfony/framework-bundle": "^4.4|^5.3|^6.0", + "symfony/intl": "^4.4|^5.3|^6.0" + }, + "conflict": { + "symfony/serializer": "6.0.0" + }, + "replace": { + "misd/phone-number-bundle": "self.version" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.12|^2.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "symfony/form": "^4.4|^5.3|^6.0", + "symfony/property-access": "^4.4|^5.3|^6.0", + "symfony/serializer": "^4.4|^5.3|^6.0.1", + "symfony/twig-bundle": "^4.4|^5.3|^6.0", + "symfony/validator": "^4.4|^5.3|^6.0" + }, + "suggest": { + "doctrine/doctrine-bundle": "Add a DBAL mapping type", + "symfony/form": "Add a data transformer", + "symfony/property-access": "Choose a path in the validation constraint", + "symfony/serializer": "Serialize/deserialize phone numbers using Symfony library", + "symfony/twig-bundle": "Format phone numbers in Twig templates", + "symfony/validator": "Add a validation constraint" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Misd\\PhoneNumberBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Integrates libphonenumber into your Symfony application", + "homepage": "https://github.com/odolbeau/phone-number-bundle", + "keywords": [ + "bundle", + "libphonenumber", + "phone-number", + "phonenumber", + "telephone number" + ], + "support": { + "issues": "https://github.com/odolbeau/phone-number-bundle/issues", + "source": "https://github.com/odolbeau/phone-number-bundle/tree/v3.9.1" + }, + "time": "2023-01-16T11:06:41+00:00" + }, + { + "name": "payum/core", + "version": "1.7.3", + "target-dir": "Payum/Core", + "source": { + "type": "git", + "url": "https://github.com/Payum/Core.git", + "reference": "37b75090d77245569c481c4b9240a9cf01e0e8c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Payum/Core/zipball/37b75090d77245569c481c4b9240a9cf01e0e8c8", + "reference": "37b75090d77245569c481c4b9240a9cf01e0e8c8", + "shasum": "" + }, + "require": { + "alcohol/iso4217": "^3.1 || ^4.0", + "league/uri": "^6.4", + "league/uri-components": "^2.2", + "payum/iso4217": "^1.0", + "php": "^7.2 || ^8.0", + "php-http/client-implementation": "^1.0", + "php-http/message": "^1.0", + "psr/log": "^1 || ^2 || ^3", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "require-dev": { + "defuse/php-encryption": "^2", + "doctrine/dbal": "^2", + "doctrine/orm": "2.*", + "doctrine/persistence": "^1.3.3|^2.0", + "ext-curl": "*", + "ext-pdo_sqlite": "*", + "laminas/laminas-db": "^2.0", + "omnipay/common": "^3.0", + "omnipay/dummy": "^3.0", + "payum/omnipay-v3-bridge": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "phpunit/phpunit": "^5.7", + "propel/propel1": "~1.7", + "symfony/cache": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0" + }, + "suggest": { + "defuse/php-encryption": "^2 If you want to encrypt gateways credentials in database", + "doctrine/mongodb-odm": "~2.0 If you want to store models to mongo doctrin2 ODM", + "doctrine/orm": "~2.3 If you want to store models to database using doctrin2 ORM", + "laminas/laminas-db": "~2.0 If you want to store models to Laminas Db ORM", + "monolog/monolog": "~1.0 If you want to use PSR-3 logger", + "payum/authorize-net-aim": "self.version If you want to use Authorize.Net AIM payment gateway", + "payum/be2bill": "self.version If you want to use be2bill payment gateway", + "payum/omnipay-v3-bridge": "^1 If you want to use omnipay's gateways", + "payum/payex": "self.version If you want to use payex payment gateway", + "payum/paypal-express-checkout-nvp": "self.version If you want to use paypal express checkout, digital goods or recurring payments", + "payum/paypal-ipn": "self.version If you want to use paypal instant payment notifications(Paypal IPN)", + "payum/paypal-pro-checkout-nvp": "self.version If you want to use paypal pro checkout", + "payum/paypal-rest": "self.version If you want to use paypal rest gateway", + "propel/propel": "If you want to store models to Propel2 ORM", + "propel/propel1": "~1.7 If you want to store models to Propel1 ORM", + "symfony/dependency-injection": "~2.8|~3.0 If you want to use container aware stuff", + "symfony/form": "~2.8|~3.0 If you want to use forms", + "symfony/http-foundation": "~2.8|~3.0 If you want to use HttpRequestVerifier or HttpResponse reply from symfony's bridge", + "symfony/http-kernel": "~2.8|~3.0 If you want to use HttpRequestVerifier from symfony's bridge", + "symfony/routing": "~2.8|~3.0 If you want to use TokenFactory from symfony's bridge" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-0": { + "Payum\\Core\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kotlyar Maksim", + "email": "kotlyar.maksim@gmail.com" + }, + { + "name": "Payum project", + "homepage": "https://payum.forma-pro.com/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/Payum/Payum/contributors" + } + ], + "description": "One million downloads of Payum already! Payum offers everything you need to work with payments. Friendly for all PHP frameworks (Symfony, Laravel, Laminas, Yii, Silex). Check more visiting site.", + "homepage": "https://payum.forma-pro.com/", + "keywords": [ + "authorize", + "capture", + "notify", + "payment", + "payout", + "recurring payment", + "refund", + "subscription", + "withdrawal" + ], + "support": { + "source": "https://github.com/Payum/Core/tree/1.7.3" + }, + "time": "2022-07-04T09:47:14+00:00" + }, + { + "name": "payum/iso4217", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Payum/iso4217.git", + "reference": "faafdd2c5e799c673d7aa576aaf26fa2fb631014" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Payum/iso4217/zipball/faafdd2c5e799c673d7aa576aaf26fa2fb631014", + "reference": "faafdd2c5e799c673d7aa576aaf26fa2fb631014", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Payum\\ISO4217\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com" + }, + { + "name": "Kotlyar Maksim", + "email": "kotlyar.maksim@gmail.com" + }, + { + "name": "Payum project", + "homepage": "http://payum.org/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/Payum/Payum/contributors" + } + ], + "description": "ISO 4217 PHP Library", + "homepage": "https://payum.forma-pro.com/", + "keywords": [ + "4217", + "ISO 4217", + "currencies", + "iso", + "library" + ], + "support": { + "issues": "https://github.com/payum/iso4217/issues", + "source": "https://github.com/payum/iso4217" + }, + "time": "2022-02-27T10:14:23+00:00" + }, + { + "name": "payum/offline", + "version": "1.7.3", + "target-dir": "Payum/Offline", + "source": { + "type": "git", + "url": "https://github.com/Payum/Offline.git", + "reference": "0600b0eb3cff8f19a351a0b3c7d29743c9cdbb20" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Payum/Offline/zipball/0600b0eb3cff8f19a351a0b3c7d29743c9cdbb20", + "reference": "0600b0eb3cff8f19a351a0b3c7d29743c9cdbb20", + "shasum": "" + }, + "require": { + "payum/core": "^1.5" + }, + "require-dev": { + "payum/core": "^1.5", + "phpunit/phpunit": "^5.7", + "symfony/phpunit-bridge": "^3.1|^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-0": { + "Payum\\Offline": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kotlyar Maksim", + "email": "kotlyar.maksim@gmail.com" + }, + { + "name": "Payum project", + "homepage": "https://payum.forma-pro.com/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/Payum/Offline/contributors" + } + ], + "description": "The Payum extension. It provides Offline payment integration.", + "homepage": "https://payum.forma-pro.com", + "keywords": [ + "invoice", + "offlile", + "payment" + ], + "support": { + "source": "https://github.com/Payum/Offline/tree/1.7.3" + }, + "time": "2021-05-17T19:26:36+00:00" + }, + { + "name": "payum/payum-bundle", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/Payum/PayumBundle.git", + "reference": "9e1765add77c32c879d937444c89c3e044d35f21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Payum/PayumBundle/zipball/9e1765add77c32c879d937444c89c3e044d35f21", + "reference": "9e1765add77c32c879d937444c89c3e044d35f21", + "shasum": "" + }, + "require": { + "payum/core": "^1.7.2", + "php": "^7.4 || ^8.0", + "symfony/form": "^4.4.20 || ^5.4 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/polyfill-php80": "^1.26", + "symfony/security-csrf": "^4.4 || ^5.4 || ^6.0", + "symfony/validator": "^4.4 || ^5.4 || ^6.0" + }, + "require-dev": { + "defuse/php-encryption": "^2", + "doctrine/orm": "^2.8", + "omnipay/common": "^3@dev", + "omnipay/dummy": "^3@alpha", + "omnipay/paypal": "^3@dev", + "payum/offline": "^1.7", + "payum/omnipay-v3-bridge": "^1@alpha", + "payum/paypal-express-checkout-nvp": "^1.7", + "payum/stripe": "^1.7", + "php-http/guzzle7-adapter": "^1.0", + "phpunit/phpunit": "^9.5", + "psr/log": "^1 || ^2", + "stripe/stripe-php": "~7.0", + "symfony/browser-kit": "^4.4 || ^5.4 || ^6.0", + "symfony/expression-language": "^4.4 || ^5.4 || ^6.0", + "symfony/phpunit-bridge": "^4.4 || ^5.4 || ^6.0", + "symfony/templating": "^4.4 || ^5.4 || ^6.0", + "symfony/twig-bundle": "^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": "^2.0 || ^3.0" + }, + "suggest": { + "sonata-project/admin-bundle": "^3 If you want to configure payments in the backend." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Payum\\Bundle\\PayumBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kotlyar Maksim", + "email": "kotlyar.maksim@gmail.com" + }, + { + "name": "Payum project", + "homepage": "https://payum.forma-pro.com/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/Payum/PayumBundle/contributors" + } + ], + "description": "One million downloads of Payum already! Payum offers everything you need to work with payments. Check more visiting site.", + "homepage": "https://payum.forma-pro.com/", + "keywords": [ + "authorize.net", + "be2bill", + "instant notifications", + "klarna", + "offline", + "omnipay", + "payex", + "payment", + "paypal", + "paypal express checkout", + "paypal pro checkout", + "recurring payment", + "stripe", + "stripe checkout", + "stripe.js", + "symfony" + ], + "support": { + "issues": "https://github.com/Payum/PayumBundle/issues", + "source": "https://github.com/Payum/PayumBundle/tree/2.5.1" + }, + "time": "2023-05-03T10:39:27+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/665bfc381bb910385f70391ed3eeefd0b7bbdd0d", + "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.6.1" + }, + "time": "2023-04-14T13:30:08+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.18.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "29ae6fae35f4116bbfe4c8b96ccc3f687eb07cd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/29ae6fae35f4116bbfe4c8b96ccc3f687eb07cd9", + "reference": "29ae6fae35f4116bbfe4c8b96ccc3f687eb07cd9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "symfony/phpunit-bridge": "^6.2" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.18.0" + }, + "time": "2023-05-03T14:49:12+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.0" + }, + "time": "2023-04-14T15:10:03+00:00" + }, + { + "name": "php-http/message", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "2a1fbaa00cf5ffc82f379adf47388663bce8190d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/2a1fbaa00cf5ffc82f379adf47388663bce8190d", + "reference": "2a1fbaa00cf5ffc82f379adf47388663bce8190d", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.15.0" + }, + "time": "2023-05-10T08:19:58+00:00" + }, + { + "name": "php-http/message-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/1.1.0" + }, + "abandoned": "psr/http-factory", + "time": "2023-04-14T14:16:17+00:00" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "time": "2020-07-07T09:29:14+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "dfc078e8af9c99210337325ff5aa152872c98714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", + "reference": "dfc078e8af9c99210337325ff5aa152872c98714", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + }, + "time": "2023-03-27T19:02:04+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.20.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd", + "reference": "7d568c87a9df9c5f7e8b5f075fc469aa8cb0a4cd", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.20.4" + }, + "time": "2023-05-02T09:19:37+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/1.0.2" + }, + "time": "2023-04-10T20:12:12+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.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/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "psr/link", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "84b159194ecfd7eaa472280213976e96415433f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7", + "reference": "84b159194ecfd7eaa472280213976e96415433f7", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "suggest": { + "fig/link-util": "Provides some useful PSR-13 utilities" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/2.0.1" + }, + "time": "2021-03-11T23:00:27+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "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/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.4", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "60a4c63ab724854332900504274f6150ff26d286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", + "reference": "60a4c63ab724854332900504274f6150ff26d286", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.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.7.4" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-04-15T23:01:58+00:00" + }, + { + "name": "rize/uri-template", + "version": "0.3.5", + "source": { + "type": "git", + "url": "https://github.com/rize/UriTemplate.git", + "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rize/UriTemplate/zipball/5ed4ba8ea34af84485dea815d4b6b620794d1168", + "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rize\\": "src/Rize" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marut K", + "homepage": "http://twitter.com/rezigned" + } + ], + "description": "PHP URI Template (RFC 6570) supports both expansion & extraction", + "keywords": [ + "RFC 6570", + "template", + "uri" + ], + "support": { + "issues": "https://github.com/rize/UriTemplate/issues", + "source": "https://github.com/rize/UriTemplate/tree/0.3.5" + }, + "funding": [ + { + "url": "https://www.paypal.me/rezigned", + "type": "custom" + }, + { + "url": "https://github.com/rezigned", + "type": "github" + }, + { + "url": "https://opencollective.com/rize-uri-template", + "type": "open_collective" + } + ], + "time": "2022-10-12T17:22:51+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/diff", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-07T05:35:17+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/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "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": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0|^2.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/dbal": "^2.10|^3.0", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/doctrine-bridge": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/monolog-bridge": "^4.0|^5.0|^6.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "symfony/security-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "6.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "support": { + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" + }, + "abandoned": "Symfony", + "time": "2023-02-24T14:57:12+00:00" + }, + { + "name": "snc/redis-bundle", + "version": "4.6.0", + "source": { + "type": "git", + "url": "https://github.com/snc/SncRedisBundle.git", + "reference": "dc5f4438d669f1c52234f1d2b7bc558f8399c58e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/snc/SncRedisBundle/zipball/dc5f4438d669f1c52234f1d2b7bc558f8399c58e", + "reference": "dc5f4438d669f1c52234f1d2b7bc558f8399c58e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0", + "symfony/http-foundation": "^4.4 || ^5.3 || ^6.0", + "symfony/service-contracts": ">=1.0", + "symfony/var-dumper": "^4.4 || ^5.3 || ^6.0" + }, + "conflict": { + "ext-redis": "<5.3", + "predis/predis": "<2.0 || >=3.0" + }, + "require-dev": { + "doctrine/annotations": "^1.13", + "doctrine/coding-standard": "^10.0", + "ext-pdo_sqlite": "*", + "ext-redis": "*", + "friendsofphp/proxy-manager-lts": "^1.0.6", + "monolog/monolog": "*", + "phpunit/phpunit": "^8.5.32 || ^9.5.28", + "predis/predis": "^2.0", + "symfony/browser-kit": "^4.4 || ^5.3 || ^6.0", + "symfony/cache": "^4.4 || ^5.3 || ^6.0", + "symfony/console": "^4.4 || ^5.3 || ^6.0", + "symfony/dom-crawler": "^4.4 || ^5.3 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.3 || ^6.0", + "symfony/phpunit-bridge": "^6.0", + "symfony/profiler-pack": "^1.0", + "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0", + "symfony/stopwatch": "^4.4 || ^5.3 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.3 || ^6.0", + "symfony/yaml": "^4.4 || ^5.3 || ^6.0", + "vimeo/psalm": "^5.2" + }, + "suggest": { + "monolog/monolog": "If you want to use the monolog redis handler.", + "predis/predis": "If you want to use predis.", + "symfony/console": "If you want to use commands to interact with the redis database", + "symfony/proxy-manager-bridge": "If you want to lazy-load some services" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Snc\\RedisBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Henrik Westphal", + "email": "henrik.westphal@gmail.com" + }, + { + "name": "Community contributors", + "homepage": "https://github.com/snc/SncRedisBundle/contributors" + } + ], + "description": "A Redis bundle for Symfony", + "homepage": "https://github.com/snc/SncRedisBundle", + "keywords": [ + "nosql", + "redis", + "symfony" + ], + "support": { + "issues": "https://github.com/snc/SncRedisBundle/issues", + "source": "https://github.com/snc/SncRedisBundle/tree/4.6.0" + }, + "time": "2023-01-29T15:18:19+00:00" + }, + { + "name": "stof/doctrine-extensions-bundle", + "version": "v1.7.1", + "source": { + "type": "git", + "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git", + "reference": "fa650e60e174afa06c09e28a54fb1854af04c7fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/fa650e60e174afa06c09e28a54fb1854af04c7fe", + "reference": "fa650e60e174afa06c09e28a54fb1854af04c7fe", + "shasum": "" + }, + "require": { + "gedmo/doctrine-extensions": "^2.3.4 || ^3.0.0", + "php": "^7.1.3 || ^8.0", + "symfony/config": "^4.4 || ^5.2 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.2 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.2 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.2 || ^6.0" + }, + "require-dev": { + "symfony/mime": "^4.4 || ^5.2 || ^6.0", + "symfony/phpunit-bridge": "^v5.2.4 || ^6.0", + "symfony/security-core": "^4.4 || ^5.2 || ^6.0" + }, + "suggest": { + "doctrine/doctrine-bundle": "to use the ORM extensions", + "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions", + "symfony/mime": "To use the Mime component integration for Uploadable" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Stof\\DoctrineExtensionsBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integration of the gedmo/doctrine-extensions with Symfony", + "homepage": "https://github.com/stof/StofDoctrineExtensionsBundle", + "keywords": [ + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree" + ], + "support": { + "issues": "https://github.com/stof/StofDoctrineExtensionsBundle/issues", + "source": "https://github.com/stof/StofDoctrineExtensionsBundle/tree/v1.7.1" + }, + "time": "2022-09-30T11:52:24+00:00" + }, + { + "name": "symfony/asset", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "223df790e684ecc7bc37323c2d1e265129ca02de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/223df790e684ecc7bc37323c2d1e265129ca02de", + "reference": "223df790e684ecc7bc37323c2d1e265129ca02de", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/cache", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94", + "reference": "1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94", + "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.10" + }, + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T15:42:15+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "eeb71f04b6f7f34ca6d15633df82e014528b1632" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/eeb71f04b6f7f34ca6d15633df82e014528b1632", + "reference": "eeb71f04b6f7f34ca6d15633df82e014528b1632", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\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.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/clock", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "54d724dcda6298a05db32aa7f69be1ce638b8417" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/54d724dcda6298a05db32aa7f69be1ce638b8417", + "reference": "54d724dcda6298a05db32aa7f69be1ce638b8417", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-20T14:53:25+00:00" + }, + { + "name": "symfony/config", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "249271da6f545d6579e0663374f8249a80be2893" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/249271da6f545d6579e0663374f8249a80be2893", + "reference": "249271da6f545d6579e0663374f8249a80be2893", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "12288d9f4500f84a4d02254d4aa968b15488476f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/12288d9f4500f84a4d02254d4aa968b15488476f", + "reference": "12288d9f4500f84a4d02254d4aa968b15488476f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-28T13:37:43+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "d732a66a2672669232c0b4536c8c96724a679780" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d732a66a2672669232c0b4536c8c96724a679780", + "reference": "d732a66a2672669232c0b4536c8c96724a679780", + "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.7" + }, + "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/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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T15:42:15+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:25:55+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v6.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "4b3aeaa90d41c5527d7ba211d12102cedf06936e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/4b3aeaa90d41c5527d7ba211d12102cedf06936e", + "reference": "4b3aeaa90d41c5527d7ba211d12102cedf06936e", + "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.21|>=6,<6.2.7", + "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|^2", + "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.21|^6.2.7", + "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.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-11T16:08:35+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "a1fdf9ce88df35d538907b52cd1dac2bf86ef507" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/a1fdf9ce88df35d538907b52cd1dac2bf86ef507", + "reference": "a1fdf9ce88df35d538907b52cd1dac2bf86ef507", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.13|^3.0", + "php": ">=8.1", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\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": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "4481aa45be7a11d2335c1d5b5bbe2f0c6199b105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/4481aa45be7a11d2335c1d5b5bbe2f0c6199b105", + "reference": "4481aa45be7a11d2335c1d5b5bbe2f0c6199b105", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-10T10:06:03+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8b7e9f124640cb0611624a9383176c3e5f7d8cfb", + "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-20T16:06:02+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "83e1fee4c018aa60bcbbecd585a2c54af6aca905" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/83e1fee4c018aa60bcbbecd585a2c54af6aca905", + "reference": "83e1fee4c018aa60bcbbecd585a2c54af6aca905", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/fake-sms-notifier", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/fake-sms-notifier.git", + "reference": "d6363378b5be5e77ee9238ea029a0cee8ebe42a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/fake-sms-notifier/zipball/d6363378b5be5e77ee9238ea029a0cee8ebe42a4", + "reference": "d6363378b5be5e77ee9238ea029a0cee8ebe42a4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/notifier": "^6.2.7" + }, + "type": "symfony-notifier-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\Bridge\\FakeSms\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "James Hemery", + "homepage": "https://github.com/JamesHemery" + }, + { + "name": "Antoine Makdessi", + "email": "amakdessi@me.com", + "homepage": "http://antoine.makdessi.free.fr" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Fake SMS (as email or log during development) Notifier Bridge.", + "homepage": "https://symfony.com", + "keywords": [ + "development", + "email", + "notifier", + "sms", + "symfony" + ], + "support": { + "source": "https://github.com/symfony/fake-sms-notifier/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-17T11:05:34+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd588debf7d1bc16a2c84b4b3b71145d9946b894", + "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "2ff8465e7172790a47ab3c129f2b514eb2d8a286" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/2ff8465e7172790a47ab3c129f2b514eb2d8a286", + "reference": "2ff8465e7172790a47ab3c129f2b514eb2d8a286", + "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.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-18T08:03:15+00:00" + }, + { + "name": "symfony/form", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "a123512b46caea497ab8d96d9dbdbdaaf416a606" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/a123512b46caea497ab8d96d9dbdbdaaf416a606", + "reference": "a123512b46caea497ab8d96d9dbdbdaaf416a606", + "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.21|>=6,<6.2.7", + "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.21|>=6,<6.2.7" + }, + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-19T08:03:37+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "823f285befde4e97bb70d97cae57997c38e4d6fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/823f285befde4e97bb70d97cae57997c38e4d6fd", + "reference": "823f285befde4e97bb70d97cae57997c38e4d6fd", + "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.8", + "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.1", + "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": "<6.2.8", + "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|^2", + "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": "^6.2.8", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-23T08:23:35+00:00" + }, + { + "name": "symfony/google-mailer", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/google-mailer.git", + "reference": "7e6cde8d40144e889e607bfc5320ea4192b247cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/google-mailer/zipball/7e6cde8d40144e889e607bfc5320ea4192b247cd", + "reference": "7e6cde8d40144e889e607bfc5320ea4192b247cd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/mailer": "^5.4.21|^6.2.7" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0" + }, + "type": "symfony-mailer-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\Bridge\\Google\\": "" + }, + "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 Google Mailer Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/google-mailer/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-14T16:23:31+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "211e36bbb20a5e5db2b940399ab1d2b421a08068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/211e36bbb20a5e5db2b940399ab1d2b421a08068", + "reference": "211e36bbb20a5e5db2b940399ab1d2b421a08068", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/http-client", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "3f5545a91c8e79dedd1a06c4b04e1682c80c42f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/3f5545a91c8e79dedd1a06c4b04e1682c80c42f9", + "reference": "3f5545a91c8e79dedd1a06c4b04e1682c80c42f9", + "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", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-20T13:12:48+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "df2ecd6cb70e73c1080e6478aea85f5f4da2c48b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/df2ecd6cb70e73c1080e6478aea85f5f4da2c48b", + "reference": "df2ecd6cb70e73c1080e6478aea85f5f4da2c48b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\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.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49adbb92bcb4e3c2943719d2756271e8b9602acc", + "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "81064a65a5496f17d2b6984f6519406f98864215" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/81064a65a5496f17d2b6984f6519406f98864215", + "reference": "81064a65a5496f17d2b6984f6519406f98864215", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-28T13:50:28+00:00" + }, + { + "name": "symfony/intl", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "860c99e53149d22df1900d3aefdaeb17adb7669d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/860c99e53149d22df1900d3aefdaeb17adb7669d", + "reference": "860c99e53149d22df1900d3aefdaeb17adb7669d", + "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 access to the localization data of the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-14T16:23:31+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", + "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "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": "^5.4|^6.0", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:00:05+00:00" + }, + { + "name": "symfony/mercure", + "version": "v0.6.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mercure.git", + "reference": "af2953ae60e77628339659a31b8b2a9e40ca1dd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mercure/zipball/af2953ae60e77628339659a31b8b2a9e40ca1dd9", + "reference": "af2953ae60e77628339659a31b8b2a9e40ca1dd9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/deprecation-contracts": "^2.0|^3.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/polyfill-php80": "^1.22", + "symfony/web-link": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "lcobucci/jwt": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/phpunit-bridge": "^5.2|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "twig/twig": "^2.0|^3.0" + }, + "suggest": { + "symfony/stopwatch": "Integration with the profiler performances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.5.x-dev" + }, + "thanks": { + "name": "dunglas/mercure", + "url": "https://github.com/dunglas/mercure" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mercure\\": "src/" + } + }, + "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": "Symfony Mercure Component", + "homepage": "https://symfony.com", + "keywords": [ + "mercure", + "push", + "sse", + "updates" + ], + "support": { + "issues": "https://github.com/symfony/mercure/issues", + "source": "https://github.com/symfony/mercure/tree/v0.6.3" + }, + "funding": [ + { + "url": "https://github.com/dunglas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/mercure", + "type": "tidelift" + } + ], + "time": "2023-03-06T22:43:27+00:00" + }, + { + "name": "symfony/mercure-bundle", + "version": "v0.3.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/mercure-bundle.git", + "reference": "262c922912d94d01230b2c647208d06fc46d4cff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mercure-bundle/zipball/262c922912d94d01230b2c647208d06fc46d4cff", + "reference": "262c922912d94d01230b2c647208d06fc46d4cff", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.4|^4.0|^5.0", + "php": ">=7.1.3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.4|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/mercure": "^0.6.1", + "symfony/web-link": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.3.7|^5.0|^6.0", + "symfony/stopwatch": "^4.3.7|^5.0|^6.0", + "symfony/ux-turbo": "*", + "symfony/var-dumper": "^4.3.7|^5.0|^6.0" + }, + "suggest": { + "symfony/messenger": "To use the Messenger integration" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MercureBundle\\": "src/" + } + }, + "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": "Symfony MercureBundle", + "homepage": "https://symfony.com", + "keywords": [ + "mercure", + "push", + "sse", + "updates" + ], + "support": { + "issues": "https://github.com/symfony/mercure-bundle/issues", + "source": "https://github.com/symfony/mercure-bundle/tree/v0.3.6" + }, + "funding": [ + { + "url": "https://github.com/dunglas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/mercure-bundle", + "type": "tidelift" + } + ], + "time": "2023-03-06T22:48:03+00:00" + }, + { + "name": "symfony/messenger", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "f54eef78d500309bbc51291f8a353b4b0afef8c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/f54eef78d500309bbc51291f8a353b4b0afef8c1", + "reference": "f54eef78d500309bbc51291f8a353b4b0afef8c1", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<5.4", + "symfony/event-dispatcher-contracts": "<2", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/serializer": "<5.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0" + }, + "suggest": { + "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:00:05+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/b6c137fc53a9f7c4c951cd3f362b3734c7a97723", + "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-19T09:54:16+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "34700f2e5c7e9eae78f8e59fc02399dd8f110cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/34700f2e5c7e9eae78f8e59fc02399dd8f110cae", + "reference": "34700f2e5c7e9eae78f8e59fc02399dd8f110cae", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-09T16:20:02+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/notifier", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/notifier.git", + "reference": "993df4464c577e7eb828324181d2a451e81619b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/notifier/zipball/993df4464c577e7eb828324181d2a451e81619b6", + "reference": "993df4464c577e7eb828324181d2a451e81619b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<5.4", + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/http-client-contracts": "^2|^3", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\": "" + }, + "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": "Sends notifications via one or more channels (email, SMS, ...)", + "homepage": "https://symfony.com", + "keywords": [ + "notification", + "notifier" + ], + "support": { + "source": "https://github.com/symfony/notifier/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-10T10:06:03+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/ovh-cloud-notifier", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/ovh-cloud-notifier.git", + "reference": "e52d74d630df94d2f2eaa581e2aa98100c894e43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ovh-cloud-notifier/zipball/e52d74d630df94d2f2eaa581e2aa98100c894e43", + "reference": "e52d74d630df94d2f2eaa581e2aa98100c894e43", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/notifier": "^6.2.7" + }, + "type": "symfony-notifier-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\Bridge\\OvhCloud\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thomas Ferney", + "email": "thomas.ferney@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OvhCloud Notifier Bridge", + "homepage": "https://symfony.com", + "keywords": [ + "notifier", + "ovh-cloud", + "sms" + ], + "support": { + "source": "https://github.com/symfony/ovh-cloud-notifier/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:56:17+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "67820d8570bf1c2c2cd87cb76d9d12a9d52ab808" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/67820d8570bf1c2c2cd87cb76d9d12a9d52ab808", + "reference": "67820d8570bf1c2c2cd87cb76d9d12a9d52ab808", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+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-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-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/property-access", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "2ad1e0a07b8cab3e09905659d14f3b248e916374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/2ad1e0a07b8cab3e09905659d14f3b248e916374", + "reference": "2ad1e0a07b8cab3e09905659d14f3b248e916374", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:00:05+00:00" + }, + { + "name": "symfony/property-info", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "617177c24e1a92e011851948ba973758429a68b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/617177c24e1a92e011851948ba973758429a68b2", + "reference": "617177c24e1a92e011851948ba973758429a68b2", + "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|^2", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/proxy-manager-bridge", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/proxy-manager-bridge.git", + "reference": "534119513ce1d06faa6d55b6717f237e980b4e91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/534119513ce1d06faa6d55b6717f237e980b4e91", + "reference": "534119513ce1d06faa6d55b6717f237e980b4e91", + "shasum": "" + }, + "require": { + "friendsofphp/proxy-manager-lts": "^1.0.2", + "php": ">=8.1", + "symfony/dependency-injection": "^6.2" + }, + "require-dev": { + "symfony/config": "^6.1" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\ProxyManager\\": "" + }, + "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 ProxyManager with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/rate-limiter", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/rate-limiter.git", + "reference": "e82784d6a8d64a33f44a8acfd703327a32831533" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/e82784d6a8d64a33f44a8acfd703327a32831533", + "reference": "e82784d6a8d64a33f44a8acfd703327a32831533", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/options-resolver": "^5.4|^6.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/lock": "^5.4|^6.0" + }, + "suggest": { + "symfony/lock": "For preventing race conditions in rate limiters" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\RateLimiter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Wouter de Jong", + "email": "wouter@wouterj.nl" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a Token Bucket implementation to rate limit input and output in your application", + "homepage": "https://symfony.com", + "keywords": [ + "limiter", + "rate-limiter" + ], + "support": { + "source": "https://github.com/symfony/rate-limiter/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/requirements-checker", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/requirements-checker.git", + "reference": "cf8893f384348a338157d637e170fe8fb2356016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/requirements-checker/zipball/cf8893f384348a338157d637e170fe8fb2356016", + "reference": "cf8893f384348a338157d637e170fe8fb2356016", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "bin": [ + "bin/requirements-checker" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Requirements\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Check Symfony requirements and give recommendations", + "keywords": [ + "configuration", + "distribution" + ], + "support": { + "issues": "https://github.com/symfony/requirements-checker/issues", + "source": "https://github.com/symfony/requirements-checker/tree/v2.0.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": "2021-11-30T16:18:33+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "69062e2823f03b82265d73a966999660f0e1e404" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404", + "reference": "69062e2823f03b82265d73a966999660f0e1e404", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:00:05+00:00" + }, + { + "name": "symfony/runtime", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "f8b0751b33888329be8f8f0481bb81d279ec4157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/f8b0751b33888329be8f8f0481bb81d279ec4157", + "reference": "f8b0751b33888329be8f8f0481bb81d279ec4157", + "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", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-14T15:48:35+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "b12dcedbcf423ae6d34d79cfaa6791a21c90bd14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/b12dcedbcf423ae6d34d79cfaa6791a21c90bd14", + "reference": "b12dcedbcf423ae6d34d79cfaa6791a21c90bd14", + "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.10" + }, + "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|^2", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T15:49:06+00:00" + }, + { + "name": "symfony/security-core", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "c141337bc7451f9a9e464733f1e536bf38d1d2fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/c141337bc7451f9a9e464733f1e536bf38d1d2fb", + "reference": "c141337bc7451f9a9e464733f1e536bf38d1d2fb", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-10T10:06:03+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "6cce7efdce68e0670d2f19acebc21dcd0798e333" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/6cce7efdce68e0670d2f19acebc21dcd0798e333", + "reference": "6cce7efdce68e0670d2f19acebc21dcd0798e333", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/security-http", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "c468f059fac27680acf7e84cea07ba5ffff8942a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/c468f059fac27680acf7e84cea07ba5ffff8942a", + "reference": "c468f059fac27680acf7e84cea07ba5ffff8942a", + "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.19|~6.1.11|^6.2.5" + }, + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T11:56:14+00:00" + }, + { + "name": "symfony/serializer", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d", + "reference": "0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<5.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/uid": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^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/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0", + "symfony/var-exporter": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/var-exporter": "For using the metadata compiler.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:57:49+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-20T16:06:02+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", + "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-31T09:14:44+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927", + "reference": "30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927", + "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.2.7", + "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|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "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.2.7", + "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.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-31T09:14:44+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "8bb562655c6ae4b8fae9cf72077591f38b961566" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/8bb562655c6ae4b8fae9cf72077591f38b961566", + "reference": "8bb562655c6ae4b8fae9cf72077591f38b961566", + "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|^2", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/twilio-notifier", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/twilio-notifier.git", + "reference": "0903cb2a31d01975c5e419a0459d40e8a785f646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twilio-notifier/zipball/0903cb2a31d01975c5e419a0459d40e8a785f646", + "reference": "0903cb2a31d01975c5e419a0459d40e8a785f646", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/notifier": "^6.2.7" + }, + "type": "symfony-notifier-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\Bridge\\Twilio\\": "" + }, + "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 Twilio Notifier Bridge", + "homepage": "https://symfony.com", + "keywords": [ + "notifier", + "sms", + "twilio" + ], + "support": { + "source": "https://github.com/symfony/twilio-notifier/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-17T11:05:34+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/ux-autocomplete", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-autocomplete.git", + "reference": "b226b472aa693ad8e30cea330aff1bf0ccf62af8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-autocomplete/zipball/b226b472aa693ad8e30cea330aff1bf0ccf62af8", + "reference": "b226b472aa693ad8e30cea330aff1bf0ccf62af8", + "shasum": "" + }, + "require": { + "php": ">=8.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "doctrine/orm": "2.9.0 || 2.9.1" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^2.4", + "doctrine/orm": "^2.9", + "mtdowling/jmespath.php": "2.6.x-dev", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/maker-bundle": "^1.40", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "zenstruck/browser": "^1.1", + "zenstruck/foundry": "^1.19" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/ux", + "url": "https://github.com/symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\Autocomplete\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "JavaScript Autocomplete functionality for Symfony", + "homepage": "https://symfony.com", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/ux-autocomplete/tree/v2.8.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-24T18:32:24+00:00" + }, + { + "name": "symfony/validator", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "c02ea86844926f04247bc1f5db5f85bb53330823" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/c02ea86844926f04247bc1f5db5f85bb53330823", + "reference": "c02ea86844926f04247bc1f5db5f85bb53330823", + "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|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-19T09:54:16+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41a750a23412ca76fdbbf5096943b4134272c1ab", + "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab", + "shasum": "" + }, + "require": { + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "9a07920c2058bafee921ce4d90aeef2193837d63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/9a07920c2058bafee921ce4d90aeef2193837d63", + "reference": "9a07920c2058bafee921ce4d90aeef2193837d63", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T08:33:05+00:00" + }, + { + "name": "symfony/web-link", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "410aac2034608ac661cdca1968e3c56d4164abc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/410aac2034608ac661cdca1968e3c56d4164abc8", + "reference": "410aac2034608ac661cdca1968e3c56d4164abc8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/link": "^1.1|^2.0" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "provide": { + "psr/link-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/http-kernel": "^5.4|^6.0" + }, + "suggest": { + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "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": "Manages links between resources", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "support": { + "source": "https://github.com/symfony/web-link/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v1.16.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "1862d71e483769b40278548a30e756ce13ef9d4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/1862d71e483769b40278548a30e756ce13ef9d4c", + "reference": "1862d71e483769b40278548a30e756ce13ef9d4c", + "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.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-18T19:37:55+00:00" + }, + { + "name": "symfony/workflow", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/workflow.git", + "reference": "d3b73e52ccd2b3682a612d2718ba7123fa37e3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/workflow/zipball/d3b73e52ccd2b3682a612d2718ba7123fa37e3d2", + "reference": "d3b73e52ccd2b3682a612d2718ba7123fa37e3d2", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/event-dispatcher": "<5.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/security-core": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Workflow\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools for managing a workflow or finite state machine", + "homepage": "https://symfony.com", + "keywords": [ + "petrinet", + "place", + "state", + "statemachine", + "transition", + "workflow" + ], + "support": { + "source": "https://github.com/symfony/workflow/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "61916f3861b1e9705b18cfde723921a71dd1559d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/61916f3861b1e9705b18cfde723921a71dd1559d", + "reference": "61916f3861b1e9705b18cfde723921a71dd1559d", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-28T13:25:36+00:00" + }, + { + "name": "theofidry/alice-data-fixtures", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/AliceDataFixtures.git", + "reference": "798ea2b5b8c6b2b938470d5330dc4beee77f4aff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/AliceDataFixtures/zipball/798ea2b5b8c6b2b938470d5330dc4beee77f4aff", + "reference": "798ea2b5b8c6b2b938470d5330dc4beee77f4aff", + "shasum": "" + }, + "require": { + "nelmio/alice": "^3.10", + "php": "^8.1", + "psr/log": "^1 || ^2 || ^3", + "webmozart/assert": "^1.10" + }, + "conflict": { + "doctrine/orm": "<2.6.3", + "doctrine/persistence": "<2.0", + "illuminate/database": "<8.12", + "ocramius/proxy-manager": "<2.1", + "symfony/framework-bundle": "<5.4", + "zendframework/zend-code": "<3.3.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/annotations": "^1.13", + "phpspec/prophecy": "^1.14.0", + "phpspec/prophecy-phpunit": "^2.0.1", + "phpunit/phpunit": "^9.5.10", + "symfony/phpunit-bridge": "^5.3.8 || ^6.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "To use Doctrine with the MongoDB flavour", + "doctrine/data-fixtures": "To use Doctrine", + "doctrine/dbal": "To use Doctrine with the PHPCR flavour", + "doctrine/mongodb": "To use Doctrine with the MongoDB flavour", + "doctrine/mongodb-odm": "To use Doctrine with the MongoDB flavour", + "doctrine/orm": "To use Doctrine ORM", + "doctrine/phpcr-odm": "To use Doctrine with the PHPCR flavour", + "illuminate/database": "To use Eloquent", + "jackalope/jackalope-doctrine-dbal": "To use Doctrine with the PHPCR flavour", + "ocramius/proxy-manager": "To avoid database connection on kernel boot" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fidry\\AliceDataFixtures\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com", + "homepage": "https://github.com/theofidry" + } + ], + "description": "Nelmio alice extension to persist the loaded fixtures.", + "keywords": [ + "Fixture", + "alice", + "data", + "faker", + "orm", + "tests" + ], + "support": { + "issues": "https://github.com/theofidry/AliceDataFixtures/issues", + "source": "https://github.com/theofidry/AliceDataFixtures/tree/1.6.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2022-07-03T13:30:00+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "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.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "twig/cssinliner-extra", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/cssinliner-extra.git", + "reference": "85c8f3d7712bab57f6162f9637613df0511f207b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/85c8f3d7712bab57f6162f9637613df0511f207b", + "reference": "85c8f3d7712bab57f6162f9637613df0511f207b", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "tijsverkoyen/css-to-inline-styles": "^2.0", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\Extra\\CssInliner\\": "" + }, + "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 to allow inlining CSS", + "homepage": "https://twig.symfony.com", + "keywords": [ + "css", + "inlining", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-02-09T06:45:16+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "4a9674e775f49a9df5e26da66546e8f3364afe67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/4a9674e775f49a9df5e26da66546e8f3364afe67", + "reference": "4a9674e775f49a9df5e26da66546e8f3364afe67", + "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", + "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.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-04-14T11:03:02+00:00" + }, + { + "name": "twig/inky-extra", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/inky-extra.git", + "reference": "907abf7046082cc151a3ee01f268dbf5f5f28eab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/907abf7046082cc151a3ee01f268dbf5f5f28eab", + "reference": "907abf7046082cc151a3ee01f268dbf5f5f28eab", + "shasum": "" + }, + "require": { + "lorenzo/pinky": "^1.0.5", + "php": ">=7.1.3", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\Extra\\Inky\\": "" + }, + "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 the inky email templating engine", + "homepage": "https://twig.symfony.com", + "keywords": [ + "email", + "emails", + "inky", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/inky-extra/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-02-09T06:45:16+00:00" + }, + { + "name": "twig/intl-extra", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/intl-extra.git", + "reference": "a97c323bebfca009d02994a5a8568c0b412a49ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/a97c323bebfca009d02994a5a8568c0b412a49ab", + "reference": "a97c323bebfca009d02994a5a8568c0b412a49ab", + "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", + "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.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-02-09T06:45:16+00:00" + }, + { + "name": "twig/markdown-extra", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/markdown-extra.git", + "reference": "8f1179e279cea6ef14066a4560b859df58acd5d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/8f1179e279cea6ef14066a4560b859df58acd5d8", + "reference": "8f1179e279cea6ef14066a4560b859df58acd5d8", + "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|^2.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "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.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-02-09T06:45:16+00:00" + }, + { + "name": "twig/twig", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "106c170d08e8415d78be2d16c3d057d0d108262b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/106c170d08e8415d78be2d16c3d057d0d108262b", + "reference": "106c170d08e8415d78be2d16c3d057d0d108262b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "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.6.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-05-03T19:06:57+00:00" + }, + { + "name": "webbaard/payum-mollie", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/coopTilleuls/payum-mollie.git", + "reference": "ee778a349d0302a34b1d9800e8284c09fb78b94c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/coopTilleuls/payum-mollie/zipball/ee778a349d0302a34b1d9800e8284c09fb78b94c", + "reference": "ee778a349d0302a34b1d9800e8284c09fb78b94c", + "shasum": "" + }, + "require": { + "mollie/mollie-api-php": "^2.44", + "payum/core": "^1.5", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "payum/core": "^1.3@dev", + "php-http/guzzle6-adapter": "^1.0", + "phpspec/phpspec": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "PayHelper\\Payum\\Mollie\\": "" + } + }, + "autoload-dev": { + "psr-4": { + "PayHelper\\Payum\\Mollie\\spec\\": "spec/" + } + }, + "license": [ + "GPLv3" + ], + "authors": [ + { + "name": "Tim Huijzers", + "email": "webbaard@gmail.com" + } + ], + "description": "The Payum extension. It provides Mollie payment integration. used to be maintained by Rafał Muszyński but couldn't see any activity", + "homepage": "https://sourcefabric.org", + "keywords": [ + "creditcard", + "directdebit", + "mollie", + "payment", + "payum", + "sepa" + ], + "support": { + "source": "https://github.com/coopTilleuls/payum-mollie/tree/1.0.5", + "issues": "https://github.com/coopTilleuls/payum-mollie/issues" + }, + "time": "2023-05-16T08:11:42+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "willdurand/geocoder", + "version": "4.6.0", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/php-common.git", + "reference": "be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/php-common/zipball/be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1", + "reference": "be3d9ed0fddf8c698ee079d8a07ae9520b4a49a1", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "nyholm/nsa": "^1.1", + "phpunit/phpunit": "^9.5", + "symfony/stopwatch": "~2.5" + }, + "suggest": { + "symfony/stopwatch": "If you want to use the TimedGeocoder" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Geocoder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "william.durand1@gmail.com" + } + ], + "description": "Common files for PHP Geocoder", + "homepage": "http://geocoder-php.org", + "keywords": [ + "abstraction", + "geocoder", + "geocoding", + "geoip" + ], + "support": { + "source": "https://github.com/geocoder-php/php-common/tree/4.6.0" + }, + "time": "2022-07-30T11:09:43+00:00" + }, + { + "name": "willdurand/geocoder-bundle", + "version": "5.19.0", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/BazingaGeocoderBundle.git", + "reference": "f4530ab17c9453f1308f1f89ad736300f34455a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/BazingaGeocoderBundle/zipball/f4530ab17c9453f1308f1f89ad736300f34455a1", + "reference": "f4530ab17c9453f1308f1f89ad736300f34455a1", + "shasum": "" + }, + "require": { + "geocoder-php/plugin": "^1.5", + "php": "^7.4 || ^8.0", + "php-http/discovery": "^1.14", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4 || ^5.0 || ^6.0", + "willdurand/geocoder": "^4.6" + }, + "conflict": { + "geocoder-php/nominatim-provider": "<5.0" + }, + "require-dev": { + "doctrine/orm": "~2.8", + "fakerphp/faker": "^1.20", + "friendsofphp/php-cs-fixer": "^3.13", + "geocoder-php/algolia-places-provider": "^0.4", + "geocoder-php/arcgis-online-provider": "^4.4", + "geocoder-php/bing-maps-provider": "^4.3", + "geocoder-php/cache-provider": "^4.4.0", + "geocoder-php/chain-provider": "^4.5", + "geocoder-php/free-geoip-provider": "^4.5", + "geocoder-php/geo-plugin-provider": "^4.3", + "geocoder-php/geoip2-provider": "^4.3", + "geocoder-php/geoips-provider": "^4.0", + "geocoder-php/geonames-provider": "^4.4", + "geocoder-php/google-maps-places-provider": "^1.4", + "geocoder-php/google-maps-provider": "^4.7", + "geocoder-php/here-provider": "^0.7", + "geocoder-php/host-ip-provider": "^4.4", + "geocoder-php/ip-info-db-provider": "^4.3", + "geocoder-php/ip-info-provider": "^0.4", + "geocoder-php/ipstack-provider": "^0.4", + "geocoder-php/locationiq-provider": "^1.4", + "geocoder-php/mapbox-provider": "^1.4", + "geocoder-php/mapquest-provider": "^4.3", + "geocoder-php/mapzen-provider": "^4.0", + "geocoder-php/maxmind-binary-provider": "^4.3", + "geocoder-php/maxmind-provider": "^4.4", + "geocoder-php/nominatim-provider": "^5.6", + "geocoder-php/open-cage-provider": "^4.6", + "geocoder-php/openrouteservice-provider": "^1.3", + "geocoder-php/pickpoint-provider": "^4.3", + "geocoder-php/tomtom-provider": "^4.4", + "geocoder-php/yandex-provider": "^4.5", + "geoip/geoip": "~1.17", + "nyholm/nsa": "^1.3", + "nyholm/psr7": "^1.5", + "nyholm/symfony-bundle-test": "dev-master", + "php-http/curl-client": "^2.2", + "php-http/message": "^1.13", + "phpstan/phpstan": "^1.9.2", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.2 || ^6.0", + "symfony/validator": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Bazinga\\GeocoderBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "will+git@drnd.me" + } + ], + "description": "Integration of Geocoder into Symfony", + "keywords": [ + "geocoder", + "geocoding" + ], + "support": { + "issues": "https://github.com/geocoder-php/BazingaGeocoderBundle/issues", + "source": "https://github.com/geocoder-php/BazingaGeocoderBundle/tree/5.19.0" + }, + "time": "2022-12-05T13:56:11+00:00" + }, + { + "name": "willdurand/negotiation", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/willdurand/Negotiation.git", + "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/68e9ea0553ef6e2ee8db5c1d98829f111e623ec2", + "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Negotiation\\": "src/Negotiation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "will+git@drnd.me" + } + ], + "description": "Content Negotiation tools for PHP provided as a standalone library.", + "homepage": "http://williamdurand.fr/Negotiation/", + "keywords": [ + "accept", + "content", + "format", + "header", + "negotiation" + ], + "support": { + "issues": "https://github.com/willdurand/Negotiation/issues", + "source": "https://github.com/willdurand/Negotiation/tree/3.1.0" + }, + "time": "2022-01-30T20:08:53+00:00" + } + ], + "packages-dev": [ + { + "name": "composer/pcre", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-11-17T09:50:14+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "ekino/phpstan-banned-code", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/ekino/phpstan-banned-code.git", + "reference": "4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ekino/phpstan-banned-code/zipball/4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3", + "reference": "4f0d7c8a0c9f5d222ffc24234aa6c5b3b71bf4c3", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "phpstan/phpstan": "^1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "friendsofphp/php-cs-fixer": "^3.0", + "nikic/php-parser": "^4.3", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/var-dumper": "^5.0" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Ekino\\PHPStanBannedCode\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rémi Marseille", + "email": "remi.marseille@ekino.com", + "homepage": "https://www.ekino.com" + } + ], + "description": "Detected banned code using PHPStan", + "homepage": "https://github.com/ekino/phpstan-banned-code", + "keywords": [ + "PHPStan", + "code quality" + ], + "support": { + "issues": "https://github.com/ekino/phpstan-banned-code/issues", + "source": "https://github.com/ekino/phpstan-banned-code/tree/v1.0.0" + }, + "time": "2021-11-02T08:37:34+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.14.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "14f0541651841b63640e7aafad041ad55dc7aa88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/14f0541651841b63640e7aafad041ad55dc7aa88", + "reference": "14f0541651841b63640e7aafad041ad55dc7aa88", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.14.2 || ^2", + "doctrine/lexer": "^2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.2" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2023-01-29T23:47:01+00:00" + }, + { + "name": "friendsoftwig/twigcs", + "version": "6.2.0", + "source": { + "type": "git", + "url": "https://github.com/friendsoftwig/twigcs.git", + "reference": "da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/friendsoftwig/twigcs/zipball/da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6", + "reference": "da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "symfony/console": "^4.4 || ^5.3 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.3 || ^6.0", + "symfony/finder": "^4.4 || ^5.3 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "symfony/phpunit-bridge": "^6.2.3" + }, + "bin": [ + "bin/twigcs" + ], + "type": "library", + "autoload": { + "psr-4": { + "FriendsOfTwig\\Twigcs\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tristan Maindron", + "email": "tmaindron@gmail.com" + } + ], + "description": "Checkstyle automation for Twig", + "support": { + "issues": "https://github.com/friendsoftwig/twigcs/issues", + "source": "https://github.com/friendsoftwig/twigcs/tree/6.2.0" + }, + "time": "2023-01-13T16:02:00+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "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.4" + }, + "time": "2023-03-05T19:49:14+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": "php-webdriver/webdriver", + "version": "1.14.0", + "source": { + "type": "git", + "url": "https://github.com/php-webdriver/php-webdriver.git", + "reference": "3ea4f924afb43056bf9c630509e657d951608563" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/3ea4f924afb43056bf9c630509e657d951608563", + "reference": "3ea4f924afb43056bf9c630509e657d951608563", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-zip": "*", + "php": "^7.3 || ^8.0", + "symfony/polyfill-mbstring": "^1.12", + "symfony/process": "^5.0 || ^6.0" + }, + "replace": { + "facebook/webdriver": "*" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.20.0", + "ondram/ci-detector": "^4.0", + "php-coveralls/php-coveralls": "^2.4", + "php-mock/php-mock-phpunit": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "^3.5", + "symfony/var-dumper": "^5.0 || ^6.0" + }, + "suggest": { + "ext-SimpleXML": "For Firefox profile creation" + }, + "type": "library", + "autoload": { + "files": [ + "lib/Exception/TimeoutException.php" + ], + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.", + "homepage": "https://github.com/php-webdriver/php-webdriver", + "keywords": [ + "Chromedriver", + "geckodriver", + "php", + "selenium", + "webdriver" + ], + "support": { + "issues": "https://github.com/php-webdriver/php-webdriver/issues", + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.14.0" + }, + "time": "2023-02-09T12:12:19+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "f5e02d40f277d28513001976f444d9ff1dc15e9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f5e02d40f277d28513001976f444d9ff1dc15e9a", + "reference": "f5e02d40f277d28513001976f444d9ff1dc15e9a", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.8.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin", + "phpstan/extension-installer": { + "ignore": [ + "phpstan/phpstan-phpunit" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.3.0" + }, + "time": "2023-04-18T13:08:02+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.15", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/762c4dac4da6f8756eebb80e528c3a47855da9bd", + "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd", + "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": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "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": "2023-05-09T15:28:01+00:00" + }, + { + "name": "phpstan/phpstan-deprecation-rules", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", + "reference": "a22b36b955a2e9a3d39fe533b6c1bb5359f9c319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/a22b36b955a2e9a3d39fe533b6c1bb5359f9c319", + "reference": "a22b36b955a2e9a3d39fe533b6c1bb5359f9c319", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-php-parser": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", + "support": { + "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.1.3" + }, + "time": "2023-03-17T07:50:08+00:00" + }, + { + "name": "phpstan/phpstan-doctrine", + "version": "1.3.40", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-doctrine.git", + "reference": "f741919a720af6f84249abc62befeb15eee7bc88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/f741919a720af6f84249abc62befeb15eee7bc88", + "reference": "f741919a720af6f84249abc62befeb15eee7bc88", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10.12" + }, + "conflict": { + "doctrine/collections": "<1.0", + "doctrine/common": "<2.7", + "doctrine/mongodb-odm": "<1.2", + "doctrine/orm": "<2.5", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "composer/semver": "^3.3.2", + "doctrine/annotations": "^1.11.0", + "doctrine/collections": "^1.6", + "doctrine/common": "^2.7 || ^3.0", + "doctrine/dbal": "^2.13.8 || ^3.3.3", + "doctrine/lexer": "^1.2.1", + "doctrine/mongodb-odm": "^1.3 || ^2.1", + "doctrine/orm": "^2.11.0", + "doctrine/persistence": "^1.3.8 || ^2.2.1", + "gedmo/doctrine-extensions": "^3.8", + "nesbot/carbon": "^2.49", + "nikic/php-parser": "^4.13.2", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5.10", + "ramsey/uuid-doctrine": "^1.5.0", + "symfony/cache": "^4.4.35" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Doctrine extensions for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-doctrine/issues", + "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.40" + }, + "time": "2023-05-11T11:26:04+00:00" + }, + { + "name": "phpstan/phpstan-strict-rules", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-strict-rules.git", + "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b21c03d4f6f3a446e4311155f4be9d65048218e6", + "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10" + }, + "require-dev": { + "nikic/php-parser": "^4.13.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Extra strict and opinionated rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.1" + }, + "time": "2023-03-29T14:47:40+00:00" + }, + { + "name": "phpstan/phpstan-symfony", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-symfony.git", + "reference": "7332b90dfc291ac5b4b83fbca2081936faa1e3f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/7332b90dfc291ac5b4b83fbca2081936faa1e3f9", + "reference": "7332b90dfc291ac5b4b83fbca2081936faa1e3f9", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.18" + }, + "conflict": { + "symfony/framework-bundle": "<3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^8.5.29 || ^9.5", + "psr/container": "1.0 || 1.1.1", + "symfony/config": "^5.4 || ^6.1", + "symfony/console": "^5.4 || ^6.1", + "symfony/dependency-injection": "^5.4 || ^6.1", + "symfony/form": "^5.4 || ^6.1", + "symfony/framework-bundle": "^5.4 || ^6.1", + "symfony/http-foundation": "^5.4 || ^6.1", + "symfony/messenger": "^5.4", + "symfony/polyfill-php80": "^1.24", + "symfony/serializer": "^5.4" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukáš Unger", + "email": "looky.msc@gmail.com", + "homepage": "https://lookyman.net" + } + ], + "description": "Symfony Framework extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-symfony/issues", + "source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.2" + }, + "time": "2023-05-16T12:46:15+00:00" + }, + { + "name": "phpstan/phpstan-webmozart-assert", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-webmozart-assert.git", + "reference": "d1ff28697bd4e1c9ef5d3f871367ce9092871fec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/d1ff28697bd4e1c9ef5d3f871367ce9092871fec", + "reference": "d1ff28697bd4e1c9ef5d3f871367ce9092871fec", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10" + }, + "require-dev": { + "nikic/php-parser": "^4.13.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "webmozart/assert": "^1.11.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan webmozart/assert extension", + "support": { + "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues", + "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.4" + }, + "time": "2023-02-21T20:34:19+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "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": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "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.26" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-06T12:58:08+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.6.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/17d621b3aff84d0c8b62539e269e87d8d5baa76e", + "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "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": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-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", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.8" + }, + "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": "2023-05-11T05:14:45+00:00" + }, + { + "name": "rector/rector", + "version": "0.14.8", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "46ee9a173a2b2645ca92a75ffc17460139fa226e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/46ee9a173a2b2645ca92a75ffc17460139fa226e", + "reference": "46ee9a173a2b2645ca92a75ffc17460139fa226e", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.9.0" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-php-parser": "*", + "rector/rector-phpoffice": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.14-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.14.8" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2022-11-14T14:09:49+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/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/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+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/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.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "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.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13: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": "staabm/annotate-pull-request-from-checkstyle", + "version": "1.8.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/annotate-pull-request-from-checkstyle.git", + "reference": "082e7f859860f6e79094b6ec86606bd6d0fe9014" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/annotate-pull-request-from-checkstyle/zipball/082e7f859860f6e79094b6ec86606bd6d0fe9014", + "reference": "082e7f859860f6e79094b6ec86606bd6d0fe9014", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "ext-simplexml": "*", + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16.1" + }, + "bin": [ + "cs2pr" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Markus Staab" + } + ], + "keywords": [ + "Github Actions", + "continous integration", + "dev" + ], + "support": { + "issues": "https://github.com/staabm/annotate-pull-request-from-checkstyle/issues", + "source": "https://github.com/staabm/annotate-pull-request-from-checkstyle/tree/1.8.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2023-05-08T15:56:45+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "87bd43240e6cc855f70ea1c7a448ab3bd442633c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/87bd43240e6cc855f70ea1c7a448ab3bd442633c", + "reference": "87bd43240e6cc855f70ea1c7a448ab3bd442633c", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "8ff6c96d09c462beade7512137899e400c76d994" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/8ff6c96d09c462beade7512137899e400c76d994", + "reference": "8ff6c96d09c462beade7512137899e400c76d994", + "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.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v6.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/328bc3795059651d2d4e462e8febdf7ec2d7a626", + "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626", + "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.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-11T16:03:19+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/panther", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/panther.git", + "reference": "dc572828ee81051b87c39db8a9be1bb78980d738" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/panther/zipball/dc572828ee81051b87c39db8a9be1bb78980d738", + "reference": "dc572828ee81051b87c39db8a9be1bb78980d738", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=8.0", + "php-webdriver/webdriver": "^1.8.2", + "symfony/browser-kit": "^5.3 || ^6.0", + "symfony/dependency-injection": "^5.3 || ^6.0", + "symfony/deprecation-contracts": "^2.4 || ^3", + "symfony/dom-crawler": "^5.3 || ^6.0", + "symfony/http-client": "^5.3 || ^6.0", + "symfony/http-kernel": "^5.3 || ^6.0", + "symfony/process": "^5.3 || ^6.0" + }, + "require-dev": { + "symfony/css-selector": "^5.3 || ^6.0", + "symfony/framework-bundle": "^5.3 || ^6.0", + "symfony/mime": "^5.3 || ^6.0", + "symfony/phpunit-bridge": "^5.3 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Panther\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com", + "homepage": "https://dunglas.fr" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A browser testing and web scraping library for PHP and Symfony.", + "homepage": "https://dunglas.fr", + "keywords": [ + "e2e", + "scraping", + "selenium", + "symfony", + "testing", + "webdriver" + ], + "support": { + "issues": "https://github.com/symfony/panther/issues", + "source": "https://github.com/symfony/panther/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://www.panthera.org/donate", + "type": "custom" + }, + { + "url": "https://github.com/dunglas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/panther", + "type": "tidelift" + } + ], + "time": "2021-12-02T17:32:12+00:00" + }, + { + "name": "symfony/phpunit-bridge", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/552950db2919421ad917e29e76d1999a2a31a8e3", + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:46:08+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", + "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.2.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-18T13:56:57+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "24b6f4370f1cd59aacfc5e799c8614b40776e9c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/24b6f4370f1cd59aacfc5e799c8614b40776e9c8", + "reference": "24b6f4370f1cd59aacfc5e799c8614b40776e9c8", + "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.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-24T13:41:17+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" + }, + { + "name": "zenstruck/assert", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/zenstruck/assert.git", + "reference": "8fdd1f1b23f3c8612176d78616b52aa60df1be7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zenstruck/assert/zipball/8fdd1f1b23f3c8612176d78616b52aa60df1be7f", + "reference": "8fdd1f1b23f3c8612176d78616b52aa60df1be7f", + "shasum": "" + }, + "require": { + "php": ">=8.0", + "symfony/polyfill-php81": "^1.23", + "symfony/var-exporter": "^5.4|^6.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5", + "symfony/phpunit-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Zenstruck\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Bond", + "email": "kevinbond@gmail.com" + } + ], + "description": "Standalone, lightweight, framework agnostic, test assertion library.", + "homepage": "https://github.com/zenstruck/assert", + "keywords": [ + "assertion", + "phpunit", + "test" + ], + "support": { + "issues": "https://github.com/zenstruck/assert/issues", + "source": "https://github.com/zenstruck/assert/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://github.com/kbond", + "type": "github" + } + ], + "time": "2023-04-17T15:45:16+00:00" + }, + { + "name": "zenstruck/messenger-test", + "version": "v1.7.2", + "source": { + "type": "git", + "url": "https://github.com/zenstruck/messenger-test.git", + "reference": "8ef7993cf452182ee843a614921552ae560e408c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zenstruck/messenger-test/zipball/8ef7993cf452182ee843a614921552ae560e408c", + "reference": "8ef7993cf452182ee843a614921552ae560e408c", + "shasum": "" + }, + "require": { + "php": ">=8.0", + "symfony/deprecation-contracts": "^2.2|^3.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "zenstruck/assert": "^1.0" + }, + "conflict": { + "symfony/framework-bundle": "5.4.5|6.0.5" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Zenstruck\\Messenger\\Test\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Bond", + "email": "kevinbond@gmail.com" + } + ], + "description": "Assertions and helpers for testing your symfony/messenger queues.", + "homepage": "https://github.com/zenstruck/messenger-test", + "keywords": [ + "Messenger", + "queue", + "symfony", + "test" + ], + "support": { + "issues": "https://github.com/zenstruck/messenger-test/issues", + "source": "https://github.com/zenstruck/messenger-test/tree/v1.7.2" + }, + "funding": [ + { + "url": "https://github.com/kbond", + "type": "github" + } + ], + "time": "2023-02-24T20:54:57+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.1.11", + "ext-apcu": "*", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-intl": "*", + "ext-xsl": "*", + "ext-zip": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/composer.md b/composer.md new file mode 100644 index 0000000..428cbce --- /dev/null +++ b/composer.md @@ -0,0 +1,23 @@ +# Note regarding composer.json + +## Meilisearch + + meilisearch/meilisearch-php + +Is locked to `v0.26.0` to prevent this error: + + Executing script cache:clear [KO] + [KO] + Script cache:clear returned with error code 1 + !! + !! In DebugClassLoader.php line 327: + !! + !! Case mismatch between loaded and declared class names: "MeiliSearch\Client" + !! vs "Meilisearch\Client". + !! + !! + !! + Script @auto-scripts was called via post-update-cmd + + +I have opened a ticket https://github.com/meilisearch/meilisearch-php/issues/452. diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..efd16ea --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,36 @@ + ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Bazinga\GeocoderBundle\BazingaGeocoderBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Nelmio\Alice\Bridge\Symfony\NelmioAliceBundle::class => ['all' => true], + Fidry\AliceDataFixtures\Bridge\Symfony\FidryAliceDataFixturesBundle::class => ['all' => true], + Hautelook\AliceBundle\HautelookAliceBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], + ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], + Symfony\Bundle\MercureBundle\MercureBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + EasyCorp\Bundle\EasyAdminBundle\EasyAdminBundle::class => ['all' => true], + Craue\FormFlowBundle\CraueFormFlowBundle::class => ['all' => true], + Zenstruck\Messenger\Test\ZenstruckMessengerTestBundle::class => ['dev' => true, 'test' => true], + Snc\RedisBundle\SncRedisBundle::class => ['all' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + League\FlysystemBundle\FlysystemBundle::class => ['all' => true], + Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\UX\Autocomplete\AutocompleteBundle::class => ['all' => true], + Payum\Bundle\PayumBundle\PayumBundle::class => ['all' => true], + FOS\CKEditorBundle\FOSCKEditorBundle::class => ['all' => true], + Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true], +]; diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml new file mode 100644 index 0000000..2f79c6a --- /dev/null +++ b/config/packages/api_platform.yaml @@ -0,0 +1,24 @@ +api_platform: + title: 'PlateformCoop API' + description: 'List of PlateformCoop API endpoints. Most of them require to be logged.' + + # The version of the API. + version: '%app_version%' + + openapi: + # The contact information for the exposed API. + contact: + # The identifying name of the contact person/organization. + name: APES + # The URL pointing to the contact information. MUST be in the format of a URL. + url: http://www.apes-hdf.org/page-96-0-0.html + # The email address of the contact person/organization. MUST be in the format of an email address. + email: contact@apes-hdf.org + # A URL to the Terms of Service for the API. MUST be in the format of a URL. + termsOfService: https://github.com/ApesHDF/EBS/blob/main/LICENSE + # The license information for the exposed API. + license: + # The license name used for the API. + name: MIT + # URL to the license used for the API. MUST be in the format of a URL. + url: https://github.com/ApesHDF/EBS/blob/main/LICENSE diff --git a/config/packages/bazinga_geocoder.yaml b/config/packages/bazinga_geocoder.yaml new file mode 100644 index 0000000..3416159 --- /dev/null +++ b/config/packages/bazinga_geocoder.yaml @@ -0,0 +1,24 @@ +services: + _defaults: + autowire: true + autoconfigure: true + + # we need a PSR16 cache for bazinga_geoloc + cache.geoloc.psr16: + class: Symfony\Component\Cache\Psr16Cache + arguments: ['@cache.geoloc'] + +# See the docs at https://github.com/geocoder-php/BazingaGeocoderBundle +bazinga_geocoder: + # The local IP (127.0.0.1) will be replaced by the fake_ip + # see https://github.com/geocoder-php/BazingaGeocoderBundle/blob/5.0.0/Resources/doc/index.md#fake-local-ip + fake_ip: 92.159.11.105 # Lomme + providers: + nominatim: + # https://github.com/geocoder-php/nominatim-provider + factory: Bazinga\GeocoderBundle\ProviderFactory\NominatimFactory + + # https://github.com/geocoder-php/BazingaGeocoderBundle/blob/master/doc/cache.md + cache: 'cache.geoloc.psr16' + cache_lifetime: 86400 + cache_precision: ~ diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..21eca74 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,23 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + prefix_seed: platformecoop/ebs + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # app: cache.adapter.filesystem + + # Other options include: + # Redis + app: cache.adapter.redis + default_redis_provider: "%env(REDIS_URL)%" + + # 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: + # Specific pool for Geolocation stuff + cache.geoloc: + adapter: cache.app + default_lifetime: 3600 diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml new file mode 100644 index 0000000..ad874af --- /dev/null +++ b/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/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 0000000..a503ee0 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,44 @@ +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' # to synchronize with docker-compose.yml + + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + 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)%' + logging: false + +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/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..090fa16 --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,7 @@ +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 + organize_migrations: BY_YEAR diff --git a/config/packages/flysystem.yaml b/config/packages/flysystem.yaml new file mode 100644 index 0000000..0f69a58 --- /dev/null +++ b/config/packages/flysystem.yaml @@ -0,0 +1,100 @@ +parameters: + # physical storage path + upload_dir: '%kernel.project_dir%/public/storage/uploads' + category_upload_dir: '%upload_dir%/category' + user_upload_dir: '%upload_dir%/user' + product_upload_dir: '%upload_dir%/product' + + # relative URL path + base_path: '/storage/uploads' + category_base_path: '%base_path%/category' + user_base_path: '%base_path%/user' + product_base_path: '%base_path%/product' + + # S3 Bucket config + storage_bucket: '%env(resolve:STORAGE_BUCKET)%' + +# Read the documentation at https://github.com/thephpleague/flysystem-bundle/blob/master/docs/1-getting-started.md +flysystem: + storages: + category.storage: + adapter: 'local' + options: + directory: '%category_upload_dir%' + public_url: '%category_base_path%' + + # local + user.storage: + adapter: 'local' + options: + directory: '%user_upload_dir%' + public_url: '%user_base_path%' + + # Test S3 config locally with the min.io service (@see the docker compose files) +# user.storage: +# adapter: 'aws' +# visibility: public +# options: +# bucket: '%storage_bucket%' +# prefix: 'user' +# client: 'Aws\S3\S3Client' + + product.storage: + adapter: 'local' + options: + directory: '%product_upload_dir%' + public_url: '%product_base_path%' + default.storage: + adapter: 'local' + options: + directory: '%upload_dir%' + public_url: '%base_path%' + +# memory storage in the test env so we don't have to manipulate actual files +when@test: + flysystem: + storages: + category.storage: + adapter: 'memory' + public_url: '%category_base_path%' + user.storage: + adapter: 'memory' + public_url: '%user_base_path%' + product.storage: + adapter: 'memory' + public_url: '%product_base_path%' + default.storage: + adapter: 'memory' + public_url: '%base_path%' + +# S3 compatible bucket in the production environment +when@prod: + flysystem: + storages: + category.storage: + adapter: 'aws' + visibility: public + options: + bucket: '%storage_bucket%' + prefix: 'category' + client: 'Aws\S3\S3Client' + user.storage: + adapter: 'aws' + visibility: public + options: + bucket: '%storage_bucket%' + prefix: 'user' + client: 'Aws\S3\S3Client' + product.storage: + adapter: 'aws' + visibility: public + options: + bucket: '%storage_bucket%' + prefix: 'product' + client: 'Aws\S3\S3Client' + default.storage: + adapter: 'aws' + visibility: public + options: + bucket: '%storage_bucket%' + client: 'Aws\S3\S3Client' diff --git a/config/packages/fos_ckeditor.yaml b/config/packages/fos_ckeditor.yaml new file mode 100644 index 0000000..8a9bc50 --- /dev/null +++ b/config/packages/fos_ckeditor.yaml @@ -0,0 +1,10 @@ +# Read the documentation: https://symfony.com/doc/current/bundles/FOSCKEditorBundle/index.html + +twig: + form_themes: + - '@FOSCKEditor/Form/ckeditor_widget.html.twig' + +fos_ck_editor: + configs: + main_config: + toolbar: full diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..a5bf8ec --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,29 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + csrf_protection: true + http_method_override: false + + # 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 # native session handler + handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native + + #esi: true + #fragments: true + php_errors: + log: true + + # i18n + # this parameter with allowed routing prefix, @see LocalesCompilerPass + enabled_locales: ['fr'] + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/hautelook_alice.yaml b/config/packages/hautelook_alice.yaml new file mode 100644 index 0000000..1940b65 --- /dev/null +++ b/config/packages/hautelook_alice.yaml @@ -0,0 +1,13 @@ +hautelook_alice: + fixtures_path: 'fixtures' # Path to which to look for fixtures relative to the project directory or the bundle path. May be a string or an array of strings. + root_dirs: + - '%kernel.project_dir%' + +when@dev: &dev + hautelook_alice: + fixtures_path: 'fixtures' + +when@test: *dev + +# An instance can be initialized thanks to the prod fixtures +when@prod: *dev diff --git a/config/packages/http_discovery.yaml b/config/packages/http_discovery.yaml new file mode 100644 index 0000000..2a789e7 --- /dev/null +++ b/config/packages/http_discovery.yaml @@ -0,0 +1,10 @@ +services: + Psr\Http\Message\RequestFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\ResponseFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\ServerRequestFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\StreamFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\UploadedFileFactoryInterface: '@http_discovery.psr17_factory' + Psr\Http\Message\UriFactoryInterface: '@http_discovery.psr17_factory' + + http_discovery.psr17_factory: + class: Http\Discovery\Psr17Factory diff --git a/config/packages/knp_paginator.yaml b/config/packages/knp_paginator.yaml new file mode 100644 index 0000000..43657ce --- /dev/null +++ b/config/packages/knp_paginator.yaml @@ -0,0 +1,4 @@ +# https://github.com/KnpLabs/KnpPaginatorBundle#configuration-example +knp_paginator: + template: + pagination: '@KnpPaginator/Pagination/bootstrap_v5_pagination.html.twig' diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 0000000..198fc6f --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,10 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' + envelope: + sender: 'notifications@example.com' + +when@test: + framework: + mailer: + dsn: 'null://null' diff --git a/config/packages/meilisearch.yaml b/config/packages/meilisearch.yaml new file mode 100644 index 0000000..eaab125 --- /dev/null +++ b/config/packages/meilisearch.yaml @@ -0,0 +1,9 @@ +# Meilisearch +parameters: + meilisearchUrl: '%env(string:MEILISEARCH_URL)%' + meilisearchApiKey: '%env(string:MEILISEARCH_API_KEY)%' + +services: + _defaults: + autowire: true + autoconfigure: true diff --git a/config/packages/mercure.yaml b/config/packages/mercure.yaml new file mode 100644 index 0000000..f2a7395 --- /dev/null +++ b/config/packages/mercure.yaml @@ -0,0 +1,8 @@ +mercure: + hubs: + default: + url: '%env(MERCURE_URL)%' + public_url: '%env(MERCURE_PUBLIC_URL)%' + jwt: + secret: '%env(MERCURE_JWT_SECRET)%' + publish: '*' diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000..ddc9c4c --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,33 @@ +framework: + messenger: + # https://symfony.com/doc/current/messenger/multiple_buses.html + default_bus: command.bus + buses: + query.bus: # $queryBus + command.bus: # $commandBus + + # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling. + failure_transport: failed + + transports: + # https://symfony.com/doc/current/messenger.html#transport-configuration + sync: 'sync://' + async: '%env(MESSENGER_TRANSPORT_DSN)%' + failed: '%env(MESSENGER_TRANSPORT_DSN)%?queue_name=failed' + + routing: + # Sync + '*': sync # default routing for all messages until not changed + + # Route your messages to the transports + # Async + # 'App\Message\YourMessage': async + +when@test: + framework: + messenger: + transports: + # replace with your transport name here (e.g., my_transport: 'in-memory://') + # For more Messenger testing tools, see https://github.com/zenstruck/messenger-test + async: 'test://' + # sync: 'test://' diff --git a/config/packages/misd_phone_number.yaml b/config/packages/misd_phone_number.yaml new file mode 100644 index 0000000..ae476b0 --- /dev/null +++ b/config/packages/misd_phone_number.yaml @@ -0,0 +1,6 @@ +# To persist libphonenumber\PhoneNumber objects, add the Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType mapping to your application's config. +# This requires: doctrine/doctrine-bundle +doctrine: + dbal: + types: + phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType diff --git a/config/packages/mollie.yaml b/config/packages/mollie.yaml new file mode 100644 index 0000000..0157450 --- /dev/null +++ b/config/packages/mollie.yaml @@ -0,0 +1,11 @@ +services: + _defaults: + autowire: true # Automatically injects dependencies in your services. + autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + + # @see https://github.com/webbaard/payum-mollie#symfony-integration + app.payum.mollie.factory: + class: Payum\Core\Bridge\Symfony\Builder\GatewayFactoryBuilder + arguments: [PayHelper\Payum\Mollie\MollieGatewayFactory] + tags: + - { name: payum.gateway_factory_builder, factory: mollie } diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 0000000..8c9efa9 --- /dev/null +++ b/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/config/packages/nelmio_alice.yaml b/config/packages/nelmio_alice.yaml new file mode 100644 index 0000000..0be7f2a --- /dev/null +++ b/config/packages/nelmio_alice.yaml @@ -0,0 +1,15 @@ +hautelook_alice: + root_dirs: + +when@dev: &dev + nelmio_alice: + functions_blacklist: + - 'current' + - 'shuffle' + - 'date' + - 'time' + - 'file' + - 'md5' + - 'sha1' + +when@test: *dev diff --git a/config/packages/nelmio_cors.yaml b/config/packages/nelmio_cors.yaml new file mode 100644 index 0000000..c766508 --- /dev/null +++ b/config/packages/nelmio_cors.yaml @@ -0,0 +1,10 @@ +nelmio_cors: + defaults: + origin_regex: true + allow_origin: ['%env(CORS_ALLOW_ORIGIN)%'] + allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'] + allow_headers: ['Content-Type', 'Authorization'] + expose_headers: ['Link'] + max_age: 3600 + paths: + '^/': null diff --git a/config/packages/notifier.yaml b/config/packages/notifier.yaml new file mode 100644 index 0000000..ce92ec6 --- /dev/null +++ b/config/packages/notifier.yaml @@ -0,0 +1,29 @@ +framework: + notifier: + texter_transports: + sms_service: '%env(SMS_DSN)%' # change in your .env.local to test with a real API key + # sms_service: 'null://null' # use this to deactivate totally SMS + + channel_policy: + # use chat/slack, chat/telegram, sms/twilio or sms/nexmo + urgent: ['email'] + high: ['email'] + medium: ['email'] + low: ['email'] + + admin_recipients: + - { email: admin@example.com } + +when@dev: + framework: + notifier: + texter_transports: + fakesms: 'fakesms+email://mailer?to=TO&from=FROM' + +# don't send real SMS in test env, but we are still able to check that the code +# tried to send something with the AssertCount assertions (@see tests) +when@test: + framework: + notifier: + texter_transports: + sms_service: 'null://null' diff --git a/config/packages/nyholm_psr7.yaml b/config/packages/nyholm_psr7.yaml new file mode 100644 index 0000000..f135723 --- /dev/null +++ b/config/packages/nyholm_psr7.yaml @@ -0,0 +1,21 @@ +services: + # Register nyholm/psr7 services for autowiring with PSR-17 (HTTP factories) + Psr\Http\Message\RequestFactoryInterface: '@nyholm.psr7.psr17_factory' + Psr\Http\Message\ResponseFactoryInterface: '@nyholm.psr7.psr17_factory' + Psr\Http\Message\ServerRequestFactoryInterface: '@nyholm.psr7.psr17_factory' + Psr\Http\Message\StreamFactoryInterface: '@nyholm.psr7.psr17_factory' + Psr\Http\Message\UploadedFileFactoryInterface: '@nyholm.psr7.psr17_factory' + Psr\Http\Message\UriFactoryInterface: '@nyholm.psr7.psr17_factory' + + # Register nyholm/psr7 services for autowiring with HTTPlug factories + Http\Message\MessageFactory: '@nyholm.psr7.httplug_factory' + Http\Message\RequestFactory: '@nyholm.psr7.httplug_factory' + Http\Message\ResponseFactory: '@nyholm.psr7.httplug_factory' + Http\Message\StreamFactory: '@nyholm.psr7.httplug_factory' + Http\Message\UriFactory: '@nyholm.psr7.httplug_factory' + + nyholm.psr7.psr17_factory: + class: Nyholm\Psr7\Factory\Psr17Factory + + nyholm.psr7.httplug_factory: + class: Nyholm\Psr7\Factory\HttplugFactory diff --git a/config/packages/payum.yaml b/config/packages/payum.yaml new file mode 100644 index 0000000..91303df --- /dev/null +++ b/config/packages/payum.yaml @@ -0,0 +1,21 @@ +# https://github.com/Payum/PayumBundle +payum: + security: + token_storage: + App\Entity\PaymentToken: { doctrine: orm } + + storages: + App\Entity\Payment: { doctrine: orm } + + gateways: + # For tests but can also be used for offline payments like cash. + offline: + factory: offline + + # https://github.com/webbaard/payum-mollie + # fork for PHP 8.0+ + # see config/packages/mollie.yaml + mollie: + factory: mollie + apiKey: '%env(string:PAYUM_APIKEY)%' + method: creditcard # one of directdebit, creditcard or directdebit_oneoff diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..4b766ce --- /dev/null +++ b/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/config/packages/security.yaml b/config/packages/security.yaml new file mode 100644 index 0000000..b75cfbc --- /dev/null +++ b/config/packages/security.yaml @@ -0,0 +1,67 @@ +security: + # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords + password_hashers: + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' + # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider + providers: + # used to reload user from session & other features (e.g. switch_user) + app_user_provider: + entity: + class: App\Entity\User + property: email + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + lazy: true + provider: app_user_provider + # checkers are in src/Security/Checker + user_checker: security.user_checker.chain.main + + # activate different ways to authenticate + # https://symfony.com/doc/current/security.html#the-firewall + + # https://symfony.com/doc/current/security/impersonating_user.html + switch_user: + parameter: _switch_user + + form_login: + login_path: app_login + check_path: app_login + enable_csrf: true + default_target_path: app_user_my_account + + # https://symfony.com/doc/current/security.html#logging-out + logout: + path: app_logout + target: app_login + + entry_point: App\Security\EntryPoint\AuthenticationEntryPoint + + login_throttling: + max_attempts: 2 + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_GROUP_ADMIN] } + # to synchronize with MyAccountAction + - { path: ^/en/my-account/, roles: ROLE_USER } + - { path: ^/fr/mon-compte/, roles: ROLE_USER } + + role_hierarchy: + ROLE_ADMIN: [ROLE_USER, ROLE_ALLOWED_TO_SWITCH, ROLE_GROUP_ADMIN] + +when@test: + 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 diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..74ff738 --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,7 @@ +# https://stackoverflow.com/q/69809320/633864 +sensio_framework_extra: + router: + annotations: false + request: + converters: false + auto_convert: false diff --git a/config/packages/snc_redis.yaml b/config/packages/snc_redis.yaml new file mode 100644 index 0000000..39b94b5 --- /dev/null +++ b/config/packages/snc_redis.yaml @@ -0,0 +1,27 @@ +services: + _defaults: + autowire: true + autoconfigure: true + Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler: + arguments: + - '@snc_redis.session' + - { 'ttl': 3600 } + +# Define your clients here. The example below connects to database 0 of the default Redis server. +# +# See https://github.com/snc/SncRedisBundle/blob/master/docs/README.md for instructions on +# how to configure the bundle. +snc_redis: + clients: + default: + type: phpredis + alias: default + dsn: "%env(REDIS_URL)%" + logging: '%kernel.debug%' + + # use in framework. + session: + type: phpredis + alias: session + dsn: "%env(REDIS_URL)%/1" + logging: '%kernel.debug%' diff --git a/config/packages/stof_doctrine_extensions.yaml b/config/packages/stof_doctrine_extensions.yaml new file mode 100644 index 0000000..41edd78 --- /dev/null +++ b/config/packages/stof_doctrine_extensions.yaml @@ -0,0 +1,10 @@ +# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html +# See the official DoctrineExtensions documentation for more details: https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc +stof_doctrine_extensions: + default_locale: fr_FR + orm: + default: + timestampable: true + sluggable: true + sortable: true + tree: true diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml new file mode 100644 index 0000000..0bf4061 --- /dev/null +++ b/config/packages/translation.yaml @@ -0,0 +1,16 @@ +parameters: + requirements_locales: null # @see LocalesCompilerPass + +framework: + default_locale: fr + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - fr +# providers: +# crowdin: +# dsn: '%env(CROWDIN_DSN)%' +# loco: +# dsn: '%env(LOCO_DSN)%' +# lokalise: +# dsn: '%env(LOKALISE_DSN)%' diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..c6943af --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,16 @@ +twig: + default_path: '%kernel.project_dir%/templates' + form_themes: ['bootstrap_5_horizontal_layout.html.twig'] # bootstrap_5_layout.html.twig + globals: + app_version: '%app_version%' + upload_images_allowed_extensions: '%upload_maxsize_by_file%' + upload_maxsize_by_file: '%upload_maxsize_by_file%' + upload_maxsize_total: '%upload_maxsize_total%' + upload_max_images: '%upload_max_images%' + brand: '%brand%' + role_user: !php/const App\Entity\User::ROLE_USER + role_admin: !php/const App\Entity\User::ROLE_ADMIN + +when@test: + twig: + strict_variables: true diff --git a/config/packages/uid.yaml b/config/packages/uid.yaml new file mode 100644 index 0000000..c94558d --- /dev/null +++ b/config/packages/uid.yaml @@ -0,0 +1,4 @@ +framework: + uid: + # default_uuid_version: 7 + # time_based_uuid_version: 7 diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 0000000..0201281 --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,13 @@ +framework: + validation: + 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/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml new file mode 100644 index 0000000..2805d5c --- /dev/null +++ b/config/packages/web_profiler.yaml @@ -0,0 +1,17 @@ +when@dev: + web_profiler: + toolbar: '%kernel.debug%' + 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/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..de39414 --- /dev/null +++ b/config/packages/webpack_encore.yaml @@ -0,0 +1,50 @@ +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 + +framework: + assets: + json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' + +when@prod: + webpack_encore: + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Available in version 1.2 + cache: true + strict_mode: true + +when@test: + webpack_encore: + strict_mode: false diff --git a/config/packages/workflow.yaml b/config/packages/workflow.yaml new file mode 100644 index 0000000..a8d8d1f --- /dev/null +++ b/config/packages/workflow.yaml @@ -0,0 +1,56 @@ +# https://symfony.com/doc/current/workflow.html#configuration +# Get the generated services : +# $ php bin/console debug:autowiring workflow +# Generate the graphs in "/docs": +# $ make workflows +framework: + workflows: + service_request_status: + type: 'state_machine' + audit_trail: + enabled: true + marking_store: + type: 'method' + # for now workflow uses strings not enums + # @see https://github.com/symfony/symfony/issues/44211 + property: 'statusRaw' + supports: + - App\Entity\ServiceRequest + initial_marking: new + # @see ServiceRequestStatus + places: + - new + - to_confirm + - confirmed + - refused + - finished + # @see ServiceRequestStatusWorkflow + transitions: + # owner confirmation + accept: + from: new + to: to_confirm + # the owner modifies the dates and accept the request + modifyOwner: + from: new + to: to_confirm + # the recipient modifies the dates and ask the owner to validate again + modifyRecipient: + from: to_confirm + to: new + # recipient confirmation + confirm: + from: to_confirm + to: confirmed + # transaction manually finalized by the owner + finalize: + from: confirmed + to: finished + # transaction auto-finalized by the system + autoFinalize: + from: confirmed + to: finished + # refusal from the owner or recipient + refuse: + from: [new, to_confirm, confirmed] + to: refused diff --git a/config/packages_extra/doctrine.yaml b/config/packages_extra/doctrine.yaml new file mode 100644 index 0000000..035dd03 --- /dev/null +++ b/config/packages_extra/doctrine.yaml @@ -0,0 +1,11 @@ +# additional services related to Doctrine +services: + _defaults: + autowire: true + autoconfigure: true + + # Needed to activate autowiring for the Doctrine listener + App\Doctrine\Listener\: + resource: '../../src/Doctrine/Listener' + tags: + - { name: doctrine.orm.entity_listener } diff --git a/config/packages_extra/flysystem.yaml b/config/packages_extra/flysystem.yaml new file mode 100644 index 0000000..3ed296e --- /dev/null +++ b/config/packages_extra/flysystem.yaml @@ -0,0 +1,53 @@ +# additional services related to Flysystem +parameters: + # Allowed extensions for images + upload_images_allowed_extensions: ['png', 'jpg', 'jpeg'] + + # Allowed maxsize by file (mb) + upload_maxsize_by_file: 1 + + # Allowed maxsize for multiple uploads (mb) + upload_maxsize_total: 5 + + # Max number of photos/images by product + upload_max_images: 5 + + # S3 Bucket config + storage_endpoint: '%env(string:STORAGE_ENDPOINT)%' + storage_region: '%env(string:STORAGE_REGION)%' + storage_use_path_style_endpoint: '%env(bool:STORAGE_USE_PATH_STYLE_ENDPOINT)%' + storage_key: '%env(string:STORAGE_KEY)%' + storage_secret: '%env(string:STORAGE_SECRET)%' + +services: + _defaults: + autowire: true + autoconfigure: true + + _instanceof: + App\Twig\FlysystemImageInterface: + tags: [app.flysystem_image_extension] + + App\Twig\FlysystemImagesInterface: + tags: [app.flysystem_images_extension] + + App\Twig\: + resource: '../../src/Twig/' + + App\Twig\ImageExtensionCollection: + arguments: + - !tagged_iterator app.flysystem_image_extension + + App\Twig\ImagesExtensionCollection: + arguments: + - !tagged_iterator app.flysystem_images_extension + + Aws\S3\S3Client: + arguments: + - endpoint: '%storage_endpoint%' + version: 'latest' + region: '%storage_region%' + use_path_style_endpoint: '%storage_use_path_style_endpoint%' + credentials: + key: '%storage_key%' + secret: '%storage_secret%' diff --git a/config/packages_extra/mailer.yaml b/config/packages_extra/mailer.yaml new file mode 100644 index 0000000..5644767 --- /dev/null +++ b/config/packages_extra/mailer.yaml @@ -0,0 +1,17 @@ +# additional services related to the mailer +services: + _defaults: + autowire: true + autoconfigure: true + + _instanceof: + App\Mailer\Email\EmailInterface: + tags: ['app.email'] + + # we need to reload EmailInterface objects here so the correct tag is applied + App\Mailer\Email\: + resource: '../../src/Mailer/Email/' + + App\Mailer\EmailCollection: + arguments: + - !tagged_iterator app.email diff --git a/config/packages_extra/uuid.yaml b/config/packages_extra/uuid.yaml new file mode 100644 index 0000000..04d1e46 --- /dev/null +++ b/config/packages_extra/uuid.yaml @@ -0,0 +1,11 @@ +# additional services related to the uuid component +services: + _defaults: + autowire: true + autoconfigure: true + + # Activate these commands + Symfony\Component\Uid\Command\GenerateUlidCommand: ~ + Symfony\Component\Uid\Command\GenerateUuidCommand: ~ + Symfony\Component\Uid\Command\InspectUlidCommand: ~ + Symfony\Component\Uid\Command\InspectUuidCommand: ~ diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 0000000..7cbe578 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,7 @@ + symfony/mercure-bundle ### +###< symfony/mercure-bundle ### + +###> doctrine/doctrine-bundle ### + database: + ports: + - "5432" +###< doctrine/doctrine-bundle ### + +volumes: + storage: + minio_data: diff --git a/docker-compose.override.yml.dist b/docker-compose.override.yml.dist new file mode 100644 index 0000000..f3ac34c --- /dev/null +++ b/docker-compose.override.yml.dist @@ -0,0 +1,23 @@ +# start with make start-dev +services: + # http://localhost:61302/ + mailer: + image: schickling/mailcatcher + ports: + - "1081:1080" + - "1026:1025" + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:1080"] + interval: 10s + timeout: 5s + retries: 5 + + adminer: + image: adminer + ports: + - "8989:8080" + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail http://127.0.0.1:8080/ || exit 1"] + interval: 10s + timeout: 30s + retries: 10 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..8c33061 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,13 @@ +version: "3.4" + +# Production environment override +services: + php: + environment: + APP_SECRET: ${APP_SECRET} + MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET} + + caddy: + environment: + MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} + MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..55b97de --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,123 @@ +version: "3.4" + +services: + php: + build: + context: . + target: app_php + args: + SYMFONY_VERSION: ${SYMFONY_VERSION:-} + STABILITY: ${STABILITY:-stable} + restart: unless-stopped + volumes: + - php_socket:/var/run/php + healthcheck: + interval: 10s + timeout: 3s + retries: 3 + start_period: 30s + environment: + # Run "composer require symfony/orm-pack" to install and configure Doctrine ORM + DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:5432/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-14} + # Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration + MERCURE_URL: ${CADDY_MERCURE_URL:-http://caddy/.well-known/mercure} + MERCURE_PUBLIC_URL: https://${SERVER_NAME:-localhost}/.well-known/mercure + MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + depends_on: + - redis + - database + + caddy: + build: + context: . + target: app_caddy + depends_on: + - php + environment: + SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80} + MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + restart: unless-stopped + volumes: + - php_socket:/var/run/php + - caddy_data:/data + - caddy_config:/config + ports: + # HTTP + - target: 80 + published: ${HTTP_PORT:-80} + protocol: tcp + # HTTPS + - target: 443 + published: ${HTTPS_PORT:-443} + protocol: tcp + # HTTP/3 + - target: 443 + published: ${HTTP3_PORT:-443} + protocol: udp + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider https://localhost/ || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + +# Mercure is installed as a Caddy module, prevent the Flex recipe from installing another service +###> symfony/mercure-bundle ### +###< symfony/mercure-bundle ### + +###> doctrine/doctrine-bundle ### + database: + image: postgres:${POSTGRES_VERSION:-14}-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-app} + # You should definitely change the password in production + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} + POSTGRES_USER: ${POSTGRES_USER:-app} + volumes: + - db-data:/var/lib/postgresql/data:rw + # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! + # - ./docker/db/data:/var/lib/postgresql/data:rw + healthcheck: + test: ["CMD", "pg_isready", "-U", "app"] + interval: 10s + timeout: 5s + retries: 5 +###< doctrine/doctrine-bundle ### + +###> snc/redis-bundle ### +# Redis (official image) https://hub.docker.com/_/redis + redis: + image: redis:7-alpine + ports: + - '6389:6379' + healthcheck: + test: ["CMD-SHELL", "redis-cli -h 127.0.0.1 ping | grep 'PONG' || exit 1"] + interval: 10s + timeout: 30s + retries: 10 +###< snc/redis-bundle ### + +###< meilisearch/meilisearch-php ### + # https://docs.meilisearch.com/learn/cookbooks/docker.html#download-meilisearch-with-docker + meilisearch: + image: getmeili/meilisearch:v1.1 + volumes: + - ./data.ms:/data.ms + ports: + - "7700:7700" + environment: + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-ms} + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:7700"] + interval: 10s + timeout: 5s + retries: 5 +###< meilisearch/meilisearch-php ### + +volumes: + php_socket: + caddy_data: + caddy_config: +###> doctrine/doctrine-bundle ### + db-data: +###< doctrine/doctrine-bundle ### diff --git a/docker/caddy/Caddyfile b/docker/caddy/Caddyfile new file mode 100644 index 0000000..6fa199b --- /dev/null +++ b/docker/caddy/Caddyfile @@ -0,0 +1,31 @@ +{ + # Debug + {$DEBUG} +} + +{$SERVER_NAME} + +log + +route { + root * /srv/app/public + mercure { + # Transport to use (default to Bolt) + transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db} + # Publisher JWT key + publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG} + # Subscriber JWT key + subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG} + # Allow anonymous subscribers (double-check that it's what you want) + anonymous + # Enable the subscription API (double-check that it's what you want) + subscriptions + # Extra directives + {$MERCURE_EXTRA_DIRECTIVES} + } + vulcain + push + php_fastcgi unix//var/run/php/php-fpm.sock + encode zstd gzip + file_server +} diff --git a/docker/php/conf.d/app.dev.ini b/docker/php/conf.d/app.dev.ini new file mode 100644 index 0000000..174eca2 --- /dev/null +++ b/docker/php/conf.d/app.dev.ini @@ -0,0 +1,6 @@ +; See https://docs.docker.com/desktop/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host +; See https://github.com/docker/for-linux/issues/264 +; The `client_host` below may optionally be replaced with `discover_client_host=yes` +; Add `start_with_request=yes` to start debug session on each request +xdebug.client_host = 'host.docker.internal' +memory_limit = -1 diff --git a/docker/php/conf.d/app.ini b/docker/php/conf.d/app.ini new file mode 100644 index 0000000..5f832c0 --- /dev/null +++ b/docker/php/conf.d/app.ini @@ -0,0 +1,15 @@ +expose_php = 0 +date.timezone = Europe/Paris +apc.enable_cli = 1 +session.use_strict_mode = 1 +zend.detect_unicode = 0 + +; https://symfony.com/doc/current/performance.html +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +opcache.enable_file_override = 1 + +upload_max_filesize = 6M diff --git a/docker/php/conf.d/app.prod.ini b/docker/php/conf.d/app.prod.ini new file mode 100644 index 0000000..993d481 --- /dev/null +++ b/docker/php/conf.d/app.prod.ini @@ -0,0 +1,2 @@ +opcache.preload_user = www-data +opcache.preload = /srv/app/config/preload.php diff --git a/docker/php/docker-entrypoint.sh b/docker/php/docker-entrypoint.sh new file mode 100755 index 0000000..0884add --- /dev/null +++ b/docker/php/docker-entrypoint.sh @@ -0,0 +1,66 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi + +if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then + # Install the project the first time PHP is started + # After the installation, the following block can be deleted + if [ ! -f composer.json ]; then + CREATION=1 + composer create-project "symfony/skeleton $SYMFONY_VERSION" tmp --stability="$STABILITY" --prefer-dist --no-progress --no-interaction --no-install + + cd tmp + composer require "php:>=$PHP_VERSION" + composer config --json extra.symfony.docker 'true' + cp -Rp . .. + cd - + + rm -Rf tmp/ + fi + + if [ "$APP_ENV" != 'prod' ]; then + composer install --prefer-dist --no-progress --no-interaction + fi + + if grep -q ^DATABASE_URL= .env; then + # After the installation, the following block can be deleted + if [ "$CREATION" = "1" ]; then + echo "To finish the installation please press Ctrl+C to stop Docker Compose and run: docker compose up --build" + sleep infinity + fi + + echo "Waiting for db to be ready..." + ATTEMPTS_LEFT_TO_REACH_DATABASE=60 + until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(bin/console dbal:run-sql "SELECT 1" 2>&1); do + if [ $? -eq 255 ]; then + # If the Doctrine command exits with 255, an unrecoverable error occurred + ATTEMPTS_LEFT_TO_REACH_DATABASE=0 + break + fi + sleep 1 + ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) + echo "Still waiting for db to be ready... Or maybe the db is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left" + done + + if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then + echo "The database is not up or not reachable:" + echo "$DATABASE_ERROR" + exit 1 + else + echo "The db is now ready and reachable" + fi + + if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then + bin/console doctrine:migrations:migrate --no-interaction + fi + fi + + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var +fi + +exec docker-php-entrypoint "$@" diff --git a/docker/php/docker-healthcheck.sh b/docker/php/docker-healthcheck.sh new file mode 100644 index 0000000..f322de5 --- /dev/null +++ b/docker/php/docker-healthcheck.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +if env -i REQUEST_METHOD=GET SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping cgi-fcgi -bind -connect /var/run/php/php-fpm.sock; then + exit 0 +fi + +exit 1 diff --git a/docker/php/php-fpm.d/zz-docker.conf b/docker/php/php-fpm.d/zz-docker.conf new file mode 100644 index 0000000..9f454cd --- /dev/null +++ b/docker/php/php-fpm.d/zz-docker.conf @@ -0,0 +1,8 @@ +[global] +daemonize = no +process_control_timeout = 20 + +[www] +listen = /var/run/php/php-fpm.sock +listen.mode = 0666 +ping.path = /ping diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..63f0942 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,77 @@ +# Plateforme EBS + +« Simplicity is the ultimate sophistication » - Leonardo da Vinci + +## Prerequisites (at least) + +* docker v20.10+ (`docker --version`) + +## Initializing and starting the project with Docker + +Clone the project: + + git clone git@github.com:ApesHDF/EBS.git + +Check that your 80 and 443 ports are free, then build and start the Docker containers: + + make build + make start + +Access `https://localhost` in your browser and accept the security risk. + +You should have access now to: + +* Main project : https://localhost +* Meilisearch : http://localhost:7700/ + +To access the dev tools, run= + + make start-dev + +You should have access now to: + +* Adminer : http://localhost:8989/?pgsql=database&username=app&db=app&ns=public&select=group +* Maildev : http://localhost:1080 + +## Makefile + +Check the [Makefile](Makefile) file to see all available commands. +In this project, the commands must be called outside the container. +If you want to use the Makefile from within the PHP container, just add `-n` +to the make call, eg: + + make stan -n + +Which outputs: + + docker compose exec php ./vendor/bin/phpstan analyse -c phpstan.neon --memory-limit 1G + +Enter the PHP container: + + make sh + +Then run the wanted command without the docker part (`docker compose exec`): + + php ./vendor/bin/phpstan analyse -c phpstan.neon --memory-limit 1G + +It's generally more conveniant to run Symfony commands inside the container: + + bin/console debug:container + +## Development + +Create the dev database and load fixtures: + + make load-fixtures + +Create the test database and load fixtures: + + make load-test-fixtures + +Run the tests and generate the code coverage report: + + make coverage + +Run all checks like the Github CI: + + make ci diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..8d04453 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,8 @@ +# Architecture + +Here is the diagram of the global architecture, presenting the high level components +and their relations. + +Check out the other documentation files for more details about a specific component. + +![MCD](images/archi.png "Achitecture") diff --git a/docs/composer.md b/docs/composer.md new file mode 100644 index 0000000..41d0127 --- /dev/null +++ b/docs/composer.md @@ -0,0 +1,35 @@ +# Composer + +This file documents the content of the `composer.json` for custom stuff. + + +## webbaard/payum-mollie + +For the Mollie gatework we use a fork of: + + https://github.com/webbaard/payum-mollie + +Which is itself a fork of: + + https://github.com/PayHelper/payum-mollie + +This last payum Mollie gateway is not up to date. +That's why we use the fork that supports the last Mollie 2.x API and SDK. + +We did a copy of the fork to avoid being tied to a specific vendor. +The fork is in the `coopTilleuls` vendor, this organization is behind the +[API Platform](https://github.com/api-platform/) open source project and can be +trusted. + +As the library is about payments, it is important to mitigate [supply chain attacks](https://dunglas.dev/2023/05/mitigate-attacks-on-your-php-supply-chain/). + +As soon as the the offical PayHelper Mollie gate will be updated, we will switch +to the official gateway and archive this temporary fork. +A [PR](https://github.com/PayHelper/payum-mollie/pull/8) has been open. + + +## easycorp/easyadmin-bundle + +The version is fixed to `v4.5.1`, to avoid a problem with enumerations. +The last time I tried, the issue was still there. +Check if it can be fixed more easily with the `4.6` version. diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..6459fcb --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,137 @@ +# Configuration + +This page documents the settings that can be configured as environment varibles +for the production environment. +Defaults value are shown in the [.env](../.env) file. + + +## Application + +| name | default value | +|--------------|---------------| +| APP_ENV | prod | +| APP_DEBUG | false | +| APP_SECRET | - | + +SMS_DSN=null://nullThe env and debug should always keep these values in the prod environement. +The secret is a random string that can be changed at each deploy. + + +## Database + + DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:5432/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-14} + +There are 4 parameters that should be configured as environment variables : + +| name | default value | +|-------------------|----------------| +| POSTGRES_USER | app | +| POSTGRES_PASSWORD | !ChangeMe! | +| POSTGRES_DB | app | +| POSTGRES_VERSION | 14 | + +The `POSTGRES_VERSION` should not be changed. + +The default DSN to access the database when using the Docker setup is `database`. + + +## Emails + + MAILER_DSN= + +Check out the [Symfony documentation](https://symfony.com/doc/current/mailer.html#using-built-in-transports). +There are a number of services that can be used. +For example, to use a standart SMTP server use: + + MAILER_DSN=smtp://mailer:1025 + +Where mailer is the DSN of your SMTP server and 1025 the port to use. + +Yo use Gmail with a secret key use: + + MAILER_DSN=gmail://email@example.com:secretkey@default + +Note that to avoid having SPAM issues, you should use a dedicated service like +Twilio, Sendgrid, Mailingblue... + +## SMS + + SMS_DSN=null://null + +This is the main parameter to send DNS. If you leave `null://null`, nothing will +be send without errors. It can be useful when having issues with your SMS provider +and wanting to disable it temporarly. + +For example, to use a service like Twilio, the parameters should look like: + + SMS_DSN=twilio://AccountSID:AuthToken@default?from=%2BFROMNUMBER + + +## Meilisearch + + MEILISEARCH_URL=http://meilisearch:7700 + MEILISEARCH_API_KEY=ms + +A local meilisearch instance is used by default. +But, you can also use a [managed service](https://cloud.meilisearch.com), in this +case, the parameters should look like: + + MEILISEARCH_URL=https://ms-id-id.subdomain.meilisearch.io + MEILISEARCH_API_KEY=f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6 + + +## Payum/Mollie + + PAYUM_APIKEY=test_FRabcdefghijklmnopqrstuvwxyzab + PAYUM_GATEWAY=mollie + +Payum with the Mollie gateway is used. +For now the mollie Gateway must be used, but, as Payum is used, another gateway +like Stripe could be added with some modifications on the code (feel to create a +PR for this). The are [official Stripe Gateways for Mollie](https://github.com/Payum/Payum/blob/master/docs/supported-gateways.md#official). + +To configure your Mollie account, access the [dashboard](https://my.mollie.com/dashboard/login?lang=en). +Create an account. + +Click on the ["Developer" page](https://my.mollie.com/dashboard/org_17065949/developers/api-keys) +and create a test key. +The test key has the format `test_xxxxxxxxxxxxx`, then put this value in the `PAYUM_APIKEY` +variable. +The test key can be used immediatly, but to have a production key you will have +to send documents to confirm the identity of your company and to be able to start +to receive payments on your bank account. + +Note, that this step can take some time, and should start the procedure the sooner +possible. +Meanwhile, you will have access the "fake" payment page to similate payments without +having to enter an actual credit card. + +Once your account is validated, replace the test API key by the live API key. + + +## Files/S3 bucket + +The goal here is to have persistent data in the production environment. + +Locally, the local file storage is used. +For tests, a memory storage is used. +In the production environment a S3 compatible bucket is used. +It has been tested with a [min.io](https://min.io/) service, there is a docker setup +available in the docker compose files. +Here are the default settings when using the min.io container: + + STORAGE_BUCKET=images + STORAGE_ENDPOINT=http://storage:9000 + STORAGE_REGION=us-east-1 + STORAGE_USE_PATH_STYLE_ENDPOINT=true + STORAGE_KEY=app + STORAGE_SECRET=!ChangeMe! + +If you want to use a managed service, change the values of these parameters to +match those of your provider. +Note that when using the min.io with the dev environment is just to test the S3 +configuration. +There is config example in the [config/packages/flysystem.yaml](../config/packages/flysystem.yaml) + +The bucket must be configured to be public and the default visibulity of each storage +entry should also be public. diff --git a/docs/crons.md b/docs/crons.md new file mode 100644 index 0000000..1b7a933 --- /dev/null +++ b/docs/crons.md @@ -0,0 +1,80 @@ +# CRON + +The following CRON must be installed: + +## Handle membership end: + +* remove the group association from the user +* remove the products from the group and change their visibility +* notify the user by email and SMS + + + bin/console app:end-membership --env=prod + + +## Notifiy users for membership expiration + +* the day before the membership is over: + + + bin/console app:notify-membership-expiration 1 --env=prod + +* A week before the membership is over: + + + bin/console app:notify-membership-expiration 7 --env=prod + +As you can see, can can run and pass the number of days you want. +If you want to notify one month before the end of annual membershipt, the query +should be modified to exclude monthly membership. + + +## Notify users for services requests start and end + +Notify owner and recipient when a service requests starts tomorrow: + + bin/console app:notify-service-request-dates start --env=prod + +Notify owner and recipient when a service request end tomorrow: + + bin/console app:notify-service-request-dates end --env=prod + + +## Help + +All commands are documented. You can get it by using the help command, eg: + + bin/console help app:notify-membership-expiration + +```shell +Description: +Notify expiring membership. + +Usage: +app:notify-membership-expiration + +Arguments: +days Number of days from tomorrow (1 = notifiy members expiring tomorrow) + +Options: +-h, --help Display help for the given command. When no command is given display help for the list command +-q, --quiet Do not output any message +-V, --version Display this application version +--ansi|--no-ansi Force (or disable --no-ansi) ANSI output +-n, --no-interaction Do not ask any interactive question +-e, --env=ENV The Environment name. [default: "dev"] +--no-debug Switch off debug mode. +-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +Help: +Notify expiring membership. + +COMMAND: +App\Command\NotifyMembershipExpirationCommand + +DEV: +bin/console app:notify-membership-expiration -vv + +PROD: +bin/console app:notify-membership-expiration --env=prod --no-debug +``` diff --git a/docs/database.md b/docs/database.md new file mode 100644 index 0000000..84cc662 --- /dev/null +++ b/docs/database.md @@ -0,0 +1,129 @@ +# Database + + +## Introduction + +The database choosen is a Postgres 14 database as it integrates well with Symfony +and Doctrine. +When developping you can use the `make load-fixtures` command to reload a database +from scratch with some data samples. + + +## Docker + +In the docker hub, the database is available with the `database` DSN. +Check out the default settings in the [docker-compose.yml](../docker-compose.yml) +file. + + +## Schema + +Here is the current schema of the dabase: + +![MCD](images/mcd.png "MCD") + +It has 19 tables divided in several domains: + +* users +* groups +* products +* service requests +* payments +* menu +* pages +* configuration + +### Service requests + +In this application, the technical name for loans and services (services are not related to objects) +are service requests. + +Services requests are linked to products. + +A product can be an object or a service. + +The service requests follow a strict workflow in order to garantee the date integrity. + +Here is the workflow in place: + +![MCD](images/service_request_status_workflow.png "The service request workflow") + + +### System tables + +* The migrations are stored in the `doctrine_migration_table`. +* The messages are store in `messenger_messages` + +Note that for now all messages are synchronous, but if you change to change +this for performance reasons, the messages will be stored in these tables ans then +processed by the messenger consumer. + +Check out the [Symfony documention](https://symfony.com/doc/current/messenger.html#consuming-messages-running-the-worker) +on this subject. + +It's up to your responsability to setup the CRON that will consume the asynchronous +messages. + + +## Doctrine + +The description of each property/field is described in each entity: + +Example: + +```php +/** + * A user must be enabled to be able to login. If a user tries to login with + * a deactivated account, then he will have a specific message indicating + * the reason he can't login. He should be adviced to contact the instance administrator. + */ +#[ORM\Column(type: 'boolean', nullable: false)] +protected bool $enabled = true; +``` + +So, open the entity Doctrine files in the [src/Entity](../src/Entity) directory +to have the description of each property. + + +## Development + +To access the database with a GUI, after running `make start` you can run +`make start-dev` and enter http://localhost:8989/?pgsql=database&username=app&db=app&ns=public&dump=service_request +to access the adminer interface which is a small convenient tool to view the +tables and data they contain. + + +## Tests + +Fixtures are loaded depending on the current environment. +In dev and test the same fixtures are loaded (`dev` is a symbolik link to `test`, +see [fixtures/](../fixtures). + + +## Production + +A database with the minimal data to bootstrap the application is available. +It can be loaded with: + + make load-prod-fixtures + +It should only be used one time, or if you want to reset the database for testing +purpose. +Use it with care as it will delete all existing data of the current configured database. + + +## Migrations + +When the project will evolve, Doctrine migrations will be provided. +Retrieve the migrations in your project, then run: + + bin/console doctrine:migrations:migrate --env=prod + +Use the `--no-interaction` option to skip the interactive mode. +Use this option with care. + +Migrations will be documented in each file in the main docblock, so open them to +precisely understand what will be modified. + +Also understand, that depending on the cases, sometimes a migration cannot be undone. +It's your responsability to make a full backup of your data before running migrations. diff --git a/docs/front-api-calls.md b/docs/front-api-calls.md new file mode 100644 index 0000000..787fea3 --- /dev/null +++ b/docs/front-api-calls.md @@ -0,0 +1,19 @@ +# API calls from the Front + +To make an API call from the Front you've got to use native [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) +function in a [Stimulus](https://stimulus.hotwired.dev/) controller. + +Do not use hard-coded path in your Controller. Get the path from the back in your +twig template and forward it to your Stimulus Controller with a [Value attribute](https://stimulus.hotwired.dev/reference/values). + +Example for the product component: + +```html + +data-product-route-value="{{ path('_api_/product/{id}/switchStatus_post', {id: product.id}) }}" +``` + +```javascript +// assets/controllers/product_controller.js +const response = await fetch(this.routeValue, { method: 'POST' }) +``` diff --git a/docs/geoloc.md b/docs/geoloc.md new file mode 100644 index 0000000..4b0fa27 --- /dev/null +++ b/docs/geoloc.md @@ -0,0 +1,38 @@ +# Geoloc / GIS + +* https://symfony-devs.slack.com/archives/C3F1WBW5R/p1665562230485859 + +## Symfony bundle + +* https://github.com/geocoder-php/BazingaGeocoderBundle/blob/master/doc/index.md + +This bundle handles multiples providers. +The nominatim provider is free and can be chained with paying provider in case it +doesn't work or the free service isn't stable enough for the project needs. + +## OpenStreetmap (Nominatim) Provider + +* https://wiki.openstreetmap.org/wiki/Nominatim +* https://github.com/geocoder-php/nominatim-provider + +This provider is free and is a good starting point. + +Be careful that it has restrictions and the consummer must respect +the [policy](https://operations.osmfoundation.org/policies/nominatim/). + + +## Cache + +A cache is implemented, so when a user does the same query, the result cache is +used instead of querying the geocoding service another time for the same query. + + +## CLI Tests + +Getting the information for a given address: + + bin/console geocoder:geocode "82 Rue Winston Churchill, 59160, Lomme, FRANCE" + +Clearing the specific geoloc cache: + + bin/console cache:pool:clear cache.geoloc diff --git a/docs/images/apache2-default-page.png b/docs/images/apache2-default-page.png new file mode 100644 index 0000000000000000000000000000000000000000..f275c8d0813b4295fbfc9f4f1bf8ef45a7b996a7 GIT binary patch literal 60978 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 NqO7V+nUrbB{|ENfpC14K literal 0 HcmV?d00001 diff --git a/docs/images/archi.png b/docs/images/archi.png new file mode 100644 index 0000000000000000000000000000000000000000..c761ada7a443e00ddd96112772c3b2a49a5642fe GIT binary patch literal 99119 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 Dq1p>%~~NFc3dx({lU3dQ!zC=vJ35|TCD)t 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 literal 0 HcmV?d00001 diff --git a/docs/images/base-color.png b/docs/images/base-color.png new file mode 100644 index 0000000000000000000000000000000000000000..477e30cbcfb3736cfca6242a401056fb4386fb17 GIT binary patch literal 44255 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
9pdejhQybpO2XVut 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 literal 0 HcmV?d00001 diff --git a/docs/images/mcd.png b/docs/images/mcd.png new file mode 100644 index 0000000000000000000000000000000000000000..c62cc42a92adaf8081cf08c1cbe6dc689db6df0a GIT binary patch literal 597598 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

e@%Z*R^Rck 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