diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 0c16f5b9..00000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "src/AppBundle/Resources/public/vendor/" -} diff --git a/.gitignore b/.gitignore index a7e74616..06850e74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,2 @@ -/app/config/parameters.yml -/var/* -/vendor/ -/web/bundles/ -/web/css -/web/js .idea -/src/AppBundle/Resources/public/vendor/* -/phpdocker/.vagrant -*.sql - +*.pem diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e9fe4a8f..00000000 --- a/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2016 Luis Alberto Pabon Flores - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..06502e6f --- /dev/null +++ b/Makefile @@ -0,0 +1,101 @@ +SHELL=/bin/bash +MKCERT_VERSION=v1.4.1 +MKCERT_LOCATION=$(PWD)/bin/mkcert +HOSTS_VERSION=3.6.3 +HOSTS_LOCATION=$(PWD)/bin/hosts +PHPDOCKER_HOST=phpdocker.local + +# linux-amd64, darwin-amd64, linux-arm +# On windows, override with windows-amd64.exe +ifndef BINARY_SUFFIX + BINARY_SUFFIX:=$(shell [[ "`uname -s`" == "Linux" ]] && echo linux || echo darwin)-amd64 +endif + +ifndef BINARY_ARCH + BUILD_TAG:=$(shell date +'%Y-%m-%d-%H-%M-%S')-$(shell git rev-parse --short HEAD) +endif + +init: clean install-dependencies install-mkcert create-certs install-hosts init-hosts build-local-php-container start load-fixtures + +build-backend-php: + docker build --target=deployment -t backend-php -f backend/docker/php-fpm/Dockerfile ./backend/ + +start: + docker-compose up -d + +stop: + docker-compose stop + +build-local-php-container: + docker-compose stop php-fpm + docker-compose rm php-fpm + docker-compose build --pull php-fpm + +install-dependencies: + cd ./frontend; yarn install +# cd ./admin; yarn install + docker-compose run --rm php-fpm composer -o install + +install-mkcert: + @echo "Installing mkcert for OS type ${BINARY_SUFFIX}" + @if [[ ! -f '$(MKCERT_LOCATION)' ]]; then curl -sL 'https://github.com/FiloSottile/mkcert/releases/download/$(MKCERT_VERSION)/mkcert-$(MKCERT_VERSION)-$(BINARY_SUFFIX)' -o $(MKCERT_LOCATION); chmod +x $(MKCERT_LOCATION); fi; + bin/mkcert -install + +install-hosts: + @echo "Installing hosts.sh for OS type ${BINARY_SUFFIX}" + @if [[ ! -f '$(HOSTS_LOCATION)' ]]; then curl -sL 'https://raw.githubusercontent.com/xwmx/hosts/$(HOSTS_VERSION)/hosts' -o $(HOSTS_LOCATION); chmod +x $(HOSTS_LOCATION); fi; + +create-certs: + bin/mkcert -cert-file=infrastructure/local/local.pem -key-file=infrastructure/local/local.key.pem "$(PHPDOCKER_HOST)" "*.$(PHPDOCKER_HOST)" + cp infrastructure/local/local.pem infrastructure/local/webpack.pem + cat infrastructure/local/local.key.pem >> infrastructure/local/webpack.pem + +clean-hosts: + sudo bin/hosts remove --force *phpdocker.local > /dev/null 2>&1 || exit 0 + +init-hosts: clean-hosts + sudo bin/hosts add 127.0.0.1 $(PHPDOCKER_HOST) + sudo bin/hosts add 127.0.0.1 api.$(PHPDOCKER_HOST) + sudo bin/hosts add 127.0.0.1 mailhog.$(PHPDOCKER_HOST) + +clean: + docker-compose down + cd ./frontend; sudo rm -rf node_modules +# cd ./admin; sudo rm -rf node_modules + +load-fixtures: + docker-compose exec database backend/bin/wait-for-db.sh + cd ./backend; chmod 777 var/* -Rf; ./console doctrine:schema:update --force; ./console doctrine:fixtures:load -n + +open-frontend: + xdg-open https://phpdocker.local + +#open-admin: +# xdg-open https://phpdocker.local:5001 + +open-content-api: + xdg-open https://api.phpdocker.local/content + +open-mailhog: + xdg-open http://mailhog.phpdocker.local/ + +open-api-profiler: + xdg-open https://api.phpdocker.local/_profiler/latest?limit=10 + +api-clear-cache: + docker-compose exec php-fpm bin/console cache:clear + +test-frontend-watch: + cd frontend; yarn test + +test-frontend: + cd frontend; yarn test --no-watch --coverage + +#test-backend-static: +# cd backend; vendor/bin/phpstan -v analyse -l 7 src/ + +#test-backend-infection: +# cd backend; vendor/bin/infection --threads=4 -s +# +#test-backend-infection-no-initial-coverage: +# cd backend; vendor/bin/infection --threads=4 -s --coverage=reports/infection/ diff --git a/README.md b/README.md deleted file mode 100644 index 4698290a..00000000 --- a/README.md +++ /dev/null @@ -1,41 +0,0 @@ -PHPDocker.io -============ - -[![Build Status](https://semaphoreci.com/api/v1/phpdockerio/phpdocker-io/branches/dev/badge.svg)](https://semaphoreci.com/phpdockerio/phpdocker-io) -[![Code Climate](https://codeclimate.com/github/phpdocker-io/phpdocker.io/badges/gpa.svg)](https://codeclimate.com/github/phpdocker-io/phpdocker.io) - -This is the repository for both the website and the generator over at [PHPDocker.io](http://phpdocker.io), opensourced on an Apache 2.0 license and open for anyone to contribute as they please - -Contributing ------------- - -The usual Github model of forking and pull request. We're following trunk based development, so please create your branches against the `master` branch. There are no unit tests to keep an eye on, but until I get a functional suite testing ready, code merges can take a while. - -All I ask is to thoroughly test, manually, any changes made to the generators. You will need to run the containers with example apps to ensure they're working. Functional tests in the future will do precisely this, with a combination of PHP versions, frameworks, databases, etc. Setting this up is an area you could contribute on. - -If you would like to add new containers, please either base them on `alpine` images, `debian:jessie` (used by many official images such as MySQL, ElasticSearch...) or Ubuntu 16.04 as these are in use for the generated environments and will optimise deployment and provisioning to users. - -Please follow PSR code formatting standards, and Symfony best practices and, in general, do what you see already done in the current code. - -Please note everything is really in very early stages; if you see anything at all you can improve upon, please do so. - -Running the project -------------------- - -Project is given with a [PHPDocker.io](http://phpdocker.io) generated environment. - -I would recommend you install in your host php cli 7.1+, bower and composer and run the usual steps manually, but it's not necessary - the [`./prepare-dev.sh`](prepare-dev.sh) script will set up the app (bower install, composer install, etc) through docker and docker-compose commands. - - * Clone - * Run [`./prepare-dev.sh`](prepare-dev.sh) - this will: - * populate default dev config - * composer and bower install - * clean up caches - * ensure web assets are available - * load up the database schema (this is just for the CMS side of the website, it has no bearing over the generator) - * start up the environment - * You can then head off to the [/generator](http://localhost:10000/generator) route. - -This is an initial fail-safe set up and not always you need to run it, after it's done once you'll just need to do a good old `docker-compose up -d`. More specific information on [phpdocker/README.md](phpdocker/README.md). - -**Note:** you'll notice a `console` script at the root of the project. It does some voodoo to run `bin/console` within the container. diff --git a/app/AppKernel.php b/app/AppKernel.php deleted file mode 100644 index c3dba830..00000000 --- a/app/AppKernel.php +++ /dev/null @@ -1,55 +0,0 @@ -getEnvironment(), ['dev', 'test'], true)) { - $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); - $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); - $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); - $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); - } - - return $bundles; - } - - public function getRootDir() - { - return __DIR__; - } - - public function getCacheDir() - { - return dirname(__DIR__).'/var/cache/'.$this->getEnvironment(); - } - - public function getLogDir() - { - return dirname(__DIR__).'/var/logs'; - } - - public function registerContainerConfiguration(LoaderInterface $loader) - { - $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); - } -} diff --git a/app/DoctrineMigrations/Version20160324131749.php b/app/DoctrineMigrations/Version20160324131749.php deleted file mode 100644 index 741f12b4..00000000 --- a/app/DoctrineMigrations/Version20160324131749.php +++ /dev/null @@ -1,73 +0,0 @@ -abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('CREATE TABLE category (id INT AUTO_INCREMENT NOT NULL, slug VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); - $this->addSql('CREATE TABLE post (id INT AUTO_INCREMENT NOT NULL, category_id INT NOT NULL, body_intro LONGTEXT NOT NULL, slug VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, body LONGTEXT NOT NULL, active TINYINT(1) DEFAULT \'0\' NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, UNIQUE INDEX UNIQ_5A8A6C8D989D9B62 (slug), INDEX IDX_5A8A6C8D12469DE2 (category_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;'); - $this->addSql('CREATE TABLE post_comment (id INT AUTO_INCREMENT NOT NULL, post_id INT NOT NULL, poster_name VARCHAR(255) NOT NULL, poster_url VARCHAR(255) DEFAULT NULL, body LONGTEXT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_A99CE55F4B89032C (post_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;'); - $this->addSql('ALTER TABLE post ADD category_id INT'); - $this->addSql('CREATE INDEX IDX_5A8A6C8D12469DE2 ON post (category_id)'); - } - - /** - * Add News category and associate all current posts to it - * - * @param Schema $schema - */ - public function postUp(Schema $schema) - { - parent::postUp($schema); - - /** @var EntityManager $em */ - $em = $this->container->get('doctrine.orm.entity_manager'); - - // Add news category - $category = new Category(); - $category->setTitle('News'); - - $em->persist($category); - - // Link all current news items to category - foreach ($em->getRepository('AppBundle:ORM\Post')->findAll() as $post) { - $post->setCategory($category); - $em->persist($post); - } - - $em->flush(); - } - - /** - * @param Schema $schema - */ - public function down(Schema $schema) - { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('DROP TABLE category'); - $this->addSql('DROP INDEX IDX_5A8A6C8D12469DE2 ON post'); - $this->addSql('ALTER TABLE post DROP category_id'); - } -} diff --git a/app/DoctrineMigrations/Version20160324151907.php b/app/DoctrineMigrations/Version20160324151907.php deleted file mode 100644 index ac1ec49b..00000000 --- a/app/DoctrineMigrations/Version20160324151907.php +++ /dev/null @@ -1,36 +0,0 @@ -abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('ALTER TABLE post CHANGE category_id category_id INT NOT NULL'); - $this->addSql('ALTER TABLE post ADD CONSTRAINT FK_5A8A6C8D12469DE2 FOREIGN KEY (category_id) REFERENCES category (id)'); - } - - /** - * @param Schema $schema - */ - public function down(Schema $schema) - { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('ALTER TABLE post DROP FOREIGN KEY FK_5A8A6C8D12469DE2'); - $this->addSql('ALTER TABLE post CHANGE category_id category_id INT DEFAULT NULL'); - } -} diff --git a/app/DoctrineMigrations/Version20160330171406.php b/app/DoctrineMigrations/Version20160330171406.php deleted file mode 100644 index 76ba684b..00000000 --- a/app/DoctrineMigrations/Version20160330171406.php +++ /dev/null @@ -1,34 +0,0 @@ -abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('CREATE UNIQUE INDEX UNIQ_5A8A6C8D989D9B62 ON post (slug)'); - } - - /** - * @param Schema $schema - */ - public function down(Schema $schema) - { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); - - $this->addSql('DROP INDEX UNIQ_5A8A6C8D989D9B62 ON post'); - } -} diff --git a/app/DoctrineMigrations/Version20160330171428.php b/app/DoctrineMigrations/Version20160330171428.php deleted file mode 100644 index 4b6fc1cb..00000000 --- a/app/DoctrineMigrations/Version20160330171428.php +++ /dev/null @@ -1,62 +0,0 @@ -container->get('doctrine.orm.entity_manager'); - - // Add homepage category - $category = new Category(); - $category->setTitle('Homepage'); - - $em->persist($category); - $em->flush(); - } - - /** - * @param Schema $schema - */ - public function down(Schema $schema) - { - /** @var EntityManager $em */ - $em = $this->container->get('doctrine.orm.entity_manager'); - - $category = $em->getRepository('AppBundle:ORM\Category')->findOneBy(['name' => self::CATEGORY_NAME]); - if ($category) { - $em->remove($category); - $em->flush(); - } - } -} diff --git a/app/Resources/views/base.html.twig b/app/Resources/views/base.html.twig deleted file mode 100644 index bafd28d3..00000000 --- a/app/Resources/views/base.html.twig +++ /dev/null @@ -1,13 +0,0 @@ - - - - - {% block title %}Welcome!{% endblock %} - {% block stylesheets %}{% endblock %} - - - - {% block body %}{% endblock %} - {% block javascripts %}{% endblock %} - - diff --git a/app/Resources/views/default/index.html.twig b/app/Resources/views/default/index.html.twig deleted file mode 100644 index 75842ebe..00000000 --- a/app/Resources/views/default/index.html.twig +++ /dev/null @@ -1,76 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block body %} -
-
-
-

Welcome to Symfony {{ constant('Symfony\\Component\\HttpKernel\\Kernel::VERSION') }}

-
- -
-

- - - Your application is ready to start working on it at: - {{ base_dir }}/ -

-
- - - -
-
-{% endblock %} - -{% block stylesheets %} - -{% endblock %} diff --git a/app/config/config.yml b/app/config/config.yml deleted file mode 100644 index e49a072e..00000000 --- a/app/config/config.yml +++ /dev/null @@ -1,103 +0,0 @@ -imports: - - { resource: parameters.yml } - - { resource: security.yml } - - { resource: services.yml } - - { resource: easy_admin.yml } - - { resource: '@AppBundle/Resources/config/config.yml' } - -# Put parameters here that don't need to change on each machine where the app is deployed -# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration -parameters: - locale: en - -framework: - #esi: ~ - translator: { fallbacks: ["en"] } - secret: "%secret%" - router: - resource: "%kernel.root_dir%/config/routing.yml" - strict_requirements: ~ - form: ~ - csrf_protection: ~ - validation: { enable_annotations: true } - #serializer: { enable_annotations: true } - templating: - engines: ['twig'] - #assets_version: SomeVersionScheme - default_locale: "%locale%" - trusted_hosts: ~ - trusted_proxies: ~ - session: - # handler_id set to null will use default session handler from php.ini - handler_id: ~ - save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" - fragments: ~ - http_method_override: true - assets: ~ - -# Doctrine Configuration -doctrine: - dbal: - driver: pdo_mysql - host: "%database_host%" - port: "%database_port%" - dbname: "%database_name%" - user: "%database_user%" - password: "%database_password%" - - # DBAL 2.5 needs to connect to the DB to check its version, unless provided beneath - # This avoids unnecessary connections when using the console, or when on CI - # This is also a per-connection setting, for when we have several connections configured (eg master/slaves) instead of a main, root one - server_version: "%database_version%" - - charset: UTF8 - - # DoctrineEnumBundle - mapping_types: - enum: string - - orm: - auto_generate_proxy_classes: "%kernel.debug%" - naming_strategy: doctrine.orm.naming_strategy.underscore - auto_mapping: true - - -# Doctrine migrations -doctrine_migrations: - dir_name: "%kernel.root_dir%/DoctrineMigrations" - namespace: Application\Migrations - table_name: migration_versions - name: Application Migrations - -# Twig Configuration -twig: - debug: "%kernel.debug%" - strict_variables: "%kernel.debug%" - globals: - google_analytics: '%google_analytics%' - recaptcha_site_key: '%recaptcha_site_key%' - -# Swiftmailer -swiftmailer: - transport: '%mailer_transport%' - host: '%mailer_host%' - port: '%mailer_port%' - username: '%mailer_user%' - password: '%mailer_password%' - -stof_doctrine_extensions: - orm: - default: - timestampable: true - sluggable: true - -monolog: - handlers: - main: - type: error_log - level: error - channels: [!event] - console: - type: console - bubble: false - channels: [!event, !doctrine] diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml deleted file mode 100644 index b932f832..00000000 --- a/app/config/config_dev.yml +++ /dev/null @@ -1,12 +0,0 @@ -imports: - - { resource: config.yml } - -framework: - router: - resource: "%kernel.root_dir%/config/routing_dev.yml" - strict_requirements: true - profiler: { only_exceptions: false } - -web_profiler: - toolbar: true - intercept_redirects: false diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml deleted file mode 100644 index 54f66269..00000000 --- a/app/config/config_prod.yml +++ /dev/null @@ -1,37 +0,0 @@ -imports: - - { resource: config.yml } - -framework: - validation: - cache: validator.mapping.cache.doctrine.apc - serializer: - cache: serializer.mapping.cache.apc - -doctrine: - orm: - metadata_cache_driver: - type: apc - namespace: "%cache_namespace%" - - result_cache_driver: - type: memcached - namespace: "%cache_namespace%" - host: "%memcached_host%" - port: "%memcached_port%" - - query_cache_driver: - type: apc - namespace: "%cache_namespace%" - -monolog: - handlers: - main: - type: fingers_crossed - action_level: error - handler: nested - nested: - type: stream - path: "%kernel.logs_dir%/%kernel.environment%.log" - level: debug - console: - type: console diff --git a/app/config/config_test.yml b/app/config/config_test.yml deleted file mode 100644 index 2c0b0d62..00000000 --- a/app/config/config_test.yml +++ /dev/null @@ -1,22 +0,0 @@ -imports: - - { resource: config_dev.yml } - -framework: - test: ~ - session: - storage_id: session.storage.mock_file - profiler: - collect: false - -web_profiler: - toolbar: false - intercept_redirects: false - -monolog: - handlers: - main: - type: test - -# Swiftmailer -swiftmailer: - transport: null diff --git a/app/config/easy_admin.yml b/app/config/easy_admin.yml deleted file mode 100644 index 9cd901ee..00000000 --- a/app/config/easy_admin.yml +++ /dev/null @@ -1,53 +0,0 @@ -parameters: - rich_text_editor_form_type: 'Ivory\CKEditorBundle\Form\Type\CKEditorType' - -ivory_ck_editor: - input_sync: true - default_config: base_config - configs: - base_config: - toolbar: - - { name: "styles", items: ['Bold', 'Italic', 'BulletedList', 'Link', 'PasteFromWord', 'Source'] } - -easy_admin: - site_name: "PHPDocker.io" - design: - form_theme: 'vertical' - entities: - Category: - label: 'Categories' - class: AppBundle\Entity\ORM\Category - list: - title: 'Categories' - fields: - - id - - title - - slug - - createdAt - form: - title: 'Add a new category' - fields: - - { property: title, css_class: 'col-lg-6 col-md-6' } - - Post: - label: 'Posts' - class: AppBundle\Entity\ORM\Post - list: - title: 'Posts' - fields: - - id - - title - - slug - - category - - createdAt - - active - form: - title: 'Add a new post' - fields: - - { property: title, css_class: 'col-lg-6 col-md-6' } - - { property: bodyIntro, type: '%rich_text_editor_form_type%' } - - { property: body, type: '%rich_text_editor_form_type%' } - - { property: category, label: 'Link to category', css_class: 'col-lg-6 col-md-6'} - - { property: active, label: 'Is active', css_class: 'col-lg-6 col-md-6'} - edit: - title: 'Edit post' diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist deleted file mode 100644 index f2b986d0..00000000 --- a/app/config/parameters.yml.dist +++ /dev/null @@ -1,35 +0,0 @@ -# This file contains the right config already for the app to be run from the bundled dev-env, -# you should be able to copy to parameters.yml and off you go -parameters: - # A secret key that's used to generate certain security-related tokens - secret: ThisTokenIsNotSoSecretChangeIt - - # Database - database_host: phpdocker-io-mysql - database_port: null - database_name: phpdockerio - database_user: username - database_password: password - database_version: 5.7 - - # Email config - mailer_transport: smtp - mailer_host: phpdocker-io-mailhog - mailer_port: 1025 - mailer_user: null - mailer_password: null - email_to: "foo@faa.com" - - # Third party services - google_analytics: foo - recaptcha_site_key: lalalala - recaptcha_secret_key: lerelelele - - # Memcached - make sure on each deployment, cache_namespace is different - memcached_host: phpdocker-io-memcached - memcached_port: 11211 - cache_namespace: phpdocker-io - - # Admin user (password: password) - admin_user_name: luis - admin_user_password: $2y$12$jS7zyap2VzijFYr8fWn5WuoHrfZMdPzmfTuVUFJ7NAkQb.ZZc6VLm diff --git a/app/config/routing.yml b/app/config/routing.yml deleted file mode 100644 index c304a579..00000000 --- a/app/config/routing.yml +++ /dev/null @@ -1,7 +0,0 @@ -app: - resource: "@AppBundle/Resources/config/routing.yml" - -easy_admin_bundle: - resource: "@AppBundle/Controller/AdminController.php" - type: annotation - prefix: /site-admin diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml deleted file mode 100644 index 404f6a3b..00000000 --- a/app/config/routing_dev.yml +++ /dev/null @@ -1,14 +0,0 @@ -_wdt: - resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" - prefix: /_wdt - -_profiler: - resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" - prefix: /_profiler - -_errors: - resource: "@TwigBundle/Resources/config/routing/errors.xml" - prefix: /_error - -_main: - resource: routing.yml diff --git a/app/config/security.yml b/app/config/security.yml deleted file mode 100644 index b0f2a069..00000000 --- a/app/config/security.yml +++ /dev/null @@ -1,27 +0,0 @@ -# To get started with security, check out the documentation: -# http://symfony.com/doc/current/book/security.html -security: - encoders: - Symfony\Component\Security\Core\User\User: - algorithm: bcrypt - cost: 12 - - providers: - in_memory: - memory: - users: - '%admin_user_name%': - password: '%admin_user_password%' - roles: 'ROLE_ADMIN' - - firewalls: - dev: - pattern: ^/(_(profiler|wdt)|css|images|js)/ - security: false - - main: - anonymous: ~ - http_basic: ~ - - access_control: - - { path: ^/site-admin, roles: ROLE_ADMIN } diff --git a/app/config/services.yml b/app/config/services.yml deleted file mode 100644 index b1cdfa9f..00000000 --- a/app/config/services.yml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: "@AppBundle/Resources/config/services.yml" } diff --git a/backend/.env b/backend/.env new file mode 100644 index 00000000..8806b4ba --- /dev/null +++ b/backend/.env @@ -0,0 +1,32 @@ +# This file defines all environment variables that the application needs. +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE. +# Use ".env.local" for local overrides during development. +# Use real environment variables when deploying to production. +# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=28eed23a077d50991e406fa7d4cf4175 +#TRUSTED_PROXIES=127.0.0.1,127.0.0.2 +#TRUSTED_HOSTS='^localhost|example\.com$' +###< symfony/framework-bundle ### + +###> doctrine/doctrine-bundle ### +# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db" +# Configure your db driver and server_version in config/packages/doctrine.yaml +DATABASE_URL=pgsql://root:root@database:5432/phpdocker +###< doctrine/doctrine-bundle ### + +###> nelmio/cors-bundle ### +CORS_ALLOW_ORIGIN=^https?://(localhost|phpdocker\.local)(:[0-9]+)?$ +###< nelmio/cors-bundle ### + +###> symfony/swiftmailer-bundle ### +# For Gmail as a transport, use: "gmail://username:password@localhost" +# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" +# Delivery is disabled by default via "null://localhost" +MAILER_URL=smtp://mailhog:1025 +###< symfony/swiftmailer-bundle ### + +CONTACT_EMAIL_TO=foo@bar.com diff --git a/backend/.env.test b/backend/.env.test new file mode 100644 index 00000000..414430e7 --- /dev/null +++ b/backend/.env.test @@ -0,0 +1,4 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='s$cretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 00000000..4c325c0c --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,20 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.*.local +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> phpunit/phpunit ### +/phpunit.xml +.phpunit.result.cache +###< phpunit/phpunit ### + +/reports/ + +###> symfony/phpunit-bridge ### +.phpunit +/phpunit.xml +###< symfony/phpunit-bridge ### diff --git a/backend/bin/console b/backend/bin/console new file mode 100755 index 00000000..5de0e1c5 --- /dev/null +++ b/backend/bin/console @@ -0,0 +1,42 @@ +#!/usr/bin/env php +getParameterOption(['--env', '-e'], null, true)) { + putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); +} + +if ($input->hasParameterOption('--no-debug', true)) { + putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); +} + +require dirname(__DIR__).'/config/bootstrap.php'; + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$application = new Application($kernel); +$application->run($input); diff --git a/backend/bin/wait-for-db.sh b/backend/bin/wait-for-db.sh new file mode 100755 index 00000000..d9928190 --- /dev/null +++ b/backend/bin/wait-for-db.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +RETRIES=5 + +until psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do + echo "Waiting for postgres server, $((RETRIES--)) remaining attempts..." + sleep 1 +done diff --git a/backend/composer.json b/backend/composer.json new file mode 100644 index 00000000..21ce42b9 --- /dev/null +++ b/backend/composer.json @@ -0,0 +1,81 @@ +{ + "type": "project", + "license": "proprietary", + "require": { + "php": "^7.3.0", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-zip": "^1.15", + "antishov/doctrine-extensions-bundle": "^1.3", + "api-platform/api-pack": "^1.1", + "cocur/slugify": "^4.0", + "gedmo/doctrine-extensions": "^2.4", + "limenius/liform-bundle": "^0.16.0", + "michelf/php-markdown": "^1.8", + "sensio/framework-extra-bundle": "^5.2", + "symfony/cache": "^5.0", + "symfony/console": "^5.0", + "symfony/dotenv": "^5.0", + "symfony/flex": "^1.1", + "symfony/form": "^5.0", + "symfony/framework-bundle": "^5.0", + "symfony/monolog-bundle": "^3.3", + "symfony/orm-pack": "^1.0", + "symfony/serializer-pack": "^1.0", + "symfony/swiftmailer-bundle": "^3.2", + "symfony/validator": "^5.0", + "symfony/yaml": "^5.0" + }, + "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^3.1", + "nelmio/alice": "^3.5", + "symfony/debug-pack": "^1.0" + }, + "config": { + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/App/", + "DoctrineMigrations\\": "src/Migrations/", + "PHPDocker\\": "src/PHPDocker/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "paragonie/random_compat": "2.*", + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php71": "*", + "symfony/polyfill-php70": "*", + "symfony/polyfill-php56": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "^5.0" + } + } +} diff --git a/backend/composer.lock b/backend/composer.lock new file mode 100644 index 00000000..7fae2761 --- /dev/null +++ b/backend/composer.lock @@ -0,0 +1,8780 @@ +{ + "_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": "28c29dd0c5f1f9c36e11c58348aa92a3", + "packages": [ + { + "name": "antishov/doctrine-extensions-bundle", + "version": "v1.4.3", + "source": { + "type": "git", + "url": "https://github.com/antishov/StofDoctrineExtensionsBundle.git", + "reference": "b036a8d62111c03f237a619b1840c46570f48483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antishov/StofDoctrineExtensionsBundle/zipball/b036a8d62111c03f237a619b1840c46570f48483", + "reference": "b036a8d62111c03f237a619b1840c46570f48483", + "shasum": "" + }, + "require": { + "gedmo/doctrine-extensions": "^2.3.4 || ^3.0", + "php": "^7.2.5 || ^8.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/mime": "^4.3|^5.0" + }, + "replace": { + "stof/doctrine-extensions-bundle": "self.version" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/security-bundle": "^4.4|^5.0" + }, + "suggest": { + "doctrine/doctrine-bundle": "to use the ORM extensions", + "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Stof\\DoctrineExtensionsBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antishov Viktor", + "email": "antishov.viktor@gmail.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Forked from stof/doctrine-extensions-bundle integration of the gedmo/doctrine-extensions with Symfony 4", + "homepage": "https://github.com/antishov/StofDoctrineExtensionsBundle", + "keywords": [ + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "stof", + "timestampable", + "translatable", + "tree" + ], + "support": { + "issues": "https://github.com/antishov/StofDoctrineExtensionsBundle/issues", + "source": "https://github.com/antishov/StofDoctrineExtensionsBundle/tree/v1.4.3" + }, + "time": "2020-12-10T20:46:02+00:00" + }, + { + "name": "api-platform/api-pack", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/api-platform/api-pack.git", + "reference": "0fb12343362f565b65eb374d3c49bec580ffcf8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/api-platform/api-pack/zipball/0fb12343362f565b65eb374d3c49bec580ffcf8d", + "reference": "0fb12343362f565b65eb374d3c49bec580ffcf8d", + "shasum": "" + }, + "require": { + "api-platform/core": "*", + "nelmio/cors-bundle": "*", + "symfony/asset": "*", + "symfony/expression-language": "*", + "symfony/orm-pack": "*", + "symfony/security-bundle": "*", + "symfony/serializer-pack": "*", + "symfony/twig-bundle": "*", + "symfony/validator": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for API Platform", + "support": { + "issues": "https://github.com/api-platform/api-pack/issues", + "source": "https://github.com/api-platform/api-pack/tree/v1.3.0" + }, + "time": "2020-08-28T20:27:34+00:00" + }, + { + "name": "api-platform/core", + "version": "v2.5.9", + "source": { + "type": "git", + "url": "https://github.com/api-platform/core.git", + "reference": "4f05477b5ec5cff7c9324a7510900db2a1173d70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/api-platform/core/zipball/4f05477b5ec5cff7c9324a7510900db2a1173d70", + "reference": "4f05477b5ec5cff7c9324a7510900db2a1173d70", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.0 || ^2.0", + "fig/link-util": "^1.0", + "php": ">=7.1", + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.1", + "symfony/http-kernel": "^4.4 || ^5.1", + "symfony/property-access": "^3.4.19 || ^4.4 || ^5.1", + "symfony/property-info": "^3.4 || ^4.4 || ^5.1", + "symfony/serializer": "^4.4 || ^5.1", + "symfony/web-link": "^4.4 || ^5.1", + "willdurand/negotiation": "^2.0.3 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.7", + "doctrine/mongodb-odm": "<2.0", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "behat/behat": "^3.1", + "behat/mink": "^1.7", + "doctrine/annotations": "^1.7", + "doctrine/common": "^2.11 || ^3.0", + "doctrine/data-fixtures": "^1.2.2", + "doctrine/doctrine-bundle": "^1.12 || ^2.0", + "doctrine/mongodb-odm": "^2.0", + "doctrine/mongodb-odm-bundle": "^4.0", + "doctrine/orm": "^2.6.4 || ^3.0", + "elasticsearch/elasticsearch": "^6.0 || ^7.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": "^0.8", + "justinrainbow/json-schema": "^5.2.1", + "phpdocumentor/reflection-docblock": "^3.0 || ^4.0 || ^5.1", + "phpdocumentor/type-resolver": "^0.3 || ^0.4 || ^1.4", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.53@dev", + "phpstan/phpstan-doctrine": "^0.12.7", + "phpstan/phpstan-phpunit": "^0.12.4", + "phpstan/phpstan-symfony": "^0.12.4", + "psr/log": "^1.0", + "ramsey/uuid": "^3.7 || ^4.0", + "ramsey/uuid-doctrine": "^1.4", + "soyuka/contexts": "^3.3.1", + "soyuka/stubs-mongodb": "^1.0", + "symfony/asset": "^3.4 || ^4.4 || ^5.1", + "symfony/browser-kit": "^4.4 || ^5.1", + "symfony/cache": "^3.4 || ^4.4 || ^5.1", + "symfony/config": "^3.4 || ^4.4 || ^5.1", + "symfony/console": "^3.4 || ^4.4 || ^5.1", + "symfony/css-selector": "^3.4 || ^4.4 || ^5.1", + "symfony/debug": "^3.4 || ^4.4 || ^5.1", + "symfony/dependency-injection": "^3.4 || ^4.4 || ^5.1", + "symfony/doctrine-bridge": "^3.4 || ^4.4 || ^5.1", + "symfony/dom-crawler": "^3.4 || ^4.4 || ^5.1", + "symfony/event-dispatcher": "^3.4 || ^4.4 || ^5.1", + "symfony/expression-language": "^3.4 || ^4.4 || ^5.1", + "symfony/finder": "^3.4 || ^4.4 || ^5.1", + "symfony/form": "^3.4 || ^4.4 || ^5.1", + "symfony/framework-bundle": "^4.4 || ^5.1", + "symfony/http-client": "^4.4 || ^5.1", + "symfony/mercure-bundle": "*", + "symfony/messenger": "^4.4 || ^5.1", + "symfony/phpunit-bridge": "^5.1.7", + "symfony/routing": "^3.4 || ^4.4 || ^5.1", + "symfony/security-bundle": "^3.4 || ^4.4 || ^5.1", + "symfony/security-core": "^4.4 || ^5.1", + "symfony/twig-bundle": "^3.4 || ^4.4 || ^5.1", + "symfony/validator": "^3.4 || ^4.4 || ^5.1", + "symfony/web-profiler-bundle": "^4.4 || ^5.1", + "symfony/yaml": "^3.4 || ^4.4 || ^5.1", + "twig/twig": "^1.42.3 || ^2.12 || ^3.0", + "webonyx/graphql-php": "^14.0" + }, + "suggest": { + "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.", + "elasticsearch/elasticsearch": "To support Elasticsearch.", + "guzzlehttp/guzzle": "To use the HTTP cache invalidation system.", + "phpdocumentor/reflection-docblock": "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/security": "To use authorization features.", + "symfony/twig-bundle": "To use the Swagger UI integration.", + "symfony/web-profiler-bundle": "To use the data collector.", + "webonyx/graphql-php": "To support GraphQL." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + }, + "symfony": { + "require": "^3.4 || ^4.4 || ^5.1" + } + }, + "autoload": { + "psr-4": { + "ApiPlatform\\Core\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com", + "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/v2.5.9" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/api-platform/core", + "type": "tidelift" + } + ], + "time": "2020-12-17T15:47:58+00:00" + }, + { + "name": "behat/transliterator", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0", + "phpunit/phpunit": "^4.8.36|^6.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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.3.0" + }, + "time": "2020-01-14T16:39:13+00:00" + }, + { + "name": "cocur/slugify", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cocur/slugify.git", + "reference": "3f1ffc300f164f23abe8b64ffb3f92d35cec8307" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cocur/slugify/zipball/3f1ffc300f164f23abe8b64ffb3f92d35cec8307", + "reference": "3f1ffc300f164f23abe8b64ffb3f92d35cec8307", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=7.0" + }, + "conflict": { + "symfony/config": "<3.4 || >=4,<4.3", + "symfony/dependency-injection": "<3.4 || >=4,<4.3", + "symfony/http-kernel": "<3.4 || >=4,<4.3", + "twig/twig": "<2.12.1" + }, + "require-dev": { + "laravel/framework": "~5.1", + "latte/latte": "~2.2", + "league/container": "^2.2.0", + "mikey179/vfsstream": "~1.6.8", + "mockery/mockery": "^1.3", + "nette/di": "~2.4", + "phpunit/phpunit": "^5.7.27", + "pimple/pimple": "~1.1", + "plumphp/plum": "~0.1", + "symfony/config": "^3.4 || ^4.3 || ^5.0", + "symfony/dependency-injection": "^3.4 || ^4.3 || ^5.0", + "symfony/http-kernel": "^3.4 || ^4.3 || ^5.0", + "twig/twig": "^2.12.1 || ~3.0", + "zendframework/zend-modulemanager": "~2.2", + "zendframework/zend-servicemanager": "~2.2", + "zendframework/zend-view": "~2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cocur\\Slugify\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Eckerstorfer", + "email": "florian@eckerstorfer.co", + "homepage": "https://florian.ec" + }, + { + "name": "Ivo Bathke", + "email": "ivo.bathke@gmail.com" + } + ], + "description": "Converts a string into a slug.", + "keywords": [ + "slug", + "slugify" + ], + "support": { + "issues": "https://github.com/cocur/slugify/issues", + "source": "https://github.com/cocur/slugify/tree/master" + }, + "time": "2019-12-14T13:04:14+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.1", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7413f0b55a051e89485c5cb9f765fe24bb02a7b6", + "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.1" + }, + "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": "2020-11-11T10:22:58+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/ce77a7ba1770462cd705a91a151b6c3746f9c6ad", + "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "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.11.1" + }, + "time": "2020-10-26T10:28:16+00:00" + }, + { + "name": "doctrine/cache", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "13e3381b25847283a91948d04640543941309727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "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/1.10.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-07-07T18:54:01+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.6.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "shasum": "" + }, + "require": { + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.6.7" + }, + "time": "2020-07-27T17:53:49+00:00" + }, + { + "name": "doctrine/common", + "version": "2.13.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f", + "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/inflector": "^1.0", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^1.3.3", + "doctrine/reflection": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^1.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpunit/phpunit": "^7.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^4.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "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, persistence interfaces, proxies, event system 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/2.13.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", + "type": "tidelift" + } + ], + "time": "2020-06-05T16:46:05+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.12.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "adce7a954a1c2f14f85e94aed90c8489af204086" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086", + "reference": "adce7a954a1c2f14f85e94aed90c8489af204086", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.3 || ^8" + }, + "require-dev": { + "doctrine/coding-standard": "^8.1", + "jetbrains/phpstorm-stubs": "^2019.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.4", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.17.2" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "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", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.12.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-11-14T20:26:58+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "044d33eeffdb236d5013b6b4af99f87519e10751" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/044d33eeffdb236d5013b6b4af99f87519e10751", + "reference": "044d33eeffdb236d5013b6b4af99f87519e10751", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9.0|^3.0", + "doctrine/persistence": "^1.3.3|^2.0", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.1 || ^8.0", + "symfony/cache": "^4.3.3|^5.0", + "symfony/config": "^4.3.3|^5.0", + "symfony/console": "^3.4.30|^4.3.3|^5.0", + "symfony/dependency-injection": "^4.3.3|^5.0", + "symfony/doctrine-bridge": "^4.3.7|^5.0", + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/service-contracts": "^1.1.1|^2.0" + }, + "conflict": { + "doctrine/orm": "<2.6", + "twig/twig": "<1.34|>=2.0,<2.4" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "doctrine/orm": "^2.6", + "ocramius/proxy-manager": "^2.1", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3", + "symfony/phpunit-bridge": "^4.2", + "symfony/property-info": "^4.3.3|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0", + "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", + "symfony/validator": "^3.4.30|^4.3.3|^5.0", + "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/yaml": "^3.4.30|^4.3.3|^5.0", + "twig/twig": "^1.34|^2.12|^3.0" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "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": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "http://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.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-bundle", + "type": "tidelift" + } + ], + "time": "2020-12-05T15:07:10+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "85f0b847174daf243362c7da80efe1539be64f47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/85f0b847174daf243362c7da80efe1539be64f47", + "reference": "85f0b847174daf243362c7da80efe1539be64f47", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/migrations": "^2.2", + "php": "^7.1|^8.0", + "symfony/framework-bundle": "~3.4|~4.0|~5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "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": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://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/2.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": "2020-12-23T15:06:17+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" + }, + { + "name": "doctrine/inflector", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "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/1.4.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-29T07:19:59+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "doctrine/migrations", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "39520699043d9bfaaebeb81fa026bf2b02a8f735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/39520699043d9bfaaebeb81fa026bf2b02a8f735", + "reference": "39520699043d9bfaaebeb81fa026bf2b02a8f735", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/dbal": "^2.9", + "friendsofphp/proxy-manager-lts": "^1.0", + "php": "^7.1 || ^8.0", + "symfony/console": "^3.4||^4.4.16||^5.0", + "symfony/stopwatch": "^3.4||^4.0||^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "doctrine/orm": "^2.6", + "ext-pdo_sqlite": "*", + "jdorn/sql-formatter": "^1.1", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/process": "^3.4||^4.0||^5.0", + "symfony/yaml": "^3.4||^4.0||^5.0" + }, + "suggest": { + "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "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", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/2.3.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2020-12-23T14:06:04+00:00" + }, + { + "name": "doctrine/orm", + "version": "2.7.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "01187c9260cd085529ddd1273665217cae659640" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/01187c9260cd085529ddd1273665217cae659640", + "reference": "01187c9260cd085529ddd1273665217cae659640", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "^1.11.1", + "doctrine/cache": "^1.9.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^2.11 || ^3.0", + "doctrine/dbal": "^2.9.3", + "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.0", + "doctrine/instantiator": "^1.3", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0", + "ext-pdo": "*", + "php": "^7.1", + "symfony/console": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^8.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "vimeo/psalm": "^3.11" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "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.7.5" + }, + "time": "2020-12-03T08:52:14+00:00" + }, + { + "name": "doctrine/persistence", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288", + "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/reflection": "^1.2", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.10@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^3.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/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://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/1.3.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2020-06-20T12:56:16+00:00" + }, + { + "name": "doctrine/reflection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/reflection.git", + "reference": "fa587178be682efe90d005e3a322590d6ebb59a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/reflection/zipball/fa587178be682efe90d005e3a322590d6ebb59a5", + "reference": "fa587178be682efe90d005e3a322590d6ebb59a5", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0 || ^8.2.0", + "doctrine/common": "^2.10", + "phpstan/phpstan": "^0.11.0 || ^0.12.20", + "phpstan/phpstan-phpunit": "^0.11.0 || ^0.12.16", + "phpunit/phpunit": "^7.5 || ^9.1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "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 Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", + "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "keywords": [ + "reflection", + "static" + ], + "support": { + "issues": "https://github.com/doctrine/reflection/issues", + "source": "https://github.com/doctrine/reflection/tree/1.2.2" + }, + "abandoned": "roave/better-reflection", + "time": "2020-10-27T21:46:55+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "56070bebac6e77230ed7d306ad13528e60732871" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/56070bebac6e77230ed7d306ad13528e60732871", + "reference": "56070bebac6e77230ed7d306ad13528e60732871", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://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.x" + }, + "time": "2020-07-30T16:57:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.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/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "fig/link-util", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link-util.git", + "reference": "c038ee75ca13663ddc2d1f185fe6f7533c00832a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link-util/zipball/c038ee75ca13663ddc2d1f185fe6f7533c00832a", + "reference": "c038ee75ca13663ddc2d1f185fe6f7533c00832a", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/link": "~1.0@dev" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.1", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fig\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common utility implementations for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "issues": "https://github.com/php-fig/link-util/issues", + "source": "https://github.com/php-fig/link-util/tree/1.1.1" + }, + "time": "2020-04-27T06:40:36+00:00" + }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "4a66e4e0d3279d3bb3722963b4294331fabe15bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/4a66e4e0d3279d3bb3722963b4294331fabe15bc", + "reference": "4a66e4e0d3279d3bb3722963b4294331fabe15bc", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.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.2" + }, + "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": "http://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.2" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2021-01-04T11:21:26+00:00" + }, + { + "name": "gedmo/doctrine-extensions", + "version": "v2.4.42", + "source": { + "type": "git", + "url": "https://github.com/Atlantic18/DoctrineExtensions.git", + "reference": "b6c4442b4f32ce05673fbdf1fa4a2d5e315cc0a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/b6c4442b4f32ce05673fbdf1fa4a2d5e315cc0a4", + "reference": "b6c4442b4f32ce05673fbdf1fa4a2d5e315cc0a4", + "shasum": "" + }, + "require": { + "behat/transliterator": "~1.2", + "doctrine/common": "~2.4", + "php": ">=5.3.2" + }, + "conflict": { + "doctrine/annotations": "<1.2", + "doctrine/mongodb-odm": ">=2.0" + }, + "require-dev": { + "doctrine/common": ">=2.5.0", + "doctrine/mongodb-odm": ">=1.0.2 <2.0", + "doctrine/orm": ">=2.5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "symfony/yaml": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Gedmo\\": "lib/Gedmo" + } + }, + "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": "Doctrine2 behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "support": { + "email": "gediminas.morkevicius@gmail.com", + "issues": "https://github.com/Atlantic18/DoctrineExtensions/issues", + "source": "https://github.com/Atlantic18/DoctrineExtensions/tree/v3.0.0-beta", + "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc" + }, + "time": "2020-08-21T01:27:20+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "28a6d70ea8b8bca687d7163300e611ae33baf82a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/28a6d70ea8b8bca687d7163300e611ae33baf82a", + "reference": "28a6d70ea8b8bca687d7163300e611ae33baf82a", + "shasum": "" + }, + "require": { + "laminas/laminas-eventmanager": "^3.3", + "php": "^7.4 || ~8.0.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "replace": { + "zendframework/zend-code": "self.version" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^2.1.4", + "laminas/laminas-stdlib": "^3.3.0", + "phpunit/phpunit": "^9.4.2", + "psalm/plugin-phpunit": "^0.14.0", + "vimeo/psalm": "^4.3.1" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component", + "laminas/laminas-zendframework-bridge": "A bridge with Zend Framework" + }, + "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": "2020-12-30T16:16:14+00:00" + }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ^8.0" + }, + "replace": { + "zendframework/zend-eventmanager": "^3.2.1" + }, + "require-dev": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "container-interop/container-interop": "^1.1, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-08-25T11:10:44+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-09-14T14:23:00+00:00" + }, + { + "name": "limenius/liform", + "version": "v0.16.0", + "source": { + "type": "git", + "url": "https://github.com/Limenius/Liform.git", + "reference": "2b0378de163e3c62b1ffb38a094b8193ca596bd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Limenius/Liform/zipball/2b0378de163e3c62b1ffb38a094b8193ca596bd4", + "reference": "2b0378de163e3c62b1ffb38a094b8193ca596bd4", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/contracts": "^2.1", + "symfony/form": "^5.0", + "symfony/serializer": "^5.0", + "symfony/translation": "^5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2", + "escapestudios/symfony2-coding-standard": "^3.0", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Limenius\\Liform\\": "src/Limenius/Liform" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nacho Martín", + "email": "nacho@limenius.com" + } + ], + "description": "Library to transform Symfony Forms into Json Schema", + "support": { + "issues": "https://github.com/Limenius/Liform/issues", + "source": "https://github.com/Limenius/Liform/tree/v0.16.0" + }, + "time": "2020-05-13T13:21:13+00:00" + }, + { + "name": "limenius/liform-bundle", + "version": "v0.16.0", + "source": { + "type": "git", + "url": "https://github.com/Limenius/LiformBundle.git", + "reference": "9e82a34b256bba27ac2bfdc8ce5390771998321e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Limenius/LiformBundle/zipball/9e82a34b256bba27ac2bfdc8ce5390771998321e", + "reference": "9e82a34b256bba27ac2bfdc8ce5390771998321e", + "shasum": "" + }, + "require": { + "limenius/liform": "^0.16.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Limenius\\LiformBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nacho Martín", + "email": "nacho@limenius.com" + } + ], + "description": "Bundle for Liform: Transform Symfony Forms into Json Schema", + "support": { + "issues": "https://github.com/Limenius/LiformBundle/issues", + "source": "https://github.com/Limenius/LiformBundle/tree/v0.16.0" + }, + "time": "2020-05-13T13:25:16+00:00" + }, + { + "name": "michelf/php-markdown", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-markdown.git", + "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "reference": "c83178d49e372ca967d1a8c77ae4e051b3a3c75c", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4.3 <5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Michelf\\": "Michelf/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP Markdown", + "homepage": "https://michelf.ca/projects/php-markdown/", + "keywords": [ + "markdown" + ], + "support": { + "issues": "https://github.com/michelf/php-markdown/issues", + "source": "https://github.com/michelf/php-markdown/tree/1.9.0" + }, + "time": "2019-12-02T02:32:27+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-12-14T13:15:25+00:00" + }, + { + "name": "nelmio/cors-bundle", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioCorsBundle.git", + "reference": "be4d5824caebc86da9e224e935e02e1201b3ea54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/be4d5824caebc86da9e224e935e02e1201b3ea54", + "reference": "be4d5824caebc86da9e224e935e02e1201b3ea54", + "shasum": "" + }, + "require": { + "symfony/framework-bundle": "^4.3 || ^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "symfony/phpunit-bridge": "^4.3 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.0.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.1.0" + }, + "time": "2020-07-22T11:44:28+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.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "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/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "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.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.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": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/link", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/master" + }, + "time": "2016-10-28T16:06:13+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "430d14c01836b77c28092883d195a43ce413ee32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", + "reference": "430d14c01836b77c28092883d195a43ce413ee32", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.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", + "nyholm/psr7": "^1.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/doctrine-bridge": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/monolog-bridge": "^4.0|^5.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9", + "symfony/psr-http-message-bridge": "^1.1", + "symfony/security-bundle": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.6.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": { + "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v5.6.1" + }, + "time": "2020-08-25T19:10:18+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.4", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.4" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "time": "2020-12-08T18:02:06+00:00" + }, + { + "name": "symfony/asset", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "d254631bc20fb82a5827602dc2fa84a3118ec3f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/d254631bc20fb82a5827602dc2fa84a3118ec3f5", + "reference": "d254631bc20fb82a5827602dc2fa84a3118ec3f5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "require-dev": { + "symfony/http-client": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.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": "Symfony Asset Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-14T07:03:02+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "5e61d63b1ef4fb4852994038267ad45e12f3ec52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/5e61d63b1ef4fb4852994038267ad45e12f3ec52", + "reference": "5e61d63b1ef4fb4852994038267ad45e12f3ec52", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "~1.0", + "psr/log": "^1.1", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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 Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/config", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "d0a82d965296083fe463d655a3644cbe49cbaa80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/d0a82d965296083fe463d655a3644cbe49cbaa80", + "reference": "d0a82d965296083fe463d655a3644cbe49cbaa80", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.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": "Symfony Config Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/console", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "47c02526c532fb381374dab26df05e7313978976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976", + "reference": "47c02526c532fb381374dab26df05e7313978976", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "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": "Symfony Console Component", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/contracts", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "f7783bdec14b06c323d30a5f74ba70a17ec0ce81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/f7783bdec14b06c323d30a5f74ba70a17ec0ce81", + "reference": "f7783bdec14b06c323d30a5f74ba70a17ec0ce81", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0" + }, + "replace": { + "symfony/cache-contracts": "self.version", + "symfony/deprecation-contracts": "self.version", + "symfony/event-dispatcher-contracts": "self.version", + "symfony/http-client-contracts": "self.version", + "symfony/service-contracts": "self.version", + "symfony/translation-contracts": "self.version" + }, + "require-dev": { + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "symfony/cache-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-implementation": "", + "symfony/service-implementation": "", + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-version": "2.3", + "branch-alias": { + "dev-main": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "files": [ + "Deprecation/function.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": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/contracts/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-14T17:08:19+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "7f8a9e9eff0581a33e20f6c5d41096fe22832d25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7f8a9e9eff0581a33e20f6c5d41096fe22832d25", + "reference": "7f8a9e9eff0581a33e20f6c5d41096fe22832d25", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<5.1", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v5.1.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "7c9886668f6a74611649cd037b07b996a0c58ad8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7c9886668f6a74611649cd037b07b996a0c58ad8", + "reference": "7c9886668f6a74611649cd037b07b996a0c58ad8", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^1.3|^2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/dependency-injection": "<4.4", + "symfony/form": "<5.1", + "symfony/http-kernel": "<5", + "symfony/messenger": "<4.4", + "symfony/property-info": "<5", + "symfony/security-bundle": "<5", + "symfony/security-core": "<5", + "symfony/validator": "<5.0.2" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.6", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "^1.1", + "doctrine/dbal": "~2.4|^3.0", + "doctrine/orm": "^2.6.3", + "symfony/cache": "^5.1", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/doctrine-messenger": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^5.1.3", + "symfony/http-kernel": "^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^5.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0", + "symfony/security-core": "^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^5.0.2", + "symfony/var-dumper": "^4.4|^5.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": "Symfony Doctrine Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v5.1.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": "2020-12-14T14:33:09+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b", + "reference": "204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1" + }, + "require-dev": { + "symfony/process": "^4.4|^5.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/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/59b190ce16ddf32771a22087b60f6dafd3407147", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "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": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "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": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "f9a7c7eb461df6d5d99738346039de71685de6af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/f9a7c7eb461df6d5d99738346039de71685de6af", + "reference": "f9a7c7eb461df6d5d99738346039de71685de6af", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/cache": "^4.4|^5.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "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": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "fa8f8cab6b65e2d99a118e082935344c5ba8c60d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fa8f8cab6b65e2d99a118e082935344c5ba8c60d", + "reference": "fa8f8cab6b65e2d99a118e082935344c5ba8c60d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~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": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-11-30T17:05:38+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "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": "Symfony Finder Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/flex", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48", + "reference": "ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=7.1" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/dotenv": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/process": "^3.4|^4.4|^5.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-main": "1.9-dev" + }, + "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/v1.11.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-03T10:57:35+00:00" + }, + { + "name": "symfony/form", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "27b1df421c73a2d219f9f5b203f0ec972f0b1de0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/27b1df421c73a2d219f9f5b203f0ec972f0b1de0", + "reference": "27b1df421c73a2d219f9f5b203f0ec972f0b1de0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/options-resolver": "^5.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/property-access": "^5.0.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<4.4", + "symfony/doctrine-bridge": "<4.4", + "symfony/error-handler": "<4.4.5", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/translation": "<4.4", + "symfony/translation-contracts": "<1.1.7", + "symfony/twig-bridge": "<4.4" + }, + "require-dev": { + "doctrine/collections": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^4.4.17|^5.1.9", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "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": "Symfony Form Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "0663407ca5ad12e2e3fe657b32266904b3dc1e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/0663407ca5ad12e2e3fe657b32266904b3dc1e3f", + "reference": "0663407ca5ad12e2e3fe657b32266904b3dc1e3f", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/cache": "^5.2", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/event-dispatcher": "^5.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-foundation": "^5.2.1", + "symfony/http-kernel": "^5.2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/routing": "^5.2" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<5.1", + "symfony/browser-kit": "<4.4", + "symfony/console": "<5.2", + "symfony/dom-crawler": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/form": "<5.2", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<5.2", + "symfony/messenger": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-access": "<5.2", + "symfony/property-info": "<4.4", + "symfony/serializer": "<5.2", + "symfony/stopwatch": "<4.4", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<4.4", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<5.2", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^5.2", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/dotenv": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^5.2", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^5.2", + "symfony/messenger": "^5.2", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/security-bundle": "^5.1", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/serializer": "^5.2", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/string": "^5.0", + "symfony/translation": "^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^5.2", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^5.2", + "symfony/yaml": "^4.4|^5.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": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T11:40:59+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a1f6218b29897ab52acba58cfa905b83625bef8d", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "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": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T10:00:10+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1feb619286d819180f7b8bc0dc44f516d9c62647", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "~1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.1.8", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "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": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T13:49:39+00:00" + }, + { + "name": "symfony/intl", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "53927f98c9201fe5db3cfc4d574b1f4039020297" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/53927f98c9201fe5db3cfc4d574b1f4039020297", + "reference": "53927f98c9201fe5db3cfc4d574b1f4039020297", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/filesystem": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "to use the component with locales other than \"en\"" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "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": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-14T10:10:03+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "de97005aef7426ba008c46ba840fc301df577ada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", + "reference": "de97005aef7426ba008c46ba840fc301df577ada", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" + }, + "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": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "c024671adcac903b142dd952306a243d35843963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/c024671adcac903b142dd952306a243d35843963", + "reference": "c024671adcac903b142dd952306a243d35843963", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1|^2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.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": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940", + "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.22 || ~2.0", + "php": ">=5.6", + "symfony/config": "~3.4 || ~4.0 || ^5.0", + "symfony/dependency-injection": "~3.4.10 || ^4.0.10 || ^5.0", + "symfony/http-kernel": "~3.4 || ~4.0 || ^5.0", + "symfony/monolog-bridge": "~3.4 || ~4.0 || ^5.0" + }, + "require-dev": { + "symfony/console": "~3.4 || ~4.0 || ^5.0", + "symfony/phpunit-bridge": "^4.4 || ^5.0", + "symfony/yaml": "~3.4 || ~4.0 || ^5.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": "http://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-06T15:12:11+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "87a2a4a766244e796dd9cb9d6f58c123358cd986" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/87a2a4a766244e796dd9cb9d6f58c123358cd986", + "reference": "87a2a4a766244e796dd9cb9d6f58c123358cd986", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "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": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T12:08:07+00:00" + }, + { + "name": "symfony/orm-pack", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/orm-pack.git", + "reference": "21ac491414b5815e5ebb7425908c1d1568d2e775" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/orm-pack/zipball/21ac491414b5815e5ebb7425908c1d1568d2e775", + "reference": "21ac491414b5815e5ebb7425908c1d1568d2e775", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "*", + "doctrine/common": "^2", + "doctrine/doctrine-bundle": "^2", + "doctrine/doctrine-migrations-bundle": "^2", + "doctrine/orm": "^2" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Doctrine ORM", + "support": { + "issues": "https://github.com/symfony/orm-pack/issues", + "source": "https://github.com/symfony/orm-pack/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-31T10:20:18+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "c44d5bf6a75eed79555c6bf37505c6d39559353e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/c44d5bf6a75eed79555c6bf37505c6d39559353e", + "reference": "c44d5bf6a75eed79555c6bf37505c6d39559353e", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/intl": "~2.3|~3.0|~4.0|~5.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's 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.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "727d1096295d807c309fb01a851577302394c897" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", + "reference": "727d1096295d807c309fb01a851577302394c897", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/property-access", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "243dcdda2f276cb31efa31a015d0fdb5076931ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/243dcdda2f276cb31efa31a015d0fdb5076931ce", + "reference": "243dcdda2f276cb31efa31a015d0fdb5076931ce", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/property-info": "^5.2" + }, + "require-dev": { + "symfony/cache": "^4.4|^5.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": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/property-info", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "f65694a05eb7742c5f2951f20676de367ffaaaea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/f65694a05eb7742c5f2951f20676de367ffaaaea", + "reference": "f65694a05eb7742c5f2951f20676de367ffaaaea", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/string": "^5.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.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": "Symfony Property Info Component", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-11T23:40:07+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/934ac2720dcc878a47a45c986b483a7ee7193620", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.7", + "psr/log": "~1.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "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": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "5a4e431445432c02b88c885c778765b50d92c6d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5a4e431445432c02b88c885c778765b50d92c6d5", + "reference": "5a4e431445432c02b88c885c778765b50d92c6d5", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher": "^5.1", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-php80": "^1.15", + "symfony/security-core": "^5.2", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-guard": "^5.2", + "symfony/security-http": "^5.2" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/console": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<4.4", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^2.0", + "symfony/asset": "^4.4|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^5.2", + "symfony/process": "^4.4|^5.0", + "symfony/rate-limiter": "^5.2", + "symfony/serializer": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/twig-bridge": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "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": "Symfony SecurityBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/security-core", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "d058598fa48e06c3f774450f08fd926b982e33eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/d058598fa48e06c3f774450f08fd926b982e33eb", + "reference": "d058598fa48e06c3f774450f08fd926b982e33eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^1.1|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.4", + "symfony/validator": "<5.2" + }, + "require-dev": { + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/ldap": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^5.2" + }, + "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/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "fc91cd67b6fcbeae3e5aff854c722fa05b5d133b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/fc91cd67b6fcbeae3e5aff854c722fa05b5d133b", + "reference": "fc91cd67b6fcbeae3e5aff854c722fa05b5d133b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/security-core": "^4.4|^5.0" + }, + "conflict": { + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.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/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49", + "reference": "0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15", + "symfony/security-core": "^5.0", + "symfony/security-http": "^4.4.1|^5.0.1" + }, + "require-dev": { + "psr/log": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "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 - Guard", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-guard/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-11-27T10:24:53+00:00" + }, + { + "name": "symfony/security-http", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "40023b8e14e5928b26df6a099cec0bf0c30eb3be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/40023b8e14e5928b26df6a099cec0bf0c30eb3be", + "reference": "40023b8e14e5928b26df6a099cec0bf0c30eb3be", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/http-foundation": "^5.2", + "symfony/http-kernel": "^5.2", + "symfony/polyfill-php80": "^1.15", + "symfony/property-access": "^4.4|^5.0", + "symfony/security-core": "^5.2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.3", + "symfony/security-csrf": "<4.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/rate-limiter": "^5.2", + "symfony/routing": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.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/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/serializer", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "4af81510bb603a6d255691a88e118add2bba6337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/4af81510bb603a6d255691a88e118add2bba6337", + "reference": "4af81510bb603a6d255691a88e118add2bba6337", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<4.4", + "symfony/property-info": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/filesystem": "^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/mime": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/uid": "^5.1", + "symfony/validator": "^4.4|^5.0", + "symfony/var-exporter": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "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": "Symfony Serializer Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/serializer-pack", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer-pack.git", + "reference": "61173947057d5e1bf1c79e2a6ab6a8430be0602e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer-pack/zipball/61173947057d5e1bf1c79e2a6ab6a8430be0602e", + "reference": "61173947057d5e1bf1c79e2a6ab6a8430be0602e", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "phpdocumentor/reflection-docblock": "*", + "symfony/property-access": "*", + "symfony/property-info": "*", + "symfony/serializer": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony serializer", + "support": { + "issues": "https://github.com/symfony/serializer-pack/issues", + "source": "https://github.com/symfony/serializer-pack/tree/v1.0.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-19T08:52:16+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "2b105c0354f39a63038a1d8bf776ee92852813af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2b105c0354f39a63038a1d8bf776ee92852813af", + "reference": "2b105c0354f39a63038a1d8bf776ee92852813af", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "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": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-11-01T16:14:45+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-05T07:33:16+00:00" + }, + { + "name": "symfony/swiftmailer-bundle", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/swiftmailer-bundle.git", + "reference": "933be6a3196fb354615290f53ff7ff61e0bdde58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/933be6a3196fb354615290f53ff7ff61e0bdde58", + "reference": "933be6a3196fb354615290f53ff7ff61e0bdde58", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "swiftmailer/swiftmailer": "^6.1.3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "conflict": { + "twig/twig": "<1.41|<2.10" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SwiftmailerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony SwiftmailerBundle", + "homepage": "http://symfony.com", + "support": { + "issues": "https://github.com/symfony/swiftmailer-bundle/issues", + "source": "https://github.com/symfony/swiftmailer-bundle/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-06T05:51:35+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a04209ba0d1391c828e5b2373181dac63c52ee70", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "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": "Symfony Translation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "378a136a41c07b5f2086f753d9756fb018921f86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/378a136a41c07b5f2086f753d9756fb018921f86", + "reference": "378a136a41c07b5f2086f753d9756fb018921f86", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/form": "<5.1", + "symfony/http-foundation": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.2", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^5.1.9", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/mime": "^5.2", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^4.4|^5.1", + "symfony/routing": "^4.4|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/serializer": "^5.2", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.2", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^5.2", + "symfony/yaml": "^4.4|^5.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "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": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-11T23:40:07+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "8cb3208aec4655ae1495afad7ef3c032a236dfa7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/8cb3208aec4655ae1495afad7ef3c032a236dfa7", + "reference": "8cb3208aec4655ae1495afad7ef3c032a236dfa7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.2", + "symfony/framework-bundle": "<5.0", + "symfony/translation": "<5.0" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "symfony/asset": "^4.4|^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.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": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T16:43:38+00:00" + }, + { + "name": "symfony/validator", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "312d36715799ca1d195ee8dbf258b31d1a3cbf7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/312d36715799ca1d195ee8dbf258b31d1a3cbf7b", + "reference": "312d36715799ca1d195ee8dbf258b31d1a3cbf7b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/lexer": "<1.0.2", + "phpunit/phpunit": "<5.4.3", + "symfony/dependency-injection": "<4.4", + "symfony/expression-language": "<5.1", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/translation": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^5.1", + "symfony/finder": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader.", + "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": "Symfony Validator Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "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": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-16T17:02:19+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/fbc3507f23d263d75417e09a12d77c009f39676c", + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9" + }, + "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": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-28T21:31:18+00:00" + }, + { + "name": "symfony/web-link", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "e805314ad8c4298d9bfc75335e35f83d6db2f43f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/e805314ad8c4298d9bfc75335e35f83d6db2f43f", + "reference": "e805314ad8c4298d9bfc75335e35f83d6db2f43f", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/link": "^1.0" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.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": "Symfony WebLink Component", + "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/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T12:01:57+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "290ea5e03b8cf9b42c783163123f54441fb06939" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/290ea5e03b8cf9b42c783163123f54441fb06939", + "reference": "290ea5e03b8cf9b42c783163123f54441fb06939", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.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": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:02:38+00:00" + }, + { + "name": "twig/twig", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "f795ca686d38530045859b0350b5352f7d63447d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/f795ca686d38530045859b0350b5352f7d63447d", + "reference": "f795ca686d38530045859b0350b5352f7d63447d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-01-05T15:40:36+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "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/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" + }, + "time": "2020-07-08T17:02:28+00:00" + }, + { + "name": "willdurand/negotiation", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/willdurand/Negotiation.git", + "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/04e14f38d4edfcc974114a07d2777d90c98f3d9c", + "reference": "04e14f38d4edfcc974114a07d2777d90c98f3d9c", + "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.0.0" + }, + "time": "2020-09-25T08:01:41+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/data-fixtures", + "version": "1.4.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "16a03fadb5473f49aad70384002dfd5012fe680e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/16a03fadb5473f49aad70384002dfd5012fe680e", + "reference": "16a03fadb5473f49aad70384002dfd5012fe680e", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.13|^3.0", + "doctrine/persistence": "^1.3.3|^2.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "doctrine/dbal": "^2.5.4", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.7.0", + "phpunit/phpunit": "^7.0" + }, + "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", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/1.4.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2020-09-01T07:13:28+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "870189619a7770f468ffb0b80925302e065a3b34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/870189619a7770f468ffb0b80925302e065a3b34", + "reference": "870189619a7770f468ffb0b80925302e065a3b34", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.3", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.6.0", + "doctrine/persistence": "^1.3.7|^2.0", + "php": "^7.1 || ^8.0", + "symfony/config": "^3.4|^4.3|^5.0", + "symfony/console": "^3.4|^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.3|^5.0", + "symfony/doctrine-bridge": "^3.4|^4.1|^5.0", + "symfony/http-kernel": "^3.4|^4.3|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.4 || ^8.0 || ^9.2", + "symfony/phpunit-bridge": "^4.1|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2020-11-14T09:36:49+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "ab3f5364d01f2c2c16113442fb987d26e4004913" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/ab3f5364d01f2c2c16113442fb987d26e4004913", + "reference": "ab3f5364d01f2c2c16113442fb987d26e4004913", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-intl": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.4.2" + }, + "type": "library", + "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.13.0" + }, + "time": "2020-12-18T16:50:48+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nelmio/alice", + "version": "3.7.4", + "source": { + "type": "git", + "url": "https://github.com/nelmio/alice.git", + "reference": "ce57713de3c3e32ad8ea77674cd318f87e1909a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/alice/zipball/ce57713de3c3e32ad8ea77674cd318f87e1909a0", + "reference": "ce57713de3c3e32ad8ea77674cd318f87e1909a0", + "shasum": "" + }, + "require": { + "fakerphp/faker": "^1.10", + "myclabs/deep-copy": "^1.5.2", + "php": "^7.3", + "sebastian/comparator": "^3.0 || ^4.0", + "symfony/property-access": "^2.8 || ^3.4 || ^4.0 || ^5.0", + "symfony/yaml": "^2.8 || ^3.4 || ^4.0 || ^5.0" + }, + "conflict": { + "symfony/framework-bundle": "<3.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.1.0", + "phpspec/prophecy": "^1.6", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.4 || ^9.3", + "symfony/phpunit-bridge": "^5.1.3", + "symfony/var-dumper": "^3.4 || ^4.0 || ^5.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.7.4" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2020-11-04T09:20:59+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "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.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "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": "http://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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "c79722fc3d430810d7a764fbc84fe212e532e004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c79722fc3d430810d7a764fbc84fe212e532e004", + "reference": "c79722fc3d430810d7a764fbc84fe212e532e004", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/twig-bridge": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.2" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/web-profiler-bundle": "^4.4|^5.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": "Symfony DebugBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T12:08:07+00:00" + }, + { + "name": "symfony/debug-pack", + "version": "v1.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-pack.git", + "reference": "cfd5093378e9cafe500f05c777a22fe8a64a9342" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-pack/zipball/cfd5093378e9cafe500f05c777a22fe8a64a9342", + "reference": "cfd5093378e9cafe500f05c777a22fe8a64a9342", + "shasum": "" + }, + "require": { + "symfony/debug-bundle": "*", + "symfony/monolog-bundle": "^3.0", + "symfony/profiler-pack": "*", + "symfony/var-dumper": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A debug pack for Symfony projects", + "support": { + "issues": "https://github.com/symfony/debug-pack/issues", + "source": "https://github.com/symfony/debug-pack/tree/v1.0.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": "2020-10-19T08:51:51+00:00" + }, + { + "name": "symfony/profiler-pack", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/profiler-pack.git", + "reference": "29ec66471082b4eb068db11eb4f0a48c277653f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/29ec66471082b4eb068db11eb4f0a48c277653f7", + "reference": "29ec66471082b4eb068db11eb4f0a48c277653f7", + "shasum": "" + }, + "require": { + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/web-profiler-bundle": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony web profiler", + "support": { + "issues": "https://github.com/symfony/profiler-pack/issues", + "source": "https://github.com/symfony/profiler-pack/tree/v1.0.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": "2020-08-12T06:50:46+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "6cd2f3d01faf1d77125ec14150a6fbd062dbe211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6cd2f3d01faf1d77125ec14150a6fbd062dbe211", + "reference": "6cd2f3d01faf1d77125ec14150a6fbd062dbe211", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/framework-bundle": "^5.1", + "symfony/http-kernel": "^5.2", + "symfony/routing": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.2", + "symfony/form": "<4.4", + "symfony/messenger": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.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": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.3.0", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-zip": "^1.15" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/backend/config/bootstrap.php b/backend/config/bootstrap.php new file mode 100644 index 00000000..95c1cd41 --- /dev/null +++ b/backend/config/bootstrap.php @@ -0,0 +1,21 @@ +loadEnv(dirname(__DIR__).'/.env'); +} + +$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $_SERVER['APP_ENV'] ?: $_ENV['APP_ENV'] ?: 'dev'; +$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/backend/config/bundles.php b/backend/config/bundles.php new file mode 100644 index 00000000..168da00a --- /dev/null +++ b/backend/config/bundles.php @@ -0,0 +1,20 @@ + ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], + ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + Nelmio\Alice\Bridge\Symfony\NelmioAliceBundle::class => ['dev' => true, 'test' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], + Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], + Limenius\LiformBundle\LimeniusLiformBundle::class => ['all' => true], +]; diff --git a/backend/config/packages/api_platform.yaml b/backend/config/packages/api_platform.yaml new file mode 100644 index 00000000..b4a73152 --- /dev/null +++ b/backend/config/packages/api_platform.yaml @@ -0,0 +1,7 @@ +api_platform: + formats: + jsonapi: ['application/vnd.api+json'] + html: ['text/html'] + jsonld: ['application/ld+json'] + mapping: + paths: ['%kernel.project_dir%/src/App/ORM'] diff --git a/backend/config/packages/cache.yaml b/backend/config/packages/cache.yaml new file mode 100644 index 00000000..dfc68f1e --- /dev/null +++ b/backend/config/packages/cache.yaml @@ -0,0 +1,27 @@ +framework: + cache: + pools: + doctrine_result_cache_pool: + adapter: cache.app + doctrine_system_cache_pool: + adapter: cache.system + + app: cache.adapter.apcu + + # Put the unique name of your app here: the prefix seed + # is used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The app cache caches to the filesystem by default. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: ~ diff --git a/backend/config/packages/dev/debug.yaml b/backend/config/packages/dev/debug.yaml new file mode 100644 index 00000000..26d4e53d --- /dev/null +++ b/backend/config/packages/dev/debug.yaml @@ -0,0 +1,4 @@ +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/backend/config/packages/dev/easy_log_handler.yaml b/backend/config/packages/dev/easy_log_handler.yaml new file mode 100644 index 00000000..27bfc608 --- /dev/null +++ b/backend/config/packages/dev/easy_log_handler.yaml @@ -0,0 +1,16 @@ +services: + EasyCorp\EasyLog\EasyLogHandler: + public: false + arguments: ['%kernel.logs_dir%/%kernel.environment%.log'] + +#// FIXME: How to add this configuration automatically without messing up with the monolog configuration? +#monolog: +# handlers: +# buffered: +# type: buffer +# handler: easylog +# channels: ['!event'] +# level: debug +# easylog: +# type: service +# id: EasyCorp\EasyLog\EasyLogHandler diff --git a/backend/config/packages/dev/monolog.yaml b/backend/config/packages/dev/monolog.yaml new file mode 100644 index 00000000..0e987ccc --- /dev/null +++ b/backend/config/packages/dev/monolog.yaml @@ -0,0 +1,11 @@ +monolog: + handlers: + main: + type: stream + path: "php://stdout" + level: debug + channels: ["!event"] + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/backend/config/packages/dev/nelmio_alice.yaml b/backend/config/packages/dev/nelmio_alice.yaml new file mode 100644 index 00000000..4cb9065c --- /dev/null +++ b/backend/config/packages/dev/nelmio_alice.yaml @@ -0,0 +1,9 @@ +nelmio_alice: + functions_blacklist: + - 'current' + - 'shuffle' + - 'date' + - 'time' + - 'file' + - 'md5' + - 'sha1' diff --git a/backend/config/packages/dev/routing.yaml b/backend/config/packages/dev/routing.yaml new file mode 100644 index 00000000..4116679a --- /dev/null +++ b/backend/config/packages/dev/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: true diff --git a/backend/config/packages/dev/swiftmailer.yaml b/backend/config/packages/dev/swiftmailer.yaml new file mode 100644 index 00000000..b98158ee --- /dev/null +++ b/backend/config/packages/dev/swiftmailer.yaml @@ -0,0 +1,4 @@ +# See https://symfony.com/doc/current/email/dev_environment.html +swiftmailer: + # send all emails to a specific address + #delivery_addresses: ['me@example.com'] diff --git a/backend/config/packages/dev/web_profiler.yaml b/backend/config/packages/dev/web_profiler.yaml new file mode 100644 index 00000000..e92166a7 --- /dev/null +++ b/backend/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/backend/config/packages/doctrine.yaml b/backend/config/packages/doctrine.yaml new file mode 100644 index 00000000..ede8ccf6 --- /dev/null +++ b/backend/config/packages/doctrine.yaml @@ -0,0 +1,35 @@ +parameters: + # Adds a fallback DATABASE_URL if the env var is not set. + # This allows you to run cache:warmup even if your + # environment variables are not available yet. + # You should not need to change this value. + env(DATABASE_URL): '' + +doctrine: + dbal: + # configure these for your database server + driver: 'pdo_pgsql' + server_version: '11.0' + charset: utf8 + url: '%env(resolve:DATABASE_URL)%' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore + auto_mapping: true + mappings: + App: + is_bundle: false + type: annotation + dir: '%kernel.project_dir%/src/App/ORM' + prefix: 'App\ORM' + alias: App + + metadata_cache_driver: + type: pool + pool: doctrine_system_cache_pool + query_cache_driver: + type: pool + pool: doctrine_system_cache_pool + result_cache_driver: + type: pool + pool: doctrine_result_cache_pool diff --git a/backend/config/packages/doctrine_migrations.yaml b/backend/config/packages/doctrine_migrations.yaml new file mode 100644 index 00000000..3bf0fbca --- /dev/null +++ b/backend/config/packages/doctrine_migrations.yaml @@ -0,0 +1,5 @@ +doctrine_migrations: + dir_name: '%kernel.project_dir%/src/Migrations' + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + namespace: DoctrineMigrations diff --git a/backend/config/packages/framework.yaml b/backend/config/packages/framework.yaml new file mode 100644 index 00000000..d3f884c4 --- /dev/null +++ b/backend/config/packages/framework.yaml @@ -0,0 +1,17 @@ +framework: + secret: '%env(APP_SECRET)%' + #default_locale: en + #csrf_protection: true + #http_method_override: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: ~ + cookie_secure: auto + cookie_samesite: lax + + #esi: true + #fragments: true + php_errors: + log: true diff --git a/backend/config/packages/nelmio_cors.yaml b/backend/config/packages/nelmio_cors.yaml new file mode 100644 index 00000000..6f202c26 --- /dev/null +++ b/backend/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: + '^/': ~ diff --git a/backend/config/packages/nyholm_psr7.yaml b/backend/config/packages/nyholm_psr7.yaml new file mode 100644 index 00000000..761aa965 --- /dev/null +++ b/backend/config/packages/nyholm_psr7.yaml @@ -0,0 +1,14 @@ +services: + _defaults: + public: false + + # 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' + + nyholm.psr7.psr17_factory: + class: Nyholm\Psr7\Factory\Psr17Factory diff --git a/backend/config/packages/prod/doctrine.yaml b/backend/config/packages/prod/doctrine.yaml new file mode 100644 index 00000000..87958235 --- /dev/null +++ b/backend/config/packages/prod/doctrine.yaml @@ -0,0 +1,3 @@ +doctrine: + orm: + auto_generate_proxy_classes: false diff --git a/backend/config/packages/prod/monolog.yaml b/backend/config/packages/prod/monolog.yaml new file mode 100644 index 00000000..4d4a2a77 --- /dev/null +++ b/backend/config/packages/prod/monolog.yaml @@ -0,0 +1,25 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_404s: + # regex: exclude all 404 errors from the logs + - ^/ + nested: + type: stream + path: "php://stdout" + level: debug + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + path: "php://stdout" + deprecation_filter: + type: filter + handler: deprecation + max_level: info + channels: ["php"] diff --git a/backend/config/packages/routing.yaml b/backend/config/packages/routing.yaml new file mode 100644 index 00000000..a15c4ec6 --- /dev/null +++ b/backend/config/packages/routing.yaml @@ -0,0 +1,4 @@ +framework: + router: + strict_requirements: ~ + utf8: true diff --git a/backend/config/packages/security.yaml b/backend/config/packages/security.yaml new file mode 100644 index 00000000..fb4c593e --- /dev/null +++ b/backend/config/packages/security.yaml @@ -0,0 +1,24 @@ +security: + # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers + providers: + in_memory: { memory: ~ } + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + anonymous: true + + # activate different ways to authenticate + + # http_basic: true + # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate + + # form_login: true + # https://symfony.com/doc/current/security/form_login_setup.html + + # 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 } + # - { path: ^/profile, roles: ROLE_USER } diff --git a/backend/config/packages/sensio_framework_extra.yaml b/backend/config/packages/sensio_framework_extra.yaml new file mode 100644 index 00000000..1821ccc0 --- /dev/null +++ b/backend/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/backend/config/packages/stof_doctrine_extensions.yaml b/backend/config/packages/stof_doctrine_extensions.yaml new file mode 100644 index 00000000..917929d3 --- /dev/null +++ b/backend/config/packages/stof_doctrine_extensions.yaml @@ -0,0 +1,8 @@ +# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html +# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/ +stof_doctrine_extensions: + default_locale: en_US + orm: + default: + timestampable: true + sluggable: true diff --git a/backend/config/packages/swiftmailer.yaml b/backend/config/packages/swiftmailer.yaml new file mode 100644 index 00000000..cae65084 --- /dev/null +++ b/backend/config/packages/swiftmailer.yaml @@ -0,0 +1,3 @@ +swiftmailer: + url: '%env(MAILER_URL)%' + spool: { type: 'memory' } diff --git a/backend/config/packages/test/framework.yaml b/backend/config/packages/test/framework.yaml new file mode 100644 index 00000000..d051c840 --- /dev/null +++ b/backend/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/backend/config/packages/test/monolog.yaml b/backend/config/packages/test/monolog.yaml new file mode 100644 index 00000000..2762653c --- /dev/null +++ b/backend/config/packages/test/monolog.yaml @@ -0,0 +1,7 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] diff --git a/backend/config/packages/test/nelmio_alice.yaml b/backend/config/packages/test/nelmio_alice.yaml new file mode 100644 index 00000000..caec543d --- /dev/null +++ b/backend/config/packages/test/nelmio_alice.yaml @@ -0,0 +1,2 @@ +imports: + - { resource: ../dev/nelmio_alice.yaml } diff --git a/backend/config/packages/test/routing.yaml b/backend/config/packages/test/routing.yaml new file mode 100644 index 00000000..4116679a --- /dev/null +++ b/backend/config/packages/test/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: true diff --git a/backend/config/packages/test/swiftmailer.yaml b/backend/config/packages/test/swiftmailer.yaml new file mode 100644 index 00000000..f4380780 --- /dev/null +++ b/backend/config/packages/test/swiftmailer.yaml @@ -0,0 +1,2 @@ +swiftmailer: + disable_delivery: true diff --git a/backend/config/packages/test/web_profiler.yaml b/backend/config/packages/test/web_profiler.yaml new file mode 100644 index 00000000..03752de2 --- /dev/null +++ b/backend/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/backend/config/packages/translation.yaml b/backend/config/packages/translation.yaml new file mode 100644 index 00000000..e6b1cd66 --- /dev/null +++ b/backend/config/packages/translation.yaml @@ -0,0 +1,6 @@ +framework: + default_locale: '%locale%' + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - '%locale%' diff --git a/backend/config/packages/twig.yaml b/backend/config/packages/twig.yaml new file mode 100644 index 00000000..42faff68 --- /dev/null +++ b/backend/config/packages/twig.yaml @@ -0,0 +1,6 @@ +twig: + default_path: '%kernel.project_dir%/src/App/templates' + paths: + - '%kernel.project_dir%/src/PHPDocker/Generator/templates' + debug: '%kernel.debug%' + strict_variables: '%kernel.debug%' diff --git a/backend/config/packages/validator.yaml b/backend/config/packages/validator.yaml new file mode 100644 index 00000000..a695e1a6 --- /dev/null +++ b/backend/config/packages/validator.yaml @@ -0,0 +1,3 @@ +framework: + validation: + email_validation_mode: html5 diff --git a/backend/config/routes.yaml b/backend/config/routes.yaml new file mode 100644 index 00000000..1b98bfc3 --- /dev/null +++ b/backend/config/routes.yaml @@ -0,0 +1,18 @@ +#index: +# path: / +# controller: App\Controller\DefaultController::index + +contact: + path: /contact + controller: App\Controller\ContactController::process + methods: ['POST'] + +generator_get_options: + path: /generator + controller: App\Controller\GeneratorController::getGeneratorOptions + methods: ['GET'] + +generator_generate: + path: /generator + controller: App\Controller\GeneratorController::generate + methods: ['POST'] diff --git a/backend/config/routes/annotations.yaml b/backend/config/routes/annotations.yaml new file mode 100644 index 00000000..972916b3 --- /dev/null +++ b/backend/config/routes/annotations.yaml @@ -0,0 +1,3 @@ +controllers: + resource: ../../src/App/Controller/ + type: annotation diff --git a/backend/config/routes/api_platform.yaml b/backend/config/routes/api_platform.yaml new file mode 100644 index 00000000..040a862c --- /dev/null +++ b/backend/config/routes/api_platform.yaml @@ -0,0 +1,4 @@ +api_platform: + resource: . + type: api_platform + prefix: /content diff --git a/backend/config/routes/dev/web_profiler.yaml b/backend/config/routes/dev/web_profiler.yaml new file mode 100644 index 00000000..c82beff2 --- /dev/null +++ b/backend/config/routes/dev/web_profiler.yaml @@ -0,0 +1,7 @@ +web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + +web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/backend/config/services.yaml b/backend/config/services.yaml new file mode 100644 index 00000000..34c8e4dd --- /dev/null +++ b/backend/config/services.yaml @@ -0,0 +1,55 @@ +# This file is the entry point to configure your own services. +# Files in the packages/ subdirectory configure your dependencies. + +# Put parameters here that don't need to change on each machine where the app is deployed +# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration +parameters: + contact_email_from: 'automaton@phpdocker.io' + contact_email_to: '%env(CONTACT_EMAIL_TO)%' + locale: 'en' + +services: + # default configuration for services in *this* file + _defaults: + autowire: true # Automatically injects dependencies in your services. + autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + + # makes classes in src/ available to be used as services + # this creates a service per class whose id is the fully-qualified class name + App\: + resource: '../src/App/*' + exclude: '../src/App/{DependencyInjection,Entity,Services,Migrations,Tests,Kernel.php}' + + # controllers are imported separately to make sure services can be injected + # as action arguments even if you don't extend any base controller class + App\Controller\: + resource: '../src/App/Controller' + tags: ['controller.service_arguments'] + + Cocur\Slugify\Slugify: ~ + + PHPDocker\Util\SlugifierInterface: + alias: App\Service\Slugifier + + PHPDocker\Contact\DispatcherInterface: + class: App\Contact\Dispatcher + arguments: + - '@swiftmailer.mailer.default' + - '@twig' + - '%contact_email_from%' + - '%contact_email_to%' + + PHPDocker\Zip\Archiver: ~ + + Michelf\MarkdownExtra: ~ + + PHPDocker\Generator\Generator: + arguments: + - '@PHPDocker\Zip\Archiver' + - '@twig' + - '@Michelf\MarkdownExtra' + - '@PHPDocker\Util\SlugifierInterface' + + + # add more service definitions when explicit configuration is needed + # please note that last definitions always *replace* previous ones diff --git a/console b/backend/console similarity index 100% rename from console rename to backend/console diff --git a/backend/docker/README.html b/backend/docker/README.html new file mode 100644 index 00000000..242e7866 --- /dev/null +++ b/backend/docker/README.html @@ -0,0 +1,116 @@ + + + PHPDocker.io Readme + + + + + + +
+
+
+

PHPDocker.io generated environment

+ +

Add to your project

+ +

Simply, unzip the file into your project, this will create docker-compose.yml on the root of your project and a folder named phpdocker containing nginx and php-fpm config for it.

+ +

Ensure the webserver config on docker\nginx.conf is correct for your project. PHPDocker.io will have customised this file according to the application type you chose on the generator, for instance web/app|app_dev.php on a Symfony project, or public/index.php on generic apps.

+ +

Note: you may place the files elsewhere in your project. Make sure you modify the locations for the php-fpm dockerfile, the php.ini overrides and nginx config on docker-compose.yml if you do so.

+ +

How to run

+ +

Dependencies:

+ + + +

Once you're done, simply cd to your project and run docker-compose up -d. This will initialise and start all the containers, then leave them running in the background.

+ +

Services exposed outside your environment

+ +

You can access your application via localhost, if you're running the containers directly, or through `` when run on a vm. nginx and mailhog both respond to any hostname, in case you want to add your own hostname on your /etc/hosts

+ + + + + + + + + + + + + + +
ServiceAddress outside containers
Webserverlocalhost:5000
+ +

Hosts within your environment

+ +

You'll need to configure your application to use any services you enabled:

+ + + + + + + + + + + + + + + + +
ServiceHostnamePort number
php-fpmphp-fpm9000
+ +

Docker compose cheatsheet

+ +

Note: you need to cd first to where your docker-compose.yml file lives.

+ + + +

Recommendations

+ +

It's hard to avoid file permission issues when fiddling about with containers due to the fact that, from your OS point of view, any files created within the container are owned by the process that runs the docker engine (this is usually root). Different OS will also have different problems, for instance you can run stuff in containers using docker exec -it -u $(id -u):$(id -g) CONTAINER_NAME COMMAND to force your current user ID into the process, but this will only work if your host OS is Linux, not mac. Follow a couple of simple rules and save yourself a world of hurt.

+ + +
+
+
+ + + + diff --git a/backend/docker/README.md b/backend/docker/README.md new file mode 100644 index 00000000..b0802987 --- /dev/null +++ b/backend/docker/README.md @@ -0,0 +1,56 @@ +PHPDocker.io generated environment +================================== + +# Add to your project # + +Simply, unzip the file into your project, this will create `docker-compose.yml` on the root of your project and a folder named `phpdocker` containing nginx and php-fpm config for it. + +Ensure the webserver config on `docker\nginx.conf` is correct for your project. PHPDocker.io will have customised this file according to the application type you chose on the generator, for instance `web/app|app_dev.php` on a Symfony project, or `public/index.php` on generic apps. + +Note: you may place the files elsewhere in your project. Make sure you modify the locations for the php-fpm dockerfile, the php.ini overrides and nginx config on `docker-compose.yml` if you do so. + +# How to run # + +Dependencies: + + * Docker engine v1.13 or higher. Your OS provided package might be a little old, if you encounter problems, do upgrade. See [https://docs.docker.com/engine/installation](https://docs.docker.com/engine/installation) + * Docker compose v1.12 or higher. See [docs.docker.com/compose/install](https://docs.docker.com/compose/install/) + +Once you're done, simply `cd` to your project and run `docker-compose up -d`. This will initialise and start all the containers, then leave them running in the background. + +## Services exposed outside your environment ## + +You can access your application via **`localhost`**, if you're running the containers directly, or through **``** when run on a vm. nginx and mailhog both respond to any hostname, in case you want to add your own hostname on your `/etc/hosts` + +Service|Address outside containers +------|---------|----------- +Webserver|[localhost:5000](http://localhost:5000) + +## Hosts within your environment ## + +You'll need to configure your application to use any services you enabled: + +Service|Hostname|Port number +------|---------|----------- +php-fpm|php-fpm|9000 + +# Docker compose cheatsheet # + +**Note:** you need to cd first to where your docker-compose.yml file lives. + + * Start containers in the background: `docker-compose up -d` + * Start containers on the foreground: `docker-compose up`. You will see a stream of logs for every container running. + * Stop containers: `docker-compose stop` + * Kill containers: `docker-compose kill` + * View container logs: `docker-compose logs` + * Execute command inside of container: `docker-compose exec SERVICE_NAME COMMAND` where `COMMAND` is whatever you want to run. Examples: + * Shell into the PHP container, `docker-compose exec php-fpm bash` + * Run symfony console, `docker-compose exec php-fpm bin/console` + * Open a mysql shell, `docker-compose exec mysql mysql -uroot -pCHOSEN_ROOT_PASSWORD` + +# Recommendations # + +It's hard to avoid file permission issues when fiddling about with containers due to the fact that, from your OS point of view, any files created within the container are owned by the process that runs the docker engine (this is usually root). Different OS will also have different problems, for instance you can run stuff in containers using `docker exec -it -u $(id -u):$(id -g) CONTAINER_NAME COMMAND` to force your current user ID into the process, but this will only work if your host OS is Linux, not mac. Follow a couple of simple rules and save yourself a world of hurt. + + * Run composer outside of the php container, as doing so would install all your dependencies owned by `root` within your vendor folder. + * Run commands (ie Symfony's console, or Laravel's artisan) straight inside of your container. You can easily open a shell as described above and do your thing from there. diff --git a/backend/docker/nginx/nginx.conf b/backend/docker/nginx/nginx.conf new file mode 100644 index 00000000..61ca3756 --- /dev/null +++ b/backend/docker/nginx/nginx.conf @@ -0,0 +1,24 @@ +server { + listen 80 default; + + client_max_body_size 108M; + + access_log /var/log/nginx/application.access.log; + + root /application/public; + index index.php; + + if (!-e $request_filename) { + rewrite ^.*$ /index.php last; + } + + location ~ \.php$ { + fastcgi_pass php-fpm:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log"; + fastcgi_buffers 16 16k; + fastcgi_buffer_size 32k; + include fastcgi_params; + } +} diff --git a/backend/docker/php-fpm/Dockerfile b/backend/docker/php-fpm/Dockerfile new file mode 100644 index 00000000..1c4b9a95 --- /dev/null +++ b/backend/docker/php-fpm/Dockerfile @@ -0,0 +1,29 @@ +## Dev environment +FROM phpdockerio/php74-fpm:latest AS base +WORKDIR "/application" + +# Fix debconf warnings upon build +ARG DEBIAN_FRONTEND=noninteractive + +# Install selected extensions and other stuff +RUN apt-get update \ + && apt-get -y --no-install-recommends install php7.4-pgsql php7.4-apcu \ + && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* + +## Deployed environment +FROM base AS deployment + +ENV APP_ENV=prod + +COPY composer.* /application/ +RUN composer install --no-dev --prefer-dist --no-scripts ; \ + composer clear-cache + +ADD bin /application/bin +ADD public /application/public +ADD config /application/config +ADD src /application/src + +RUN mkdir -p /application/var/cache/prod; \ + composer dump-autoload --optimize --classmap-authoritative; \ + bin/console cache:warmup diff --git a/phpdocker/php-fpm/php-ini-overrides.ini b/backend/docker/php-fpm/php-ini-overrides.ini similarity index 100% rename from phpdocker/php-fpm/php-ini-overrides.ini rename to backend/docker/php-fpm/php-ini-overrides.ini diff --git a/backend/infection.json.dist b/backend/infection.json.dist new file mode 100644 index 00000000..7b766d56 --- /dev/null +++ b/backend/infection.json.dist @@ -0,0 +1,24 @@ +{ + "timeout": 10, + "source": { + "directories": [ + "src" + ], + "excludes": [ + "Certbot/ShellExec.php" + ] + }, + "logs": { + "text": "reports/infection/infection-log.txt" + }, + "mutators": { + "@default": true, + "IdenticalEqual": false, + "NotIdenticalNotEqual": false, + "FalseValue": { + "ignore": [ + "PhpDockerIo\\KongCertbot\\Certbot\\Handler::acquireCertificate" + ] + } + } +} \ No newline at end of file diff --git a/backend/phpstan.neon b/backend/phpstan.neon new file mode 100644 index 00000000..4763acb2 --- /dev/null +++ b/backend/phpstan.neon @@ -0,0 +1,4 @@ +parameters: + autoload_files: + - '%rootDir%/../../autoload.php' + diff --git a/backend/phpunit.xml b/backend/phpunit.xml new file mode 100644 index 00000000..14daef3e --- /dev/null +++ b/backend/phpunit.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + src + + + + + + tests/ + + + + + + + + + + + + + + + + + diff --git a/backend/public/index.php b/backend/public/index.php new file mode 100644 index 00000000..0e303701 --- /dev/null +++ b/backend/public/index.php @@ -0,0 +1,27 @@ +handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/tests/.gitkeep b/backend/reports/infection/.gitkeep similarity index 100% rename from tests/.gitkeep rename to backend/reports/infection/.gitkeep diff --git a/backend/src/App/Contact/Dispatcher.php b/backend/src/App/Contact/Dispatcher.php new file mode 100644 index 00000000..c3895e23 --- /dev/null +++ b/backend/src/App/Contact/Dispatcher.php @@ -0,0 +1,90 @@ +mailer = $mailer; + $this->twig = $twig; + $this->emailFrom = $emailFrom; + $this->emailTo = $emailTo; + } + + /** + * Sends a message. + * + * @param MessageInterface $message + * + * @throws DispatcherException + */ + public function send(MessageInterface $message): void + { + try { + $messageBody = $this->twig->render('contact-email.html.twig', [ + 'senderEmail' => $message->getEmail(), + 'message' => $message->getMessage(), + ]); + } catch (LoaderError|RuntimeError|SyntaxError $ex) { + throw new DispatcherException('Message composing error', $ex->getCode(), $ex); + } + + $swiftMessage = new Swift_Message(); + $swiftMessage + ->setSubject('PHPDocker.io - Contact request') + ->setFrom($this->emailFrom) + ->setReplyTo($message->getEmail()) + ->setTo($this->emailTo) + ->setBody($messageBody, 'text/html'); + + $this->mailer->send($swiftMessage); + } +} diff --git a/src/AppBundle/Entity/ContactRequest.php b/backend/src/App/Contact/Message.php similarity index 63% rename from src/AppBundle/Entity/ContactRequest.php rename to backend/src/App/Contact/Message.php index 1b03f110..b3bf7b08 100644 --- a/src/AppBundle/Entity/ContactRequest.php +++ b/backend/src/App/Contact/Message.php @@ -1,6 +1,7 @@ senderEmail; + return $this->email; } /** - * @param mixed $senderEmail + * @param string $email * - * @return ContactRequest + * @return Message */ - public function setSenderEmail(string $senderEmail) + public function setEmail(string $email): Message { - $this->senderEmail = $senderEmail; + $this->email = $email; return $this; } /** - * @return mixed + * @return string */ - public function getMessage(): ?string + public function getMessage(): string { return $this->message; } /** - * @param mixed $message + * @param string $message * - * @return ContactRequest + * @return Message */ - public function setMessage(string $message) + public function setMessage(string $message): Message { $this->message = $message; diff --git a/var/.gitkeep b/backend/src/App/Controller/.gitignore old mode 100755 new mode 100644 similarity index 100% rename from var/.gitkeep rename to backend/src/App/Controller/.gitignore diff --git a/backend/src/App/Controller/ContactController.php b/backend/src/App/Controller/ContactController.php new file mode 100644 index 00000000..20ab6e7f --- /dev/null +++ b/backend/src/App/Controller/ContactController.php @@ -0,0 +1,100 @@ +emailDispatcher = $emailDispatcher; + $this->serializer = $serializer; + $this->validator = $validator; + $this->logger = $logger; + } + + /** + * Endpoint for the contact page. + * + * @param Request $request + * + * @return JsonResponse + */ + public function process(Request $request): JsonResponse + { + try { + /** @var Message $message */ + $message = $this->serializer->deserialize($request->getContent(), Message::class, 'json'); + $violations = $this->validator->validate($message); + + if ($violations->count() > 0) { + return new ErrorResponse($violations, 400); + } + + $this->emailDispatcher->send($message); + } catch (NotEncodableValueException $ex) { + return new ErrorResponse([new Error('empty-body', 'Request body is empty')], 400); + } catch (DispatcherException $ex) { + $this->logger->error('Message dispatcher error', ['exception' => $ex]); + + return new ErrorResponse( + [new Error('server-error', 'There was a problem trying to send the message')], + 500 + ); + } + + return new JsonResponse(['success' => true]); + } +} diff --git a/backend/src/App/Controller/GeneratorController.php b/backend/src/App/Controller/GeneratorController.php new file mode 100644 index 00000000..01314691 --- /dev/null +++ b/backend/src/App/Controller/GeneratorController.php @@ -0,0 +1,137 @@ +liform = $liform; + $this->formFactory = $formFactory; + $this->generator = $generator; + } + + /** + * This endpoint provides with the generator form schema, as a JSON schema. + * + * @return JsonResponse + */ + public function getGeneratorOptions(): JsonResponse + { + $schema = $this->liform->transform($this->formFactory->create(ProjectType::class)); + + return new JsonResponse($schema); + } + + /** + * This endpoint processes form submission and project generation. + * + * @param Request $request + * + * @return Response + */ + public function generate(Request $request): Response + { + $project = new Project(); + $form = $this->formFactory->create(ProjectType::class, $project, ['csrf_protection' => false]); + + try { + $decoded = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR); + } catch (JsonException $ex) { + return new ErrorResponse([new Error('validation-error', 'Not valid json', '')], 400); + } + + $form->submit($decoded); + + if ($form->isValid() === true) { + // Generate zip file with docker project + $zipFile = $this->generator->generate($project); + $payload = [ + 'success' => true, + 'filename' => $zipFile->getFilename(), + 'base64Blob' => $zipFile->getBase64EncodedPayload(), + ]; + + $zipFile->delete(); + + return new JsonResponse($payload); + } + + return new ErrorResponse($this->getErrorsFromForm($form), 400); + } + + /** + * Given the submitted form, parse out all the errors and return as a list of Error + * + * @param FormInterface $form + * + * @return Error[] + */ + private function getErrorsFromForm(FormInterface $form): array + { + $errors = []; + foreach ($form->getErrors(true) as $error) { + $cause = $error->getCause(); + $propertyPath = $error->getOrigin()->getName(); + + if ($cause instanceof ConstraintViolation) { + $propertyPath = preg_replace('/^data\./', '', $cause->getPropertyPath()); + } + + $errors[] = new Error('validation-error', $error->getMessage(), $propertyPath); + } + + return $errors; + } +} diff --git a/backend/src/App/DataFixtures/LoadFixtures.php b/backend/src/App/DataFixtures/LoadFixtures.php new file mode 100644 index 00000000..dc64e2eb --- /dev/null +++ b/backend/src/App/DataFixtures/LoadFixtures.php @@ -0,0 +1,43 @@ +loadFile(__DIR__ . '/fixtures.yaml')->getObjects(); + foreach ($objectSet as $object) { + $manager->persist($object); + } + + $manager->flush(); + } +} diff --git a/backend/src/App/DataFixtures/fixtures.yaml b/backend/src/App/DataFixtures/fixtures.yaml new file mode 100644 index 00000000..026177ea --- /dev/null +++ b/backend/src/App/DataFixtures/fixtures.yaml @@ -0,0 +1,10 @@ +App\ORM\Category: + news: + title: News + +App\ORM\Post: + post{1..1000}: + category: '@news' + title: '' + bodyIntro: '' + body: '' diff --git a/src/AppBundle/Assert/ApplicationType.php b/backend/src/App/Generator/Assert/ApplicationType.php similarity index 84% rename from src/AppBundle/Assert/ApplicationType.php rename to backend/src/App/Generator/Assert/ApplicationType.php index 5380fad0..4fbf858b 100644 --- a/src/AppBundle/Assert/ApplicationType.php +++ b/backend/src/App/Generator/Assert/ApplicationType.php @@ -1,6 +1,7 @@ isEnabled(); } + + public function setVersion(?string $version): AbstractMySQL + { + if ($version !== null) { + $this->version = $version; + } + + return $this; + } + + public function setRootPassword(string $rootPassword = null): AbstractMySQL + { + $this->rootPassword = $rootPassword; + + return $this; + } + + public function setDatabaseName(string $databaseName = null): AbstractMySQL + { + $this->databaseName = $databaseName; + + return $this; + } + + public function setUsername(string $username = null): AbstractMySQL + { + $this->username = $username; + + return $this; + } + + public function setPassword(string $password = null): AbstractMySQL + { + $this->password = $password; + + return $this; + } } diff --git a/src/AppBundle/Entity/Generator/MySQLOptions.php b/backend/src/App/Generator/Entity/MySQLOptions.php similarity index 69% rename from src/AppBundle/Entity/Generator/MySQLOptions.php rename to backend/src/App/Generator/Entity/MySQLOptions.php index 176c48b1..98af93da 100644 --- a/src/AppBundle/Entity/Generator/MySQLOptions.php +++ b/backend/src/App/Generator/Entity/MySQLOptions.php @@ -1,6 +1,7 @@ isEnabled(); } + + public function setVersion(?string $version): AbstractMySQL + { + if ($version !== null) { + $this->version = $version; + } + + return $this; + } + + public function setRootPassword(string $rootPassword = null): AbstractMySQL + { + $this->rootPassword = $rootPassword; + + return $this; + } + + public function setDatabaseName(string $databaseName = null): AbstractMySQL + { + $this->databaseName = $databaseName; + + return $this; + } + + public function setUsername(string $username = null): AbstractMySQL + { + $this->username = $username; + + return $this; + } + + public function setPassword(string $password = null): AbstractMySQL + { + $this->password = $password; + + return $this; + } } diff --git a/src/AppBundle/Entity/Generator/PhpOptions.php b/backend/src/App/Generator/Entity/PhpOptions.php similarity index 95% rename from src/AppBundle/Entity/Generator/PhpOptions.php rename to backend/src/App/Generator/Entity/PhpOptions.php index 56219b71..b71bf320 100644 --- a/src/AppBundle/Entity/Generator/PhpOptions.php +++ b/backend/src/App/Generator/Entity/PhpOptions.php @@ -1,6 +1,7 @@ isEnabled(); } + + public function setVersion(?string $version): Postgres + { + if ($version !== null) { + $this->version = $version; + } + + return $this; + } + + public function setRootPassword(string $rootPassword): Postgres + { + $this->rootPassword = $rootPassword; + + return $this; + } + + public function setDatabaseName(string $databaseName): Postgres + { + $this->databaseName = $databaseName; + + return $this; + } + } diff --git a/src/AppBundle/Entity/Generator/Project.php b/backend/src/App/Generator/Entity/Project.php similarity index 80% rename from src/AppBundle/Entity/Generator/Project.php rename to backend/src/App/Generator/Entity/Project.php index e5da6f0b..a5e0037d 100644 --- a/src/AppBundle/Entity/Generator/Project.php +++ b/backend/src/App/Generator/Entity/Project.php @@ -1,6 +1,7 @@ applicationOptions = new ApplicationOptions(); $this->mysqlOptions = new MySQLOptions(); $this->mariadbOptions = new MariaDBOptions(); $this->postgresOptions = new PostgresOptions(); diff --git a/src/AppBundle/Form/Generator/AbstractGeneratorType.php b/backend/src/App/Generator/Form/AbstractGeneratorType.php similarity index 83% rename from src/AppBundle/Form/Generator/AbstractGeneratorType.php rename to backend/src/App/Generator/Form/AbstractGeneratorType.php index 2c4fa26e..93619ccf 100644 --- a/src/AppBundle/Form/Generator/AbstractGeneratorType.php +++ b/backend/src/App/Generator/Form/AbstractGeneratorType.php @@ -1,6 +1,7 @@ false, ]) ->add('version', ChoiceType::class, [ - 'choices' => array_flip(Elasticsearch::getChoices()), + 'choices' => array_flip(ElasticsearchOptions::getChoices()), 'expanded' => false, 'multiple' => false, 'label' => 'Version', @@ -68,7 +69,7 @@ protected function getDataClass(): string */ protected function getValidationGroups(): callable { - return function (FormInterface $form) { + return static function (FormInterface $form) { /** @var ElasticsearchOptions $data */ $data = $form->getData(); $groups = ['Default']; diff --git a/src/AppBundle/Form/Generator/MariaDBType.php b/backend/src/App/Generator/Form/MariaDBType.php similarity index 89% rename from src/AppBundle/Form/Generator/MariaDBType.php rename to backend/src/App/Generator/Form/MariaDBType.php index cc721383..ea3678ff 100644 --- a/src/AppBundle/Form/Generator/MariaDBType.php +++ b/backend/src/App/Generator/Form/MariaDBType.php @@ -1,6 +1,7 @@ getData(); $groups = ['Default']; diff --git a/src/AppBundle/Form/Generator/ProjectType.php b/backend/src/App/Generator/Form/ProjectType.php similarity index 84% rename from src/AppBundle/Form/Generator/ProjectType.php rename to backend/src/App/Generator/Form/ProjectType.php index e439bb8e..bef04dc9 100644 --- a/src/AppBundle/Form/Generator/ProjectType.php +++ b/backend/src/App/Generator/Form/ProjectType.php @@ -1,6 +1,7 @@ add('name', TextType::class, [ - 'label' => 'Project name', - 'attr' => ['placeholder' => 'Used on host, container, vm and folder names'], + 'label' => 'Project name', + 'attr' => ['placeholder' => 'Used on host, container, vm and folder names'], + 'empty_data' => '', ]) ->add('basePort', IntegerType::class, [ 'label' => 'Base port', - 'attr' => ['placeholder' => 'For nginx, Mailhog control panel...'], + 'attr' => ['placeholder' => 'Ports exposed on the different services will start at this port number'], ]) ->add('hasMemcached', CheckboxType::class, [ 'required' => false, @@ -70,6 +73,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('postgresOptions', PostgresType::class, ['label' => 'Postgres']) ->add('applicationOptions', ApplicationType::class, ['label' => 'Application options']) ->add('elasticsearchOptions', ElasticsearchType::class, ['label' => 'Elasticsearch']); + ; } /** diff --git a/backend/src/App/Http/Error.php b/backend/src/App/Http/Error.php new file mode 100644 index 00000000..b307b810 --- /dev/null +++ b/backend/src/App/Http/Error.php @@ -0,0 +1,83 @@ +code = $code; + $this->description = $description; + $this->property = $property; + } + + /** + * @return string + */ + public function getCode(): string + { + return $this->code; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @return string + */ + public function getProperty(): string + { + return $this->property; + } + + public function toArray(): array + { + return [ + 'code' => $this->code, + 'description' => $this->description, + 'property' => $this->property, + ]; + } +} diff --git a/backend/src/App/Http/ErrorResponse.php b/backend/src/App/Http/ErrorResponse.php new file mode 100644 index 00000000..baf5bfd3 --- /dev/null +++ b/backend/src/App/Http/ErrorResponse.php @@ -0,0 +1,64 @@ +toArray(); + break; + + case $error instanceof ConstraintViolationInterface: + $parsedErrors[] = (new Error( + 'validation-error', + $error->getMessage(), + $error->getPropertyPath() + ))->toArray(); + break; + + default: + throw new InvalidArgumentException('Unsupported error type'); + } + } + + parent::__construct(json_encode(['errors' => $parsedErrors]), $status, $headers, true); + } +} diff --git a/backend/src/App/Kernel.php b/backend/src/App/Kernel.php new file mode 100644 index 00000000..f5531b8a --- /dev/null +++ b/backend/src/App/Kernel.php @@ -0,0 +1,75 @@ +getProjectDir() . '/var/cache/' . $this->environment; + } + + public function getLogDir() + { + return $this->getProjectDir() . '/var/log'; + } + + public function registerBundles() + { + $contents = require $this->getProjectDir() . '/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) + { + $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir() . '/config'; + + $loader->load($confDir . '/{packages}/*' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{packages}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{services}' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{services}_' . $this->environment . self::CONFIG_EXTS, 'glob'); + } + + protected function configureRoutes(RouteCollectionBuilder $routes) + { + $confDir = $this->getProjectDir() . '/config'; + + $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/src/AppBundle/Entity/ORM/Category.php b/backend/src/App/ORM/Category.php similarity index 90% rename from src/AppBundle/Entity/ORM/Category.php rename to backend/src/App/ORM/Category.php index c76e10cc..fd6ef793 100644 --- a/src/AppBundle/Entity/ORM/Category.php +++ b/backend/src/App/ORM/Category.php @@ -1,6 +1,7 @@ postComments = new ArrayCollection(); - } - /** * @return string */ @@ -117,49 +106,6 @@ public function setSlug(string $slug): self return $this; } - /** - * @param PostComment $postComment - * - * @return self - */ - public function addPostComment(PostComment $postComment): self - { - $this->postComments[] = $postComment; - $postComment->setPost($this); - - return $this; - } - - /** - * @param PostComment $postComment - * - * @return self - */ - public function removePostComment(PostComment $postComment): self - { - $this->postComments->removeElement($postComment); - - return $this; - } - - /** - * @return Collection - */ - public function getPostComments(): Collection - { - return $this->postComments; - } - - /** - * Returns a count of all post comments associated to this post - * - * @return int - */ - public function getCountPostComments(): int - { - return $this->postComments->count(); - } - /** * @return Category */ diff --git a/src/AppBundle/Entity/ORM/PropertyTrait/ActiveTrait.php b/backend/src/App/ORM/PropertyTrait/ActiveTrait.php similarity index 86% rename from src/AppBundle/Entity/ORM/PropertyTrait/ActiveTrait.php rename to backend/src/App/ORM/PropertyTrait/ActiveTrait.php index a39460f4..ae100ffe 100644 --- a/src/AppBundle/Entity/ORM/PropertyTrait/ActiveTrait.php +++ b/backend/src/App/ORM/PropertyTrait/ActiveTrait.php @@ -1,6 +1,7 @@ id; } - - /** - * @param int $id - * - * @return self - */ - public function setId($id): self - { - $this->id = $id; - - return $this; - } } diff --git a/src/AppBundle/Entity/ORM/PropertyTrait/TimestampableTrait.php b/backend/src/App/ORM/PropertyTrait/TimestampableTrait.php similarity index 83% rename from src/AppBundle/Entity/ORM/PropertyTrait/TimestampableTrait.php rename to backend/src/App/ORM/PropertyTrait/TimestampableTrait.php index 4da0e467..eb0d1397 100644 --- a/src/AppBundle/Entity/ORM/PropertyTrait/TimestampableTrait.php +++ b/backend/src/App/ORM/PropertyTrait/TimestampableTrait.php @@ -1,6 +1,7 @@ createdAt = $createdAt; @@ -77,7 +80,7 @@ public function getUpdatedAt() * * @return self */ - public function setUpdatedAt(\DateTime $updatedAt): self + public function setUpdatedAt(DateTime $updatedAt): self { $this->updatedAt = $updatedAt; diff --git a/src/AppBundle/Entity/ORM/PropertyTrait/TitleTrait.php b/backend/src/App/ORM/PropertyTrait/TitleTrait.php similarity index 90% rename from src/AppBundle/Entity/ORM/PropertyTrait/TitleTrait.php rename to backend/src/App/ORM/PropertyTrait/TitleTrait.php index f2aa313e..3ce76617 100644 --- a/src/AppBundle/Entity/ORM/PropertyTrait/TitleTrait.php +++ b/backend/src/App/ORM/PropertyTrait/TitleTrait.php @@ -1,6 +1,7 @@ abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', + 'Migration can only be executed safely on \'postgresql\'.'); + + $this->addSql('CREATE SEQUENCE category_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE post_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE post_comment_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE category (id INT NOT NULL, slug VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE post (id INT NOT NULL, category_id INT NOT NULL, body_intro TEXT NOT NULL, slug VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, body TEXT NOT NULL, active BOOLEAN DEFAULT \'false\' NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_5A8A6C8D989D9B62 ON post (slug)'); + $this->addSql('CREATE INDEX IDX_5A8A6C8D12469DE2 ON post (category_id)'); + $this->addSql('CREATE TABLE post_comment (id INT NOT NULL, post_id INT NOT NULL, poster_name VARCHAR(255) NOT NULL, poster_url VARCHAR(255) DEFAULT NULL, body TEXT NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_A99CE55F4B89032C ON post_comment (post_id)'); + $this->addSql('ALTER TABLE post ADD CONSTRAINT FK_5A8A6C8D12469DE2 FOREIGN KEY (category_id) REFERENCES category (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE post_comment ADD CONSTRAINT FK_A99CE55F4B89032C FOREIGN KEY (post_id) REFERENCES post (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', + 'Migration can only be executed safely on \'postgresql\'.'); + + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE post DROP CONSTRAINT FK_5A8A6C8D12469DE2'); + $this->addSql('ALTER TABLE post_comment DROP CONSTRAINT FK_A99CE55F4B89032C'); + $this->addSql('DROP SEQUENCE category_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE post_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE post_comment_id_seq CASCADE'); + $this->addSql('DROP TABLE category'); + $this->addSql('DROP TABLE post'); + $this->addSql('DROP TABLE post_comment'); + } +} diff --git a/backend/src/PHPDocker/Contact/DispatcherException.php b/backend/src/PHPDocker/Contact/DispatcherException.php new file mode 100644 index 00000000..6cc9a363 --- /dev/null +++ b/backend/src/PHPDocker/Contact/DispatcherException.php @@ -0,0 +1,32 @@ +zipArchiver = $archiver; $this->twig = $twig; - $this->markdownExtra = $markdownExtra; + $this->markdownExtra = $markdown; + $this->slugifier = $slugifier; $this->zipArchiver->setBaseFolder(self::BASE_ZIP_FOLDER); } @@ -60,12 +64,12 @@ public function __construct(Archiver $archiver, \Twig_Environment $twig, Markdow /** * Generates all the files from the Project, and returns as an archive file. * - * @param Project $project - * - * @return ArchiveInterface + * @throws ArchiveNotCreatedException */ - public function generate(Project $project): ArchiveInterface + public function generate(Project $project): ZipFile { + $this->projectSlug = $this->slugifier->slugify($project->getName()); + $this ->zipArchiver ->addFile($this->getReadmeMd($project)) @@ -75,15 +79,15 @@ public function generate(Project $project): ArchiveInterface ->addFile($this->getNginxConf($project)) ->addFile($this->getDockerCompose($project), true); - return $this->zipArchiver->generateArchive(sprintf('%s.zip', $project->getProjectNameSlug())); + return $this->zipArchiver->generateArchive(sprintf('%s.zip', $this->projectSlug)); } /** * Generates the Readme file in Markdown format. * - * @param Project $project - * - * @return GeneratedFile\ReadmeMd + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getReadmeMd(Project $project): GeneratedFile\ReadmeMd { @@ -99,9 +103,9 @@ private function getReadmeMd(Project $project): GeneratedFile\ReadmeMd /** * Returns the HTML readme, converted off Markdown. * - * @param Project $project - * - * @return GeneratedFile\ReadmeHtml + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getReadmeHtml(Project $project): GeneratedFile\ReadmeHtml { @@ -118,16 +122,17 @@ private function getReadmeHtml(Project $project): GeneratedFile\ReadmeHtml /** * Generates the docker-compose file, and returns as a string of its contents. * - * @param Project $project - * * @return GeneratedFile\DockerCompose + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getDockerCompose(Project $project): GeneratedFile\DockerCompose { $data = [ 'phpVersion' => $project->getPhpOptions()->getVersion(), 'phpIniOverrides' => (new GeneratedFile\PhpIniOverrides(''))->getFilename(), - 'slug' => $project->getProjectNameSlug(), + 'slug' => $this->projectSlug, 'project' => $project, ]; @@ -142,9 +147,9 @@ private function getDockerCompose(Project $project): GeneratedFile\DockerCompose /** * Returns the dockerfile for php-fpm. * - * @param Project $project - * - * @return GeneratedFile\PhpDockerConf + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getPhpDockerConf(Project $project): GeneratedFile\PhpDockerConf { @@ -170,13 +175,16 @@ private function getPhpDockerConf(Project $project): GeneratedFile\PhpDockerConf /** * Returns the contents of php.ini * - * @param Project $project - * - * @return GeneratedFile\PhpIniOverrides + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getPhpIniOverrides(Project $project): GeneratedFile\PhpIniOverrides { - $data = ['maxUploadSize' => $project->getApplicationOptions()->getUploadSize()]; + $data = [ + 'maxUploadSize' => $project->getApplicationOptions()->getUploadSize(), + 'xdebugEnabled' => true, // @todo + ]; return new GeneratedFile\PhpIniOverrides($this->twig->render('php-ini-overrides.ini.twig', $data)); } @@ -184,15 +192,15 @@ private function getPhpIniOverrides(Project $project): GeneratedFile\PhpIniOverr /** * Generates and returns the nginx.conf file. * - * @param Project $project - * - * @return GeneratedFile\NginxConf + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ private function getNginxConf(Project $project): GeneratedFile\NginxConf { $data = [ 'projectName' => $project->getName(), - 'projectNameSlug' => $project->getProjectNameSlug(), + 'projectNameSlug' => $this->projectSlug, 'applicationType' => $project->getApplicationOptions()->getApplicationType(), 'maxUploadSize' => $project->getApplicationOptions()->getUploadSize(), ]; diff --git a/src/PHPDocker/Template/README.html.twig b/backend/src/PHPDocker/Generator/templates/README.html.twig similarity index 79% rename from src/PHPDocker/Template/README.html.twig rename to backend/src/PHPDocker/Generator/templates/README.html.twig index 33c25d95..7c219f7c 100644 --- a/src/PHPDocker/Template/README.html.twig +++ b/backend/src/PHPDocker/Generator/templates/README.html.twig @@ -23,10 +23,10 @@ diff --git a/src/PHPDocker/Template/README.md.twig b/backend/src/PHPDocker/Generator/templates/README.md.twig similarity index 92% rename from src/PHPDocker/Template/README.md.twig rename to backend/src/PHPDocker/Generator/templates/README.md.twig index 885e6e62..971e76e3 100644 --- a/src/PHPDocker/Template/README.md.twig +++ b/backend/src/PHPDocker/Generator/templates/README.md.twig @@ -20,7 +20,7 @@ Once you're done, simply `cd` to your project and run `docker-compose up -d`. Th ## Services exposed outside your environment ## -You can access your application via **`localhost`**, if you're running the containers directly, or through **`{{ vmIpAddress }}`** when run on a vm. nginx and mailhog both respond to any hostname, in case you want to add your own hostname on your `/etc/hosts` +You can access your application via **`localhost`**. nginx and mailhog both respond to any hostname, in case you want to add your own hostname on your `/etc/hosts` Service|Address outside containers ------|---------|----------- @@ -38,7 +38,7 @@ Service|Hostname|Port number php-fpm|php-fpm|9000 {% if project.hasMysql() %}MySQL|mysql|3306 (default){{ "\n" }}{% endif %} {% if project.hasMariadb() %}MariaDB|mariadb|3306 (default){{ "\n" }}{% endif %} -{% if project.hasPosgres() %}Postgres|postgres|5432 (default){{ "\n" }}{% endif %} +{% if project.hasPostgres() %}Postgres|postgres|5432 (default){{ "\n" }}{% endif %} {% if project.hasMemcached() %}Memcached|memcached|11211 (default){{ "\n" }}{% endif %} {% if project.hasRedis() %}Redis|redis|6379 (default){{ "\n" }}{% endif %} {% if project.hasElasticsearch() %}Elasticsearch|elasticsearch|9200 (HTTP default) / 9300 (ES transport default){{ "\n" }}{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/clickhouse.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/clickhouse.yml.twig new file mode 100644 index 00000000..3b32a69d --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/clickhouse.yml.twig @@ -0,0 +1,4 @@ +{% if project.hasClickhouse() %} + clickhouse: + image: yandex/clickhouse-server:latest +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/elasticsearch.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/elasticsearch.yml.twig new file mode 100644 index 00000000..03bf92c5 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/elasticsearch.yml.twig @@ -0,0 +1,4 @@ +{% if project.hasElasticsearch() %} + elasticsearch: + image: elasticsearch:{{ elasticsearch.getVersion() }} +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mailhog.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mailhog.yml.twig new file mode 100644 index 00000000..37c93eba --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mailhog.yml.twig @@ -0,0 +1,6 @@ +{% if project.hasMailhog() %} + mailhog: + image: mailhog/mailhog:latest + ports: + - "{{ project.getBasePort() + 1 }}:8025" +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mariadb.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mariadb.yml.twig new file mode 100644 index 00000000..64a1cd45 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mariadb.yml.twig @@ -0,0 +1,14 @@ +{% if project.hasMariadb() %} + mariadb: + image: mariadb:{{ mariadb.getVersion() }} + working_dir: /application + volumes: + - .:/application + environment: + - MYSQL_ROOT_PASSWORD={{ mariadb.getRootPassword() }} + - MYSQL_DATABASE={{ mariadb.getDatabaseName() }} + - MYSQL_USER={{ mariadb.getUsername() }} + - MYSQL_PASSWORD={{ mariadb.getPassword() }} + ports: + - "{{ project.getBasePort() + 3 }}:3306" +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/memcached.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/memcached.yml.twig new file mode 100644 index 00000000..a0ecb0dd --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/memcached.yml.twig @@ -0,0 +1,4 @@ +{% if project.hasMemcached() %} + memcached: + image: memcached:alpine +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mysql.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mysql.yml.twig new file mode 100644 index 00000000..dca70255 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/mysql.yml.twig @@ -0,0 +1,14 @@ +{% if project.hasMysql() %} + mysql: + image: mysql:{{ mysql.getVersion() }} + working_dir: /application + volumes: + - .:/application + environment: + - MYSQL_ROOT_PASSWORD={{ mysql.getRootPassword() }} + - MYSQL_DATABASE={{ mysql.getDatabaseName() }} + - MYSQL_USER={{ mysql.getUsername() }} + - MYSQL_PASSWORD={{ mysql.getPassword() }} + ports: + - "{{ project.getBasePort() + 2 }}:3306" +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/php-fpm.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/php-fpm.yml.twig new file mode 100644 index 00000000..eb53fd51 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/php-fpm.yml.twig @@ -0,0 +1,19 @@ +{% apply spaceless %} +{% if phpVersion == '7.0.x' %} +{% set iniLocation = '/etc/php/7.0/fpm/conf.d/' %} +{% elseif phpVersion == '7.1.x' %} +{% set iniLocation = '/etc/php/7.1/fpm/conf.d/' %} +{% elseif phpVersion == '7.2.x' %} +{% set iniLocation = '/etc/php/7.2/fpm/conf.d/' %} +{% elseif phpVersion == '7.3.x' %} +{% set iniLocation = '/etc/php/7.3/fpm/conf.d/' %} +{% else %} +{% set iniLocation = '/etc/php5/fpm/conf.d/' %} +{% endif %} +{% endapply %} + php-fpm: + build: phpdocker/php-fpm + working_dir: /application + volumes: + - .:/application + - ./phpdocker/{{ phpIniOverrides }}:{{ iniLocation }}99-overrides.ini diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/postgres.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/postgres.yml.twig new file mode 100644 index 00000000..e12917f5 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/postgres.yml.twig @@ -0,0 +1,11 @@ +{% if project.hasPostgres() %} + postgres: + image: postgres:{{ postgres.getVersion() }}-alpine + working_dir: /application + volumes: + - .:/application + environment: + - POSTGRES_USER={{ postgres.getRootUser() }} + - POSTGRES_PASSWORD={{ postgres.getRootPassword() }} + - POSTGRES_DB={{ postgres.getDatabaseName() }} +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/redis.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/redis.yml.twig new file mode 100644 index 00000000..6acf958f --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/redis.yml.twig @@ -0,0 +1,4 @@ +{% if project.hasRedis() %} + redis: + image: redis:alpine +{% endif %} diff --git a/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/webserver.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/webserver.yml.twig new file mode 100644 index 00000000..6013553f --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/docker-compose-fragments/webserver.yml.twig @@ -0,0 +1,8 @@ + webserver: + image: nginx:alpine + working_dir: /application + volumes: + - .:/application + - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf + ports: + - "{{ project.getBasePort() }}:80" diff --git a/src/PHPDocker/Template/docker-compose.yml.twig b/backend/src/PHPDocker/Generator/templates/docker-compose.yml.twig similarity index 99% rename from src/PHPDocker/Template/docker-compose.yml.twig rename to backend/src/PHPDocker/Generator/templates/docker-compose.yml.twig index 34540ff7..d62b4c72 100644 --- a/src/PHPDocker/Template/docker-compose.yml.twig +++ b/backend/src/PHPDocker/Generator/templates/docker-compose.yml.twig @@ -3,7 +3,6 @@ ############################################################################### version: "3.1" services: - {% include 'docker-compose-fragments/memcached.yml.twig' %} {% include 'docker-compose-fragments/mailhog.yml.twig' %} diff --git a/backend/src/PHPDocker/Generator/templates/dockerfile-php-fpm.conf.twig b/backend/src/PHPDocker/Generator/templates/dockerfile-php-fpm.conf.twig new file mode 100644 index 00000000..86e198dc --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/dockerfile-php-fpm.conf.twig @@ -0,0 +1,54 @@ +{% set cleanupCommand = 'apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*' %} +{% apply spaceless %} + {% if phpVersion == '7.0.x' %} + {% set image = 'phpdockerio/php7-fpm:latest' %} + {% elseif phpVersion == '7.1.x' %} + {% set image = 'phpdockerio/php71-fpm:latest' %} + {% elseif phpVersion == '7.2.x' %} + {% set image = 'phpdockerio/php72-fpm:latest' %} + {% elseif phpVersion == '7.3.x' %} + {% set image = 'phpdockerio/php73-fpm:latest' %} + {% else %} + {% set image = 'phpdockerio/php56-fpm:latest' %} + {% endif %} + FROM {{ image }} + WORKDIR "/application" + + # Fix debconf warnings upon build + ARG DEBIAN_FRONTEND=noninteractive + + {% if extensionPackages %} + # Install selected extensions and other stuff + RUN apt-get update \ + && apt-get -y --no-install-recommends install {% for package in extensionPackages %} {{ package }}{% endfor %} \ + && {{ cleanupCommand }} + {% endif %} + + {% if hasGit %} + # Install git + RUN apt-get update \ + && apt-get -y install git \ + && {{ cleanupCommand }} + {% endif %} + + {% if applicationType == 'phalcon' %} + {% apply spaceless %} + {% if phpVersion == '5.6.x' %} + {% set phalconPackage = 'php5-phalcon' %} + {% elseif phpVersion == '7.0.x' %} + {% set phalconPackage = 'php7.0-phalcon' %} + {% elseif phpVersion == '7.1.x' %} + {% set phalconPackage = 'php7.1-phalcon' %} + {% elseif phpVersion == '7.2.x' %} + {% set phalconPackage = 'php7.2-phalcon' %} + {% elseif phpVersion == '7.3.x' %} + {% set phalconPackage = 'php7.3-phalcon' %} + {% endif %} + {% endapply %} + + # Install phalcon + RUN curl -s https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh | bash \ + && apt-get install -y {{ phalconPackage }} \ + && {{ cleanupCommand }} + {% endif %} +{% endapply %} diff --git a/src/PHPDocker/Template/nginx.conf.twig b/backend/src/PHPDocker/Generator/templates/nginx.conf.twig similarity index 53% rename from src/PHPDocker/Template/nginx.conf.twig rename to backend/src/PHPDocker/Generator/templates/nginx.conf.twig index 9fa5ed57..c5627646 100644 --- a/src/PHPDocker/Template/nginx.conf.twig +++ b/backend/src/PHPDocker/Generator/templates/nginx.conf.twig @@ -1,34 +1,34 @@ server { - listen 80 default; +listen 80 default; - client_max_body_size {{ maxUploadSize + 8 }}M; +client_max_body_size {{ maxUploadSize + 8 }}M; - access_log /var/log/nginx/application.access.log; +access_log /var/log/nginx/application.access.log; {% if applicationType == 'symfony' or applicationType == 'silex' %} - {% spaceless %} + {% apply spaceless %} {% if applicationType == 'symfony' %} {% set indexFile = 'app' %} {% else %} {% set indexFile = 'index' %} {% endif %} - root /application/web; - - rewrite ^/{{ indexFile }}\.php/?(.*)$ /$1 permanent; - - try_files $uri @rewriteapp; - - location @rewriteapp { + root /application/web; + + rewrite ^/{{ indexFile }}\.php/?(.*)$ /$1 permanent; + + try_files $uri @rewriteapp; + + location @rewriteapp { rewrite ^(.*)$ /{{ indexFile }}.php/$1 last; - } - - # Deny all . files - location ~ /\. { + } + + # Deny all . files + location ~ /\. { deny all; - } - - location ~ ^/({{ indexFile }}|{{ indexFile }}_dev)\.php(/|$) { + } + + location ~ ^/({{ indexFile }}|{{ indexFile }}_dev)\.php(/|$) { fastcgi_pass php-fpm:9000; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_index {{ indexFile }}.php; @@ -39,34 +39,39 @@ server { fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; include fastcgi_params; - } - - # Statics + } + + # Statics location /(bundles|media) { access_log off; expires 30d; try_files $uri @rewriteapp; - } + } - {% endspaceless %} + {% endapply %} {% else %} root /application/public; index index.php; + # try to serve file directly, fallback to index.php + location / { + try_files $uri /index.php$is_args$args; + } + if (!-e $request_filename) { rewrite ^.*$ /index.php last; } location ~ \.php$ { - fastcgi_pass php-fpm:9000; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log"; - fastcgi_buffers 16 16k; - fastcgi_buffer_size 32k; - include fastcgi_params; + fastcgi_pass php-fpm:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log"; + fastcgi_buffers 16 16k; + fastcgi_buffer_size 32k; + include fastcgi_params; } - + {% endif %} } diff --git a/backend/src/PHPDocker/Generator/templates/php-ini-overrides.ini.twig b/backend/src/PHPDocker/Generator/templates/php-ini-overrides.ini.twig new file mode 100644 index 00000000..da3cdd42 --- /dev/null +++ b/backend/src/PHPDocker/Generator/templates/php-ini-overrides.ini.twig @@ -0,0 +1,16 @@ +upload_max_filesize = {{ maxUploadSize }}M +post_max_size = {{ maxUploadSize + 8 }}M + +{% if xdebugEnabled %} +; Instead of hardcoding the machine IP, we use this hostname. +xdebug.remote_host=host.docker.internal +xdebug.remote_port=9001 +xdebug.remote_enable=1 +xdebug.remote_autostart=0 + +; Very important for Docker to be set to off or else the debug won't work +xdebug.remote_connect_back=0 +xdebug.remote_mode=req +xdebug.idekey=PHPSTORM +xdebug.remote_log=/tmp/xdebug.log +{% endif %} diff --git a/src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php b/backend/src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php similarity index 80% rename from src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php rename to backend/src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php index 00e1b0ff..2ea5eda0 100644 --- a/src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php +++ b/backend/src/PHPDocker/PhpExtension/AvailableExtensionsFactory.php @@ -1,4 +1,5 @@ Php56AvailableExtensions::class, self::PHP_VERSION_70 => Php70AvailableExtensions::class, self::PHP_VERSION_71 => Php71AvailableExtensions::class, @@ -71,7 +74,7 @@ class AvailableExtensionsFactory public static function create(string $phpVersion) { if (array_key_exists($phpVersion, self::SUPPORTED_VERSIONS) === false) { - throw new \InvalidArgumentException(sprintf('PHP version specified (%s) is unsupported', $phpVersion)); + throw new InvalidArgumentException(sprintf('PHP version specified (%s) is unsupported', $phpVersion)); } $className = self::SUPPORTED_VERSIONS[$phpVersion]; diff --git a/src/PHPDocker/PhpExtension/BaseAvailableExtensions.php b/backend/src/PHPDocker/PhpExtension/BaseAvailableExtensions.php similarity index 98% rename from src/PHPDocker/PhpExtension/BaseAvailableExtensions.php rename to backend/src/PHPDocker/PhpExtension/BaseAvailableExtensions.php index eebb126b..992ea43c 100644 --- a/src/PHPDocker/PhpExtension/BaseAvailableExtensions.php +++ b/backend/src/PHPDocker/PhpExtension/BaseAvailableExtensions.php @@ -1,4 +1,5 @@ isAvailable($name) === false) { throw new Exception\NotFoundException(sprintf('PHP extension %s is not available to install', $name)); } diff --git a/src/PHPDocker/PhpExtension/Exception/NotFoundException.php b/backend/src/PHPDocker/PhpExtension/Exception/NotFoundException.php similarity index 90% rename from src/PHPDocker/PhpExtension/Exception/NotFoundException.php rename to backend/src/PHPDocker/PhpExtension/Exception/NotFoundException.php index 3bc5a18d..a2b5ce71 100644 --- a/src/PHPDocker/PhpExtension/Exception/NotFoundException.php +++ b/backend/src/PHPDocker/PhpExtension/Exception/NotFoundException.php @@ -1,4 +1,5 @@ ['packages' => ['php5-libvirt-php']], 'MapServer' => ['packages' => ['php5-mapscript']], 'Memcache' => ['packages' => ['php5-memcache']], - 'MessagePack' => ['packages' => ['php5-msgpack']], + 'MessagePack/msgpack' => ['packages' => ['php5-msgpack']], 'OAuth 1.0' => ['packages' => ['php5-oauth']], 'ODBC' => ['packages' => ['php5-odbc']], 'PECL radius' => ['packages' => ['php5-radius']], diff --git a/backend/src/PHPDocker/PhpExtension/Php70AvailableExtensions.php b/backend/src/PHPDocker/PhpExtension/Php70AvailableExtensions.php new file mode 100644 index 00000000..6445f5d2 --- /dev/null +++ b/backend/src/PHPDocker/PhpExtension/Php70AvailableExtensions.php @@ -0,0 +1,92 @@ + ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getMandatoryExtensionsMap(): array + { + return [ + 'APC' => ['packages' => ['php7.0-apcu', 'php7.0-apcu-bc']], + 'cURL' => ['packages' => ['php7.0-curl']], + 'JSON' => ['packages' => ['php7.0-json']], + 'MBSTRING' => ['packages' => ['php7.0-mbstring']], + 'MCrypt' => ['packages' => ['php7.0-mcrypt']], + 'OPCache' => ['packages' => ['php7.0-opcache']], + 'Readline' => ['packages' => ['php7.0-readline']], + 'XML' => ['packages' => ['php7.0-xml']], + 'Zip' => ['packages' => ['php7.0-zip']], + ]; + } + + /** + * Must return an array of all available optional extensions, indexed by display name + * and containing an array of ['packages' => ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getOptionalExtensionsMap(): array + { + return [ + 'Memcached' => ['packages' => ['php7.0-memcached']], + 'MongoDB' => ['packages' => ['php7.0-mongodb']], + 'MySQL' => ['packages' => ['php7.0-mysql']], + 'PostgreSQL' => ['packages' => ['php7.0-pgsql']], + 'Redis' => ['packages' => ['php7.0-redis']], + 'SQLite3' => ['packages' => ['php7.0-sqlite3']], + 'bz2' => ['packages' => ['php7.0-bz2']], + 'dbg' => ['packages' => ['php7.0-dbg']], + 'Enchant' => ['packages' => ['php7.0-enchant']], + 'GD' => ['packages' => ['php7.0-gd']], + 'Geoip' => ['packages' => ['php7.0-geoip']], + 'GMP' => ['packages' => ['php7.0-gmp']], + 'igbinary' => ['packages' => ['php7.0-igbinary']], + 'ImageMagick' => ['packages' => ['php7.0-imagick']], + 'IMAP' => ['packages' => ['php7.0-imap']], + 'Interbase' => ['packages' => ['php7.0-interbase']], + 'Intl' => ['packages' => ['php7.0-intl']], + 'LDAP' => ['packages' => ['php7.0-ldap']], + 'MessagePack/msgpack' => ['packages' => ['php7.0-msgpack']], + 'ODBC' => ['packages' => ['php7.0-odbc']], + 'PHPDBG' => ['packages' => ['php7.0-phpdbg']], + 'PSpell' => ['packages' => ['php7.0-pspell']], + 'Recode' => ['packages' => ['php7.0-recode']], + 'SNMP' => ['packages' => ['php7.0-snmp']], + 'SOAP' => ['packages' => ['php7.0-soap']], + 'SSH2' => ['packages' => ['php7.0-ssh2']], + 'Sybase' => ['packages' => ['php7.0-sybase']], + 'Tidy' => ['packages' => ['php7.0-tidy']], + 'XDebug' => ['packages' => ['php7.0-xdebug']], + 'XMLRPC-EPI' => ['packages' => ['php7.0-xmlrpc']], + 'XSL' => ['packages' => ['php7.0-xsl']], + ]; + } +} diff --git a/backend/src/PHPDocker/PhpExtension/Php71AvailableExtensions.php b/backend/src/PHPDocker/PhpExtension/Php71AvailableExtensions.php new file mode 100644 index 00000000..08a9c00f --- /dev/null +++ b/backend/src/PHPDocker/PhpExtension/Php71AvailableExtensions.php @@ -0,0 +1,98 @@ + ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getMandatoryExtensionsMap(): array + { + return [ + 'cURL' => ['packages' => ['php7.1-curl']], + 'JSON' => ['packages' => ['php7.1-json']], + 'MBSTRING' => ['packages' => ['php7.1-mbstring']], + 'MCrypt' => ['packages' => ['php7.1-mcrypt']], + 'OPCache' => ['packages' => ['php7.1-opcache']], + 'Readline' => ['packages' => ['php7.1-readline']], + 'Sodium' => ['packages' => ['php-sodium']], + 'XML' => ['packages' => ['php7.1-xml']], + 'Zip' => ['packages' => ['php7.1-zip']], + ]; + } + + /** + * Must return an array of all available optional extensions, indexed by display name + * and containing an array of ['packages' => ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getOptionalExtensionsMap(): array + { + return [ + 'Memcached' => ['packages' => ['php-memcached']], + 'MySQL' => ['packages' => ['php7.1-mysql']], + 'PostgreSQL' => ['packages' => ['php7.1-pgsql']], + 'Redis' => ['packages' => ['php-redis']], + 'SQLite3' => ['packages' => ['php7.1-sqlite3']], + 'Bcmath' => ['packages' => ['php7.1-bcmath']], + 'bz2' => ['packages' => ['php7.1-bz2']], + 'DBA' => ['packages' => ['php7.1-dba']], + 'Enchant' => ['packages' => ['php7.1-enchant']], + 'GD' => ['packages' => ['php7.1-gd']], + 'Gearman' => ['packages' => ['php-gearman']], + 'GMP' => ['packages' => ['php7.1-gmp']], + 'igbinary' => ['packages' => ['php-igbinary']], + 'IMAP' => ['packages' => ['php7.1-imap']], + 'ImageMagick' => ['packages' => ['php-imagick']], + 'Interbase' => ['packages' => ['php7.1-interbase']], + 'Intl' => ['packages' => ['php7.1-intl']], + 'LDAP' => ['packages' => ['php7.1-ldap']], + 'MongoDB' => ['packages' => ['php-mongodb']], + 'MessagePack/msgpack' => ['packages' => ['php-msgpack']], + 'ODBC' => ['packages' => ['php7.1-odbc']], + 'PHPDBG' => ['packages' => ['php7.1-phpdbg']], + 'PSpell' => ['packages' => ['php7.1-pspell']], + 'raphf' => ['packages' => ['php-raphf']], + 'Recode' => ['packages' => ['php7.1-recode']], + 'SNMP' => ['packages' => ['php7.1-snmp']], + 'SOAP' => ['packages' => ['php7.1-soap']], + 'SSH2' => ['packages' => ['php-ssh2']], + 'Sybase' => ['packages' => ['php7.1-sybase']], + 'Tidy' => ['packages' => ['php7.1-tidy']], + 'XMLRPC-EPI' => ['packages' => ['php7.1-xmlrpc']], + 'XSL' => ['packages' => ['php7.1-xsl']], + 'YAML' => ['packages' => ['php-yaml']], + 'Tideways' => ['packages' => ['php-tideways']], + 'Xhprof' => ['packages' => ['php-xhprof']], + 'Xdebug' => ['packages' => ['php-xdebug']], + 'ZeroMQ' => ['packages' => ['php-zmq']], + ]; + } +} diff --git a/backend/src/PHPDocker/PhpExtension/Php72AvailableExtensions.php b/backend/src/PHPDocker/PhpExtension/Php72AvailableExtensions.php new file mode 100644 index 00000000..3138c55f --- /dev/null +++ b/backend/src/PHPDocker/PhpExtension/Php72AvailableExtensions.php @@ -0,0 +1,105 @@ + ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getMandatoryExtensionsMap(): array + { + return [ + 'cURL' => ['packages' => ['php7.2-curl']], + 'JSON' => ['packages' => ['php7.2-json']], + 'MBSTRING' => ['packages' => ['php7.2-mbstring']], + 'OPCache' => ['packages' => ['php7.2-opcache']], + 'Readline' => ['packages' => ['php7.2-readline']], + 'Sodium' => ['packages' => ['php7.2-sodium']], + 'XML' => ['packages' => ['php7.2-xml']], + 'Zip' => ['packages' => ['php7.2-zip']], + ]; + } + + /** + * Must return an array of all available optional extensions, indexed by display name + * and containing an array of ['packages' => ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getOptionalExtensionsMap(): array + { + return [ + 'Memcached' => ['packages' => ['php-memcached']], + 'MySQL' => ['packages' => ['php7.2-mysql']], + 'PostgreSQL' => ['packages' => ['php7.2-pgsql']], + 'Redis' => ['packages' => ['php-redis']], + 'SQLite3' => ['packages' => ['php7.2-sqlite3']], + 'XDebug' => ['packages' => ['php-xdebug']], + 'Bcmath' => ['packages' => ['php7.2-bcmath']], + 'bz2' => ['packages' => ['php7.2-bz2']], + 'DBA' => ['packages' => ['php7.2-dba']], + 'Enchant' => ['packages' => ['php7.2-enchant']], + 'GD' => ['packages' => ['php7.2-gd']], + 'Gearman' => ['packages' => ['php-gearman']], + 'GMP' => ['packages' => ['php7.2-gmp']], + 'igbinary' => ['packages' => ['php-igbinary']], + 'ImageMagick' => ['packages' => ['php-imagick']], + 'IMAP' => ['packages' => ['php7.2-imap']], + 'Interbase' => ['packages' => ['php7.2-interbase']], + 'Intl' => ['packages' => ['php7.2-intl']], + 'LDAP' => ['packages' => ['php7.2-ldap']], + 'MongoDB' => ['packages' => ['php-mongodb']], + 'MessagePack/msgpack' => ['packages' => ['php-msgpack']], + 'ODBC' => ['packages' => ['php7.2-odbc']], + 'PHPDBG' => ['packages' => ['php7.2-phpdbg']], + 'PSpell' => ['packages' => ['php7.2-pspell']], + 'raphf' => ['packages' => ['php-raphf']], + 'Recode' => ['packages' => ['php7.2-recode']], + 'SNMP' => ['packages' => ['php7.2-snmp']], + 'SOAP' => ['packages' => ['php7.2-soap']], + 'SSH2' => ['packages' => ['php-ssh2']], + 'Sybase' => ['packages' => ['php7.2-sybase']], + 'Tideways' => ['packages' => ['php-tideways']], + 'Tidy' => ['packages' => ['php7.2-tidy']], + 'XMLRPC-EPI' => ['packages' => ['php7.2-xmlrpc']], + 'XSL' => ['packages' => ['php7.2-xsl']], + 'YAML' => ['packages' => ['php-yaml']], + 'ZeroMQ' => ['packages' => ['php-zmq']], + + // Disabled (not yet on php72 or broken) + + // libgearman broken (libgearman8 not on repos) + // + + // Installs php56 + // 'Xhprof' => ['packages' => ['php-xhprof']], + + ]; + } +} diff --git a/backend/src/PHPDocker/PhpExtension/Php73AvailableExtensions.php b/backend/src/PHPDocker/PhpExtension/Php73AvailableExtensions.php new file mode 100644 index 00000000..e646af57 --- /dev/null +++ b/backend/src/PHPDocker/PhpExtension/Php73AvailableExtensions.php @@ -0,0 +1,101 @@ + ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getMandatoryExtensionsMap(): array + { + return [ + 'cURL' => ['packages' => ['php-curl']], + 'JSON' => ['packages' => ['php-json']], + 'MBSTRING' => ['packages' => ['php-mbstring']], + 'OPCache' => ['packages' => ['php-opcache']], + 'Readline' => ['packages' => ['php-readline']], + 'Sodium' => ['packages' => ['php-sodium']], + 'XML' => ['packages' => ['php-xml']], + 'Zip' => ['packages' => ['php-zip']], + ]; + } + + /** + * Must return an array of all available optional extensions, indexed by display name + * and containing an array of ['packages' => ['deb-package-1', 'deb-package-2' ...] + * + * @return array + */ + protected function getOptionalExtensionsMap(): array + { + return [ + 'Memcached' => ['packages' => ['php-memcached']], + 'MySQL' => ['packages' => ['php7.3-mysql']], + 'PostgreSQL' => ['packages' => ['php7.3-pgsql']], + 'Redis' => ['packages' => ['php-redis']], + 'SQLite3' => ['packages' => ['php7.3-sqlite3']], + 'XDebug' => ['packages' => ['php-xdebug']], + 'Bcmath' => ['packages' => ['php7.3-bcmath']], + 'bz2' => ['packages' => ['php7.3-bz2']], + 'DBA' => ['packages' => ['php7.3-dba']], + 'Enchant' => ['packages' => ['php7.3-enchant']], + 'GD' => ['packages' => ['php7.3-gd']], + 'Gearman' => ['packages' => ['php-gearman']], + 'GMP' => ['packages' => ['php7.3-gmp']], + 'igbinary' => ['packages' => ['php-igbinary']], + 'ImageMagick' => ['packages' => ['php-imagick']], + 'IMAP' => ['packages' => ['php7.3-imap']], + 'Interbase' => ['packages' => ['php7.3-interbase']], + 'Intl' => ['packages' => ['php7.3-intl']], + 'LDAP' => ['packages' => ['php7.3-ldap']], + 'MongoDB' => ['packages' => ['php-mongodb']], + 'MessagePack/msgpack' => ['packages' => ['php-msgpack']], + 'ODBC' => ['packages' => ['php7.3-odbc']], + 'PHPDBG' => ['packages' => ['php7.3-phpdbg']], + 'PSpell' => ['packages' => ['php7.3-pspell']], + 'raphf' => ['packages' => ['php-raphf']], + 'Recode' => ['packages' => ['php7.3-recode']], + 'SNMP' => ['packages' => ['php7.3-snmp']], + 'SOAP' => ['packages' => ['php7.3-soap']], + 'SSH2' => ['packages' => ['php-ssh2']], + 'Sybase' => ['packages' => ['php7.3-sybase']], + 'Tideways' => ['packages' => ['php-tideways']], + 'Tidy' => ['packages' => ['php7.3-tidy']], + 'XMLRPC-EPI' => ['packages' => ['php7.3-xmlrpc']], + 'XSL' => ['packages' => ['php7.3-xsl']], + 'YAML' => ['packages' => ['php-yaml']], + 'ZeroMQ' => ['packages' => ['php-zmq']], + + // Disabled (not yet on php73 or broken) + + // Installs php56 + // 'Xhprof' => ['packages' => ['php-xhprof']], + ]; + } +} diff --git a/src/PHPDocker/PhpExtension/PhpExtension.php b/backend/src/PHPDocker/PhpExtension/PhpExtension.php similarity index 98% rename from src/PHPDocker/PhpExtension/PhpExtension.php rename to backend/src/PHPDocker/PhpExtension/PhpExtension.php index 46746a49..a3d74b2e 100644 --- a/src/PHPDocker/PhpExtension/PhpExtension.php +++ b/backend/src/PHPDocker/PhpExtension/PhpExtension.php @@ -1,4 +1,5 @@ slugifier = $slugifier; - // Initialise project properties + $this->name = ''; $this->applicationOptions = new ServiceOptions\Application(); $this->nginxOptions = new ServiceOptions\Nginx(); $this->mysqlOptions = new ServiceOptions\MySQL(); @@ -127,20 +114,6 @@ public function __construct(SlugifierInterface $slugifier) $this->clickhouseOptions = new ServiceOptions\Clickhouse(); } - /** - * Returns a slugged-up version of the project name. - * - * @return string - */ - public function getProjectNameSlug(): string - { - if ($this->projectNameSlug === null) { - $this->projectNameSlug = $this->getSlugifier()->slugify($this->getName()); - } - - return $this->projectNameSlug; - } - /** * @return string */ @@ -453,19 +426,6 @@ public function setHasMailhog(bool $hasMailhog): self return $this; } - /** - * @return SlugifierInterface - * @throws Exception\MissingDependencyException - */ - public function getSlugifier(): SlugifierInterface - { - if ($this->slugifier === null) { - throw new Exception\MissingDependencyException('Slugifier hasn\'t been initialised'); - } - - return $this->slugifier; - } - /** * @return ServiceOptions\Elasticsearch */ diff --git a/src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php b/backend/src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php similarity index 95% rename from src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php rename to backend/src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php index 3b2384e4..94281a20 100644 --- a/src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/AbstractMySQL.php @@ -1,4 +1,5 @@ version = $version; diff --git a/src/PHPDocker/Project/ServiceOptions/Application.php b/backend/src/PHPDocker/Project/ServiceOptions/Application.php similarity index 84% rename from src/PHPDocker/Project/ServiceOptions/Application.php rename to backend/src/PHPDocker/Project/ServiceOptions/Application.php index 7294c4ef..ff6631e0 100644 --- a/src/PHPDocker/Project/ServiceOptions/Application.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/Application.php @@ -1,4 +1,5 @@ 'Generic: Symfony 4, Zend, Laravel, Lumen...', self::APPLICATION_TYPE_SYMFONY => 'Symfony 2/3', self::APPLICATION_TYPE_PHALCON => 'Phalcon 3', @@ -69,7 +72,7 @@ public function getApplicationType(): string public function setApplicationType(string $applicationType): self { if (array_key_exists($applicationType, self::ALLOWED_APPLICATION_TYPES) === false) { - throw new \InvalidArgumentException(sprintf('Application type %s not supported', $applicationType)); + throw new InvalidArgumentException(sprintf('Application type %s not supported', $applicationType)); } $this->applicationType = $applicationType; diff --git a/src/PHPDocker/Project/ServiceOptions/Base.php b/backend/src/PHPDocker/Project/ServiceOptions/Base.php similarity index 95% rename from src/PHPDocker/Project/ServiceOptions/Base.php rename to backend/src/PHPDocker/Project/ServiceOptions/Base.php index 95ba09e1..63dd6d2d 100644 --- a/src/PHPDocker/Project/ServiceOptions/Base.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/Base.php @@ -1,4 +1,5 @@ '6.5.x', - self::VERSION_56 => '5.6.x', + self::VERSION_78 => '7.8.x', + self::VERSION_77 => '7.7.x', + self::VERSION_76 => '7.6.x', + self::VERSION_68 => '6.8.x', ]; /** * @var string */ - protected $version = self::VERSION_65; + protected $version = self::VERSION_78; /** * @return string @@ -57,7 +64,7 @@ public function getVersion() public function setVersion($version) { if (array_key_exists($version, self::ALLOWED_VERSIONS) === false) { - throw new \InvalidArgumentException(sprintf('Version %s is not supported', $version)); + throw new InvalidArgumentException(sprintf('Version %s is not supported', $version ?? 'null')); } $this->version = $version; diff --git a/src/PHPDocker/Project/ServiceOptions/Mailhog.php b/backend/src/PHPDocker/Project/ServiceOptions/Mailhog.php similarity index 97% rename from src/PHPDocker/Project/ServiceOptions/Mailhog.php rename to backend/src/PHPDocker/Project/ServiceOptions/Mailhog.php index b6cf6def..ab2560ad 100644 --- a/src/PHPDocker/Project/ServiceOptions/Mailhog.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/Mailhog.php @@ -1,4 +1,5 @@ version = $version; diff --git a/src/PHPDocker/Project/ServiceOptions/Postgres.php b/backend/src/PHPDocker/Project/ServiceOptions/Postgres.php similarity index 96% rename from src/PHPDocker/Project/ServiceOptions/Postgres.php rename to backend/src/PHPDocker/Project/ServiceOptions/Postgres.php index adb45b22..92b2b121 100644 --- a/src/PHPDocker/Project/ServiceOptions/Postgres.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/Postgres.php @@ -1,4 +1,5 @@ version = $version; diff --git a/src/PHPDocker/Project/ServiceOptions/Redis.php b/backend/src/PHPDocker/Project/ServiceOptions/Redis.php similarity index 97% rename from src/PHPDocker/Project/ServiceOptions/Redis.php rename to backend/src/PHPDocker/Project/ServiceOptions/Redis.php index 5fe9f9f7..02626c5a 100644 --- a/src/PHPDocker/Project/ServiceOptions/Redis.php +++ b/backend/src/PHPDocker/Project/ServiceOptions/Redis.php @@ -1,4 +1,5 @@ zipfile = new \ZipArchive(); - $this->zipfile->open(tempnam(sys_get_temp_dir(), get_class($this)), \ZipArchive::CREATE); + $this->zipfile = new ZipArchive(); + $this->zipfile->open(tempnam(sys_get_temp_dir(), get_class($this)), ZipArchive::CREATE); } /** @@ -77,10 +79,10 @@ public function addFile(GeneratedFileInterface $generatedFile, bool $ignorePrefi * * @param string $archiveFilename * - * @return ArchiveInterface + * @return File * @throws Exception\ArchiveNotCreatedException */ - public function generateArchive(string $archiveFilename): ArchiveInterface + public function generateArchive(string $archiveFilename): File { $filename = $this->zipfile->filename; @@ -88,12 +90,9 @@ public function generateArchive(string $archiveFilename): ArchiveInterface throw new Exception\ArchiveNotCreatedException('Archive creation failed for an unknown reason'); } - $file = new File(); - $file + return (new File()) ->setFilename($archiveFilename) ->setTmpFilename($filename); - - return $file; } /** diff --git a/src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php b/backend/src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php similarity index 89% rename from src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php rename to backend/src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php index a65fcf41..14bfd326 100644 --- a/src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php +++ b/backend/src/PHPDocker/Zip/Exception/ArchiveNotCreatedException.php @@ -1,4 +1,5 @@ tmpFilename)); + } + + /** + * Deletes the file from its temporary location. + * + * @return bool + */ + public function delete(): bool + { + return unlink($this->tmpFilename); + } } diff --git a/backend/symfony.lock b/backend/symfony.lock new file mode 100644 index 00000000..03f3561c --- /dev/null +++ b/backend/symfony.lock @@ -0,0 +1,735 @@ +{ + "antishov/doctrine-extensions-bundle": { + "version": "1.4", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "1.4", + "ref": "6c1ceb662f8997085f739cd089bfbef67f245983" + }, + "files": [ + "config/packages/stof_doctrine_extensions.yaml" + ] + }, + "api-platform/api-pack": { + "version": "1.1.0" + }, + "api-platform/core": { + "version": "2.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.1", + "ref": "18727d8f229306860b46955f438e1897421da689" + } + }, + "behat/transliterator": { + "version": "v1.2.0" + }, + "ckr/arraymerger": { + "version": "2.0.0" + }, + "cocur/slugify": { + "version": "v3.2" + }, + "composer/ca-bundle": { + "version": "1.1.4" + }, + "composer/xdebug-handler": { + "version": "1.3.2" + }, + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672" + } + }, + "doctrine/cache": { + "version": "v1.8.0" + }, + "doctrine/collections": { + "version": "v1.5.0" + }, + "doctrine/common": { + "version": "v2.10.0" + }, + "doctrine/data-fixtures": { + "version": "v1.3.1" + }, + "doctrine/dbal": { + "version": "v2.9.1" + }, + "doctrine/doctrine-bundle": { + "version": "1.6", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.6", + "ref": "453e89b78ded666f351617baca5ae40d20622351" + } + }, + "doctrine/doctrine-cache-bundle": { + "version": "1.3.5" + }, + "doctrine/doctrine-fixtures-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.0", + "ref": "fc52d86631a6dfd9fdf3381d0b7e3df2069e51b3" + } + }, + "doctrine/doctrine-migrations-bundle": { + "version": "1.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.2", + "ref": "c1431086fec31f17fbcfe6d6d7e92059458facc1" + } + }, + "doctrine/event-manager": { + "version": "v1.0.0" + }, + "doctrine/inflector": { + "version": "v1.3.0" + }, + "doctrine/instantiator": { + "version": "1.1.0" + }, + "doctrine/lexer": { + "version": "v1.0.1" + }, + "doctrine/migrations": { + "version": "v1.8.1" + }, + "doctrine/orm": { + "version": "v2.6.3" + }, + "doctrine/persistence": { + "version": "v1.1.0" + }, + "doctrine/reflection": { + "version": "v1.0.0" + }, + "doctrine/sql-formatter": { + "version": "1.1.0" + }, + "easycorp/easy-log-handler": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "70062abc2cd58794d2a90274502f81b55cd9951b" + } + }, + "egulias/email-validator": { + "version": "2.1.7" + }, + "fakerphp/faker": { + "version": "v1.13.0" + }, + "fig/link-util": { + "version": "1.0.0" + }, + "friendsofphp/proxy-manager-lts": { + "version": "v1.0.2" + }, + "fzaninotto/faker": { + "version": "v1.8.0" + }, + "gedmo/doctrine-extensions": { + "version": "v2.4.36" + }, + "hkarlstrom/openapi-reader": { + "version": "0.3.3" + }, + "hkarlstrom/openapi-validation-middleware": { + "version": "0.3.9" + }, + "infection/infection": { + "version": "0.12.2" + }, + "jean85/pretty-package-versions": { + "version": "1.2" + }, + "justinrainbow/json-schema": { + "version": "5.2.8" + }, + "laminas/laminas-code": { + "version": "3.4.1" + }, + "laminas/laminas-eventmanager": { + "version": "3.2.1" + }, + "laminas/laminas-zendframework-bridge": { + "version": "1.0.1" + }, + "limenius/liform": { + "version": "v0.12.0" + }, + "limenius/liform-bundle": { + "version": "v0.13.0" + }, + "michelf/php-markdown": { + "version": "1.8.0" + }, + "monolog/monolog": { + "version": "1.24.0" + }, + "myclabs/deep-copy": { + "version": "1.8.1" + }, + "nelmio/alice": { + "version": "3.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.2", + "ref": "0b9900ece737bec7752e4155c0164639dd9b0cb0" + } + }, + "nelmio/cors-bundle": { + "version": "1.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.5", + "ref": "f0436fc35fca88eada758311f8de43bfb61f1980" + } + }, + "nette/bootstrap": { + "version": "v3.0.0" + }, + "nette/di": { + "version": "v3.0.0" + }, + "nette/finder": { + "version": "v2.5.0" + }, + "nette/neon": { + "version": "v3.0.0" + }, + "nette/php-generator": { + "version": "v3.2.2" + }, + "nette/robot-loader": { + "version": "v3.2.0" + }, + "nette/schema": { + "version": "v1.0.0" + }, + "nette/utils": { + "version": "v3.0.1" + }, + "nikic/php-parser": { + "version": "v4.2.1" + }, + "nyholm/psr7": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "5e29a795c9996269c4cea2e87eeb3052c33cf98e" + }, + "files": [ + "config/packages/nyholm_psr7.yaml" + ] + }, + "ocramius/package-versions": { + "version": "1.3.0" + }, + "ocramius/proxy-manager": { + "version": "2.2.2" + }, + "opis/json-schema": { + "version": "1.0.16" + }, + "padraic/humbug_get_contents": { + "version": "1.1.2" + }, + "padraic/phar-updater": { + "version": "v1.0.6" + }, + "phar-io/manifest": { + "version": "1.0.3" + }, + "phar-io/version": { + "version": "2.0.1" + }, + "php": { + "version": "7.4" + }, + "php-http/message-factory": { + "version": "v1.0.2" + }, + "phpdocumentor/reflection-common": { + "version": "1.0.1" + }, + "phpdocumentor/reflection-docblock": { + "version": "4.3.0" + }, + "phpdocumentor/type-resolver": { + "version": "0.4.0" + }, + "phpspec/prophecy": { + "version": "1.8.0" + }, + "phpstan/phpdoc-parser": { + "version": "0.3.3" + }, + "phpstan/phpstan": { + "version": "0.11.6" + }, + "phpunit/php-code-coverage": { + "version": "7.0.3" + }, + "phpunit/php-file-iterator": { + "version": "2.0.2" + }, + "phpunit/php-text-template": { + "version": "1.2.1" + }, + "phpunit/php-timer": { + "version": "2.1.1" + }, + "phpunit/php-token-stream": { + "version": "3.0.1" + }, + "phpunit/phpunit": { + "version": "4.7", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.7", + "ref": "f6f9ee3a511e9d9ad6a53d92fbaa1a709ed8c1ca" + }, + "files": [ + ".env.test", + "phpunit.xml.dist", + "config/bootstrap.php", + "tests/.gitignore" + ] + }, + "pimple/pimple": { + "version": "v3.2.3" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/event-dispatcher": { + "version": "1.0.0" + }, + "psr/http-factory": { + "version": "1.0.1" + }, + "psr/http-message": { + "version": "1.0.1" + }, + "psr/http-server-handler": { + "version": "1.0.1" + }, + "psr/http-server-middleware": { + "version": "1.0.1" + }, + "psr/link": { + "version": "1.0.0" + }, + "psr/log": { + "version": "1.1.0" + }, + "psr/simple-cache": { + "version": "1.0.1" + }, + "respect/validation": { + "version": "1.1.30" + }, + "rize/uri-template": { + "version": "0.3.2" + }, + "sebastian/code-unit-reverse-lookup": { + "version": "1.0.1" + }, + "sebastian/comparator": { + "version": "3.0.2" + }, + "sebastian/diff": { + "version": "3.0.1" + }, + "sebastian/environment": { + "version": "4.2.2" + }, + "sebastian/exporter": { + "version": "3.1.0" + }, + "sebastian/global-state": { + "version": "3.0.0" + }, + "sebastian/object-enumerator": { + "version": "3.0.3" + }, + "sebastian/object-reflector": { + "version": "1.1.1" + }, + "sebastian/recursion-context": { + "version": "3.0.0" + }, + "sebastian/resource-operations": { + "version": "2.0.1" + }, + "sebastian/type": { + "version": "1.1.3" + }, + "sebastian/version": { + "version": "2.0.1" + }, + "sensio/framework-extra-bundle": { + "version": "5.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.2", + "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" + } + }, + "stof/doctrine-extensions-bundle": { + "version": "1.2", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "1.2", + "ref": "6c1ceb662f8997085f739cd089bfbef67f245983" + } + }, + "swiftmailer/swiftmailer": { + "version": "v6.1.3" + }, + "symfony/asset": { + "version": "v4.2.1" + }, + "symfony/cache": { + "version": "v4.2.1" + }, + "symfony/cache-contracts": { + "version": "v1.1.1" + }, + "symfony/config": { + "version": "v4.2.1" + }, + "symfony/console": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "f3a28efb32f20b8740fd763651cabd780bce43da" + } + }, + "symfony/contracts": { + "version": "v1.0.2" + }, + "symfony/debug": { + "version": "v4.2.1" + }, + "symfony/debug-bundle": { + "version": "4.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.1", + "ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea" + } + }, + "symfony/debug-pack": { + "version": "v1.0.7" + }, + "symfony/dependency-injection": { + "version": "v4.2.1" + }, + "symfony/doctrine-bridge": { + "version": "v4.2.1" + }, + "symfony/dotenv": { + "version": "v4.2.1" + }, + "symfony/error-handler": { + "version": "v4.4.2" + }, + "symfony/event-dispatcher": { + "version": "v4.2.1" + }, + "symfony/event-dispatcher-contracts": { + "version": "v1.1.1" + }, + "symfony/expression-language": { + "version": "v4.2.1" + }, + "symfony/filesystem": { + "version": "v4.2.1" + }, + "symfony/finder": { + "version": "v4.2.1" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "5f8a51c0fad684396f6b6c0fd770e043439cb632" + } + }, + "symfony/form": { + "version": "v4.2.6" + }, + "symfony/framework-bundle": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "82e2278ff2a74a97837e84c2493c30e7a85ad299" + } + }, + "symfony/http-foundation": { + "version": "v4.2.1" + }, + "symfony/http-kernel": { + "version": "v4.2.1" + }, + "symfony/intl": { + "version": "v4.2.7" + }, + "symfony/mime": { + "version": "v5.2.1" + }, + "symfony/monolog-bridge": { + "version": "v4.2.1" + }, + "symfony/monolog-bundle": { + "version": "3.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.1", + "ref": "18ebf5a940573a20de06f9c4060101eeb438cf3d" + } + }, + "symfony/options-resolver": { + "version": "v4.2.7" + }, + "symfony/orm-pack": { + "version": "v1.0.5" + }, + "symfony/phpunit-bridge": { + "version": "4.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.1", + "ref": "9dbf01cf67d791746ec772fe274c4d91cbf3c9ec" + }, + "files": [ + ".env.test", + "bin/phpunit", + "config/bootstrap.php", + "phpunit.xml.dist", + "tests/.gitignore" + ] + }, + "symfony/polyfill-intl-grapheme": { + "version": "v1.18.0" + }, + "symfony/polyfill-intl-icu": { + "version": "v1.11.0" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.11.0" + }, + "symfony/polyfill-intl-normalizer": { + "version": "v1.18.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.10.0" + }, + "symfony/polyfill-php72": { + "version": "v1.10.0" + }, + "symfony/polyfill-php73": { + "version": "v1.11.0" + }, + "symfony/polyfill-php80": { + "version": "v1.18.0" + }, + "symfony/process": { + "version": "v4.2.8" + }, + "symfony/profiler-pack": { + "version": "v1.0.4" + }, + "symfony/property-access": { + "version": "v4.2.1" + }, + "symfony/property-info": { + "version": "v4.2.1" + }, + "symfony/psr-http-message-bridge": { + "version": "v1.2.0" + }, + "symfony/routing": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "5374e24d508ba8fd6ba9eb15170255fdb778316a" + } + }, + "symfony/security-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "f8a63faa0d9521526499c0a8f403c9964ecb0527" + } + }, + "symfony/security-core": { + "version": "v4.2.1" + }, + "symfony/security-csrf": { + "version": "v4.2.1" + }, + "symfony/security-guard": { + "version": "v4.2.1" + }, + "symfony/security-http": { + "version": "v4.2.1" + }, + "symfony/serializer": { + "version": "v4.2.1" + }, + "symfony/serializer-pack": { + "version": "v1.0.2" + }, + "symfony/service-contracts": { + "version": "v1.1.2" + }, + "symfony/stopwatch": { + "version": "v4.2.1" + }, + "symfony/string": { + "version": "v5.1.3" + }, + "symfony/swiftmailer-bundle": { + "version": "2.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.5", + "ref": "3db029c03e452b4a23f7fc45cec7c922c2247eb8" + }, + "files": [ + "config/packages/dev/swiftmailer.yaml", + "config/packages/swiftmailer.yaml", + "config/packages/test/swiftmailer.yaml" + ] + }, + "symfony/translation": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "1fb02a6e1c8f3d4232cce485c9afa868d63b115a" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/translation-contracts": { + "version": "v1.1.2" + }, + "symfony/twig-bridge": { + "version": "v4.2.1" + }, + "symfony/twig-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "369b5b29dc52b2c190002825ae7ec24ab6f962dd" + } + }, + "symfony/validator": { + "version": "4.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.1", + "ref": "0cdc982334f45d554957a6167e030482795bf9d7" + } + }, + "symfony/var-dumper": { + "version": "v4.2.1" + }, + "symfony/var-exporter": { + "version": "v4.2.1" + }, + "symfony/web-link": { + "version": "v4.2.5" + }, + "symfony/web-profiler-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6" + } + }, + "symfony/yaml": { + "version": "v4.2.1" + }, + "theseer/tokenizer": { + "version": "1.1.2" + }, + "tuupola/callable-handler": { + "version": "0.4.0" + }, + "tuupola/http-factory": { + "version": "0.4.2" + }, + "twig/twig": { + "version": "v2.6.0" + }, + "webimpress/safe-writer": { + "version": "2.0.0" + }, + "webmozart/assert": { + "version": "1.3.0" + }, + "webonyx/graphql-php": { + "version": "v0.13.0" + }, + "willdurand/negotiation": { + "version": "v2.3.1" + }, + "zendframework/zend-code": { + "version": "3.3.1" + }, + "zendframework/zend-eventmanager": { + "version": "3.2.1" + } +} diff --git a/backend/tests/.gitignore b/backend/tests/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/backend/translations/.gitignore b/backend/translations/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/behat b/behat deleted file mode 120000 index 1ad80726..00000000 --- a/behat +++ /dev/null @@ -1 +0,0 @@ -vendor/behat/behat/bin/behat \ No newline at end of file diff --git a/behat.yml b/behat.yml deleted file mode 100644 index 9827c182..00000000 --- a/behat.yml +++ /dev/null @@ -1,14 +0,0 @@ -default: - suites: - phpdocker: - type: symfony_bundle - bundle: AppBundle - contexts: - - AppBundle\Features\Context\FeatureContext - extensions: - Behat\Symfony2Extension: ~ - Behat\MinkExtension: - base_url: http://localhost - sessions: - default: - symfony2: ~ diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 00000000..1a4b7472 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,2 @@ +hosts +mkcert diff --git a/bin/console b/bin/console deleted file mode 100755 index 0629023a..00000000 --- a/bin/console +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env php -getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev'); -$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod'; - -if ($debug) { - Debug::enable(); -} - -$kernel = new AppKernel($env, $debug); -$application = new Application($kernel); -$application->run($input); diff --git a/bin/symfony_requirements b/bin/symfony_requirements deleted file mode 100755 index a7bf65a1..00000000 --- a/bin/symfony_requirements +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env php -getPhpIniConfigPath(); - -echo_title('Symfony Requirements Checker'); - -echo '> PHP is using the following php.ini file:'.PHP_EOL; -if ($iniPath) { - echo_style('green', ' '.$iniPath); -} else { - echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!'); -} - -echo PHP_EOL.PHP_EOL; - -echo '> Checking Symfony requirements:'.PHP_EOL.' '; - -$messages = array(); -foreach ($symfonyRequirements->getRequirements() as $req) { - if ($helpText = get_error_message($req, $lineSize)) { - echo_style('red', 'E'); - $messages['error'][] = $helpText; - } else { - echo_style('green', '.'); - } -} - -$checkPassed = empty($messages['error']); - -foreach ($symfonyRequirements->getRecommendations() as $req) { - if ($helpText = get_error_message($req, $lineSize)) { - echo_style('yellow', 'W'); - $messages['warning'][] = $helpText; - } else { - echo_style('green', '.'); - } -} - -if ($checkPassed) { - echo_block('success', 'OK', 'Your system is ready to run Symfony projects'); -} else { - echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects'); - - echo_title('Fix the following mandatory requirements', 'red'); - - foreach ($messages['error'] as $helpText) { - echo ' * '.$helpText.PHP_EOL; - } -} - -if (!empty($messages['warning'])) { - echo_title('Optional recommendations to improve your setup', 'yellow'); - - foreach ($messages['warning'] as $helpText) { - echo ' * '.$helpText.PHP_EOL; - } -} - -echo PHP_EOL; -echo_style('title', 'Note'); -echo ' The command console could use a different php.ini file'.PHP_EOL; -echo_style('title', '~~~~'); -echo ' than the one used with your web server. To be on the'.PHP_EOL; -echo ' safe side, please check the requirements from your web'.PHP_EOL; -echo ' server using the '; -echo_style('yellow', 'web/config.php'); -echo ' script.'.PHP_EOL; -echo PHP_EOL; - -exit($checkPassed ? 0 : 1); - -function get_error_message(Requirement $requirement, $lineSize) -{ - if ($requirement->isFulfilled()) { - return; - } - - $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; - $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; - - return $errorMessage; -} - -function echo_title($title, $style = null) -{ - $style = $style ?: 'title'; - - echo PHP_EOL; - echo_style($style, $title.PHP_EOL); - echo_style($style, str_repeat('~', strlen($title)).PHP_EOL); - echo PHP_EOL; -} - -function echo_style($style, $message) -{ - // ANSI color codes - $styles = array( - 'reset' => "\033[0m", - 'red' => "\033[31m", - 'green' => "\033[32m", - 'yellow' => "\033[33m", - 'error' => "\033[37;41m", - 'success' => "\033[37;42m", - 'title' => "\033[34m", - ); - $supports = has_color_support(); - - echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : ''); -} - -function echo_block($style, $title, $message) -{ - $message = ' '.trim($message).' '; - $width = strlen($message); - - echo PHP_EOL.PHP_EOL; - - echo_style($style, str_repeat(' ', $width)); - echo PHP_EOL; - echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT)); - echo PHP_EOL; - echo_style($style, $message); - echo PHP_EOL; - echo_style($style, str_repeat(' ', $width)); - echo PHP_EOL; -} - -function has_color_support() -{ - static $support; - - if (null === $support) { - if (DIRECTORY_SEPARATOR == '\\') { - $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); - } else { - $support = function_exists('posix_isatty') && @posix_isatty(STDOUT); - } - } - - return $support; -} diff --git a/bower.json b/bower.json deleted file mode 100644 index d3f85337..00000000 --- a/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PhpDocker", - "authors": [ - "Luis Pabon " - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "web/assets/vendor/", - "test", - "tests" - ], - "dependencies": { - "bootstrap": "^3.3.6", - "bootstrap-multiselect": "0.9.13", - "jquery": "^2.2.2", - "jquery-ui": "^1.11.4", - "font-awesome": "fontawesome#^4.5.0", - "bootstrap-toggle": "^2.2.2", - "better-share-button": "74de00e5e5" - } -} diff --git a/composer.json b/composer.json deleted file mode 100644 index d3ef21d3..00000000 --- a/composer.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "phpdocker-io/phpdocker.io", - "license": "Apache-2.0", - "type": "project", - "autoload": { - "psr-4": { - "": "src/" - }, - "classmap": [ - "app/AppKernel.php" - ] - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "require": { - "php": ">=7.1.1", - "symfony/symfony": "^3.0", - "symfony/monolog-bundle": "^2.8", - "symfony/assetic-bundle": "^2.7", - "symfony/swiftmailer-bundle": "^2.3", - "doctrine/orm": "^2.5", - "doctrine/doctrine-bundle": "^1.6", - "doctrine/doctrine-cache-bundle": "^1.2", - "stof/doctrine-extensions-bundle": "^1.2", - "sensio/distribution-bundle": "^5.0", - "sensio/framework-extra-bundle": "^3.0", - "cocur/slugify": "^1.4", - "michelf/php-markdown": "^1.6", - "guzzlehttp/guzzle": "^6.1", - "javiereguiluz/easyadmin-bundle": "^1.11", - "egeloen/ckeditor-bundle": "^4.0", - "doctrine/doctrine-migrations-bundle": "^1.1" - }, - "require-dev": { - "sensio/generator-bundle": "^3.0", - "symfony/var-dumper": "^3.0", - "behat/symfony2-extension": "^2.1", - "behat/mink-extension": "^2.2", - "behat/mink-browserkit-driver": "^1.3", - "beberlei/assert": "^2.5" - }, - "scripts": { - "post-install-cmd": [ - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" - ], - "post-update-cmd": [ - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" - ] - }, - "extra": { - "symfony-app-dir": "app", - "symfony-bin-dir": "bin", - "symfony-var-dir": "var", - "symfony-web-dir": "web", - "symfony-tests-dir": "tests", - "symfony-assets-install": "relative" - } -} diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 716ce9c0..00000000 --- a/composer.lock +++ /dev/null @@ -1,4457 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "16b70745b33579629ede80d1fafc5991", - "packages": [ - { - "name": "behat/transliterator", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Transliterator.git", - "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", - "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "chuyskywalker/rolling-curl": "^3.1", - "php-yaoi/php-yaoi": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Transliterator": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Artistic-1.0" - ], - "description": "String transliterator", - "keywords": [ - "i18n", - "slug", - "transliterator" - ], - "time": "2017-04-04T11:38:05+00:00" - }, - { - "name": "cocur/slugify", - "version": "v1.4.1", - "source": { - "type": "git", - "url": "https://github.com/cocur/slugify.git", - "reference": "16cdd7e792657d524cde931ea666436623b23301" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cocur/slugify/zipball/16cdd7e792657d524cde931ea666436623b23301", - "reference": "16cdd7e792657d524cde931ea666436623b23301", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "laravel/framework": "~4.1", - "latte/latte": "~2.2", - "mockery/mockery": "~0.9", - "nette/di": "~2.2", - "phpunit/phpunit": "~4.6", - "plumphp/plum": "~0.1", - "sami/sami": "~1.3", - "satooshi/php-coveralls": "0.6.*", - "silex/silex": "~1.2", - "symfony/dependency-injection": "~2.4", - "symfony/http-kernel": "~2.4", - "twig/twig": "~1", - "zendframework/zend-modulemanager": "~2.2", - "zendframework/zend-servicemanager": "~2.2", - "zendframework/zend-view": "~2.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cocur\\Slugify\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ivo Bathke", - "email": "ivo.bathke@gmail.com" - }, - { - "name": "Florian Eckerstorfer", - "email": "florian@eckerstorfer.co", - "homepage": "https://florian.ec" - } - ], - "description": "Converts a string into a slug.", - "keywords": [ - "slug", - "slugify" - ], - "time": "2016-02-11T09:53:46+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "8afa52cd417f4ec417b4bfe86b68106538a87660" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660", - "reference": "8afa52cd417f4ec417b4bfe86b68106538a87660", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "time": "2018-10-18T06:09:13+00:00" - }, - { - "name": "doctrine/annotations", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": "^7.1" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2017-12-06T07:11:42+00:00" - }, - { - "name": "doctrine/cache", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57", - "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57", - "shasum": "" - }, - "require": { - "php": "~7.1" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^4.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ], - "time": "2018-08-21T18:01:43+00:00" - }, - { - "name": "doctrine/collections", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", - "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "~0.1@dev", - "phpunit/phpunit": "^5.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ], - "time": "2017-07-22T10:37:32+00:00" - }, - { - "name": "doctrine/common", - "version": "v2.10.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "30e33f60f64deec87df728c02b107f82cdafad9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d", - "reference": "30e33f60f64deec87df728c02b107f82cdafad9d", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/inflector": "^1.0", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.1", - "doctrine/reflection": "^1.0", - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpunit/phpunit": "^6.3", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "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, persistence interfaces, proxies, event system and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "time": "2018-11-21T01:24:55+00:00" - }, - { - "name": "doctrine/dbal", - "version": "v2.9.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", - "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^5.0", - "jetbrains/phpstorm-stubs": "^2018.1.2", - "phpstan/phpstan": "^0.10.1", - "phpunit/phpunit": "^7.4", - "symfony/console": "^2.0.5|^3.0|^4.0", - "symfony/phpunit-bridge": "^3.4.5|^4.0.5" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.9.x-dev", - "dev-develop": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "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", - "dbal", - "mysql", - "persistence", - "pgsql", - "php", - "queryobject" - ], - "time": "2018-12-31T03:27:51+00:00" - }, - { - "name": "doctrine/doctrine-bundle", - "version": "1.10.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "98551d71f515692c2278073e0d483763ac70b341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/98551d71f515692c2278073e0d483763ac70b341", - "reference": "98551d71f515692c2278073e0d483763ac70b341", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.5.12", - "doctrine/doctrine-cache-bundle": "~1.2", - "jdorn/sql-formatter": "^1.2.16", - "php": "^5.5.9|^7.0", - "symfony/console": "~2.7|~3.0|~4.0", - "symfony/dependency-injection": "~2.7|~3.0|~4.0", - "symfony/doctrine-bridge": "~2.7|~3.0|~4.0", - "symfony/framework-bundle": "^2.7.22|~3.0|~4.0" - }, - "conflict": { - "symfony/http-foundation": "<2.6" - }, - "require-dev": { - "doctrine/orm": "~2.4", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^4.8.36|^5.7|^6.4", - "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", - "symfony/property-info": "~2.8|~3.0|~4.0", - "symfony/validator": "~2.7|~3.0|~4.0", - "symfony/web-profiler-bundle": "~2.7|~3.0|~4.0", - "symfony/yaml": "~2.7|~3.0|~4.0", - "twig/twig": "~1.26|~2.0" - }, - "suggest": { - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "To use the data collector." - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "orm", - "persistence" - ], - "time": "2019-01-07T15:31:08+00:00" - }, - { - "name": "doctrine/doctrine-cache-bundle", - "version": "1.3.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927", - "reference": "5514c90d9fb595e1095e6d66ebb98ce9ef049927", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.4.2", - "doctrine/inflector": "~1.0", - "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.7|~3.3|~4.0" - }, - "require-dev": { - "instaclick/coding-standard": "~1.1", - "instaclick/object-calisthenics-sniffs": "dev-master", - "instaclick/symfony2-coding-standard": "dev-remaster", - "phpunit/phpunit": "~4.8.36|~5.6|~6.5|~7.0", - "predis/predis": "~0.8", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "~1.5", - "symfony/console": "~2.7|~3.3|~4.0", - "symfony/finder": "~2.7|~3.3|~4.0", - "symfony/framework-bundle": "~2.7|~3.3|~4.0", - "symfony/phpunit-bridge": "~2.7|~3.3|~4.0", - "symfony/security-acl": "~2.7|~3.3", - "symfony/validator": "~2.7|~3.3|~4.0", - "symfony/yaml": "~2.7|~3.3|~4.0" - }, - "suggest": { - "symfony/security-acl": "For using this bundle to cache ACLs" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Fabio B. Silva", - "email": "fabio.bat.silva@gmail.com" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@hotmail.com" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony Bundle for Doctrine Cache", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ], - "time": "2018-11-09T06:25:35+00:00" - }, - { - "name": "doctrine/doctrine-migrations-bundle", - "version": "v1.3.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce", - "reference": "49fa399181db4bf4f9f725126bd1cb65c4398dce", - "shasum": "" - }, - "require": { - "doctrine/doctrine-bundle": "~1.0", - "doctrine/migrations": "^1.1", - "php": ">=5.4.0", - "symfony/framework-bundle": "~2.7|~3.3|~4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^7.4" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony DoctrineMigrationsBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "dbal", - "migrations", - "schema" - ], - "time": "2018-12-03T11:55:33+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3", - "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^4.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Doctrine Event Manager component", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "eventdispatcher", - "eventmanager" - ], - "time": "2018-06-11T11:59:03+00:00" - }, - { - "name": "doctrine/inflector", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ], - "time": "2018-01-09T20:05:19+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "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": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2017-07-22T11:58:36+00:00" - }, - { - "name": "doctrine/lexer", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ], - "time": "2014-09-09T13:34:57+00:00" - }, - { - "name": "doctrine/migrations", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.6", - "ocramius/proxy-manager": "^1.0|^2.0", - "php": "^7.1", - "symfony/console": "~3.3|^4.0" - }, - "require-dev": { - "doctrine/coding-standard": "^1.0", - "doctrine/orm": "~2.5", - "jdorn/sql-formatter": "~1.1", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~7.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~3.3|^4.0" - }, - "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v1.8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations", - "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": "Database Schema migrations using Doctrine DBAL", - "homepage": "https://www.doctrine-project.org/projects/migrations.html", - "keywords": [ - "database", - "migrations" - ], - "time": "2018-06-06T21:00:30+00:00" - }, - { - "name": "doctrine/orm", - "version": "v2.6.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/orm.git", - "reference": "434820973cadf2da2d66e7184be370084cc32ca8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8", - "reference": "434820973cadf2da2d66e7184be370084cc32ca8", - "shasum": "" - }, - "require": { - "doctrine/annotations": "~1.5", - "doctrine/cache": "~1.6", - "doctrine/collections": "^1.4", - "doctrine/common": "^2.7.1", - "doctrine/dbal": "^2.6", - "doctrine/instantiator": "~1.1", - "ext-pdo": "*", - "php": "^7.1", - "symfony/console": "~3.0|~4.0" - }, - "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpunit/phpunit": "^6.5", - "squizlabs/php_codesniffer": "^3.2", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" - }, - "bin": [ - "bin/doctrine" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\ORM\\": "lib/Doctrine/ORM" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "orm" - ], - "time": "2018-11-20T23:46:46+00:00" - }, - { - "name": "doctrine/persistence", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/persistence.git", - "reference": "c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38", - "reference": "c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.0", - "php": "^7.1" - }, - "conflict": { - "doctrine/common": "<2.10@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpstan/phpstan": "^0.8", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "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://doctrine-project.org/projects/persistence.html", - "keywords": [ - "mapper", - "object", - "odm", - "orm", - "persistence" - ], - "time": "2018-11-21T00:33:13+00:00" - }, - { - "name": "doctrine/reflection", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/reflection.git", - "reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6", - "reference": "02538d3f95e88eb397a5f86274deb2c6175c2ab6", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.0", - "ext-tokenizer": "*", - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^4.0", - "doctrine/common": "^2.8", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpunit/phpunit": "^7.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Doctrine Reflection component", - "homepage": "https://www.doctrine-project.org/projects/reflection.html", - "keywords": [ - "reflection" - ], - "time": "2018-06-14T14:45:07+00:00" - }, - { - "name": "egeloen/ckeditor-bundle", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/egeloen/IvoryCKEditorBundle.git", - "reference": "c974b85b79ca9186809eb8625e53544b388b0411" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egeloen/IvoryCKEditorBundle/zipball/c974b85b79ca9186809eb8625e53544b388b0411", - "reference": "c974b85b79ca9186809eb8625e53544b388b0411", - "shasum": "" - }, - "require": { - "egeloen/json-builder": "^1.0|^2.0", - "php": ">=5.3.3", - "symfony/dependency-injection": "^2.2|^3.0", - "symfony/form": "^2.2|^3.0", - "symfony/framework-bundle": "^2.2|^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0|^5.0", - "symfony/phpunit-bridge": "^2.7|^3.0", - "symfony/yaml": "^2.0.5|^3.0", - "twig/twig": "^1.12" - }, - "suggest": { - "egeloen/form-extra-bundle": "Allows to load CKEditor asynchronously", - "twig/twig": "Allows to use Twig templates" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "psr-4": { - "Ivory\\CKEditorBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - } - ], - "description": "Provides a CKEditor integration for your Symfony2 Project.", - "keywords": [ - "CKEditor" - ], - "time": "2016-10-28T16:59:01+00:00" - }, - { - "name": "egeloen/json-builder", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/egeloen/ivory-json-builder.git", - "reference": "c6afb2c53ac1070144d5d3330d5f86567b132d23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egeloen/ivory-json-builder/zipball/c6afb2c53ac1070144d5d3330d5f86567b132d23", - "reference": "c6afb2c53ac1070144d5d3330d5f86567b132d23", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.3.0", - "symfony/property-access": "~2.2|~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "~0.6", - "symfony/phpunit-bridge": "~2.7|~3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Ivory\\JsonBuilder\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - } - ], - "description": "JSON builder with escaping control for PHP 5.3+", - "keywords": [ - "Escape", - "builder", - "json" - ], - "time": "2015-12-06T13:20:24+00:00" - }, - { - "name": "fig/link-util", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link-util.git", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "psr/link": "~1.0@dev" - }, - "require-dev": { - "phpunit/phpunit": "^5.1", - "squizlabs/php_codesniffer": "^2.3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common utility implementations for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "time": "2016-10-17T18:31:11+00:00" - }, - { - "name": "gedmo/doctrine-extensions", - "version": "v2.4.36", - "source": { - "type": "git", - "url": "https://github.com/Atlantic18/DoctrineExtensions.git", - "reference": "87c78ff9fd4b90460386f753d95622f6fbbfcb27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27", - "reference": "87c78ff9fd4b90460386f753d95622f6fbbfcb27", - "shasum": "" - }, - "require": { - "behat/transliterator": "~1.2", - "doctrine/common": "~2.4", - "php": ">=5.3.2" - }, - "conflict": { - "doctrine/annotations": "<1.2" - }, - "require-dev": { - "doctrine/common": ">=2.5.0", - "doctrine/mongodb-odm": ">=1.0.2", - "doctrine/orm": ">=2.5.0", - "phpunit/phpunit": "^4.8.35|^5.7|^6.5", - "symfony/yaml": "~2.6|~3.0|~4.0" - }, - "suggest": { - "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", - "doctrine/orm": "to use the extensions with the ORM" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Gedmo\\": "lib/Gedmo" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "David Buchmann", - "email": "david@liip.ch" - }, - { - "name": "Gediminas Morkevicius", - "email": "gediminas.morkevicius@gmail.com" - }, - { - "name": "Gustavo Falco", - "email": "comfortablynumb84@gmail.com" - } - ], - "description": "Doctrine2 behavioral extensions", - "homepage": "http://gediminasm.org/", - "keywords": [ - "Blameable", - "behaviors", - "doctrine2", - "extensions", - "gedmo", - "loggable", - "nestedset", - "sluggable", - "sortable", - "timestampable", - "translatable", - "tree", - "uploadable" - ], - "time": "2018-07-26T12:16:35+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, - { - "name": "javiereguiluz/easyadmin-bundle", - "version": "v1.17.12", - "source": { - "type": "git", - "url": "https://github.com/javiereguiluz/EasyAdminBundle.git", - "reference": "f9114922faf5be8a4d5e70a774e672a67250baec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/javiereguiluz/EasyAdminBundle/zipball/f9114922faf5be8a4d5e70a774e672a67250baec", - "reference": "f9114922faf5be8a4d5e70a774e672a67250baec", - "shasum": "" - }, - "require": { - "doctrine/cache": "~1.5", - "doctrine/common": "^2.4.0", - "doctrine/doctrine-bundle": "~1.2", - "doctrine/orm": "~2.3", - "pagerfanta/pagerfanta": "~1.0,>=1.0.1", - "php": ">=5.3.0", - "sensio/framework-extra-bundle": "~2.3|~3.0,>=3.0.2|4.0.x|~5.0", - "symfony/asset": "~2.3|~3.0|^4.0", - "symfony/config": "~2.3|~3.0|^4.0", - "symfony/dependency-injection": "~2.3|~3.0|^4.0", - "symfony/doctrine-bridge": "~2.3|~3.0|^4.0", - "symfony/event-dispatcher": "~2.3|~3.0|^4.0", - "symfony/form": "~2.3|~3.0|^4.0", - "symfony/framework-bundle": "~2.3|~3.0|^4.0", - "symfony/http-foundation": "~2.3|~3.0|^4.0", - "symfony/http-kernel": "~2.3|~3.0|^4.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/property-access": "~2.3|~3.0|^4.0", - "symfony/security-bundle": "~2.3|~3.0|^4.0", - "symfony/translation": "~2.3|~3.0|^4.0", - "symfony/twig-bridge": "^2.3.4|~3.0|^4.0", - "symfony/twig-bundle": "~2.3|~3.0|^4.0", - "symfony/validator": "~2.3|~3.0|^4.0", - "twig/extensions": "~1.0", - "twig/twig": "~1.26|~2.0" - }, - "require-dev": { - "doctrine/doctrine-fixtures-bundle": "~2.2", - "psr/log": "~1.0", - "symfony/browser-kit": "~2.3|~3.0|^4.0", - "symfony/console": "~2.3|~3.0|^4.0", - "symfony/css-selector": "~2.3|~3.0|^4.0", - "symfony/dom-crawler": "~2.3|~3.0|^4.0", - "symfony/finder": "~2.3|~3.0|^4.0", - "symfony/phpunit-bridge": "^3.2|^4.0", - "symfony/var-dumper": "~2.3|~3.0|^4.0", - "symfony/yaml": "~2.3|~3.0|^4.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.17.x-dev" - } - }, - "autoload": { - "psr-4": { - "EasyCorp\\Bundle\\EasyAdminBundle\\": "src/", - "JavierEguiluz\\Bundle\\EasyAdminBundle\\": "legacy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Javier Eguiluz", - "email": "javiereguiluz@gmail.com" - }, - { - "name": "Project Contributors", - "homepage": "http://github.com/javiereguiluz/easyadmin/blob/master/CONTRIBUTORS.md" - } - ], - "description": "Admin generator for Symfony applications", - "homepage": "https://github.com/javiereguiluz/EasyAdminBundle", - "keywords": [ - "admin", - "backend", - "generator" - ], - "abandoned": "easycorp/easyadmin-bundle", - "time": "2018-02-24T09:24:55+00:00" - }, - { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", - "source": { - "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "lib" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "time": "2014-01-12T16:20:24+00:00" - }, - { - "name": "kriswallsmith/assetic", - "version": "v1.4.0", - "source": { - "type": "git", - "url": "https://github.com/kriswallsmith/assetic.git", - "reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1", - "reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1", - "shasum": "" - }, - "require": { - "php": ">=5.3.1", - "symfony/process": "~2.1|~3.0" - }, - "conflict": { - "twig/twig": "<1.27" - }, - "require-dev": { - "leafo/lessphp": "^0.3.7", - "leafo/scssphp": "~0.1", - "meenie/javascript-packer": "^1.1", - "mrclay/minify": "<2.3", - "natxet/cssmin": "3.0.4", - "patchwork/jsqueeze": "~1.0|~2.0", - "phpunit/phpunit": "~4.8 || ^5.6", - "psr/log": "~1.0", - "ptachoire/cssembed": "~1.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "twig/twig": "~1.23|~2.0", - "yfix/packager": "dev-master" - }, - "suggest": { - "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", - "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler", - "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin", - "patchwork/jsqueeze": "Assetic provides the integration with the JSqueeze JavaScript compressor", - "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris", - "twig/twig": "Assetic provides the integration with the Twig templating engine" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-0": { - "Assetic": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kris Wallsmith", - "email": "kris.wallsmith@gmail.com", - "homepage": "http://kriswallsmith.net/" - } - ], - "description": "Asset Management for PHP", - "homepage": "https://github.com/kriswallsmith/assetic", - "keywords": [ - "assets", - "compression", - "minification" - ], - "time": "2016-11-11T18:43:20+00:00" - }, - { - "name": "michelf/php-markdown", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "01ab082b355bf188d907b9929cd99b2923053495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/01ab082b355bf188d907b9929cd99b2923053495", - "reference": "01ab082b355bf188d907b9929cd99b2923053495", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Michelf\\": "Michelf/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", - "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "https://daringfireball.net/" - } - ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", - "keywords": [ - "markdown" - ], - "time": "2018-01-15T00:49:33+00:00" - }, - { - "name": "monolog/monolog", - "version": "1.24.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.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": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "time": "2018-11-05T09:00:11+00:00" - }, - { - "name": "ocramius/package-versions", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", - "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0.0", - "php": "^7.1.0" - }, - "require-dev": { - "composer/composer": "^1.6.3", - "ext-zip": "*", - "infection/infection": "^0.7.1", - "phpunit/phpunit": "^7.0.0" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2018-02-05T13:05:30+00:00" - }, - { - "name": "ocramius/proxy-manager", - "version": "2.2.2", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "14b137b06b0f911944132df9d51e445a35920ab1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1", - "reference": "14b137b06b0f911944132df9d51e445a35920ab1", - "shasum": "" - }, - "require": { - "ocramius/package-versions": "^1.1.3", - "php": "^7.2.0", - "zendframework/zend-code": "^3.3.0" - }, - "require-dev": { - "couscous/couscous": "^1.6.1", - "ext-phar": "*", - "humbug/humbug": "1.0.0-RC.0@RC", - "nikic/php-parser": "^3.1.1", - "padraic/phpunit-accelerator": "dev-master@DEV", - "phpbench/phpbench": "^0.12.2", - "phpstan/phpstan": "dev-master#856eb10a81c1d27c701a83f167dc870fd8f4236a as 0.9.999", - "phpstan/phpstan-phpunit": "dev-master#5629c0a1f4a9c417cb1077cf6693ad9753895761", - "phpunit/phpunit": "^6.4.3", - "squizlabs/php_codesniffer": "^2.9.1" - }, - "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "ProxyManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - } - ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "time": "2018-09-27T13:45:01+00:00" - }, - { - "name": "pagerfanta/pagerfanta", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/whiteoctober/Pagerfanta.git", - "reference": "8400ab498e500018cff9a099ac22555e7949aa9a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/whiteoctober/Pagerfanta/zipball/8400ab498e500018cff9a099ac22555e7949aa9a", - "reference": "8400ab498e500018cff9a099ac22555e7949aa9a", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "doctrine/orm": "~2.3", - "doctrine/phpcr-odm": "1.*", - "jackalope/jackalope-doctrine-dbal": "1.*", - "jmikola/geojson": "~1.0", - "mandango/mandango": "~1.0@dev", - "mandango/mondator": "~1.0@dev", - "phpunit/phpunit": "^4.8.35 | ^5.7", - "propel/propel": "~2.0@dev", - "propel/propel1": "~1.6", - "ruflin/elastica": "~1.3", - "solarium/solarium": "~3.1" - }, - "suggest": { - "doctrine/mongodb-odm": "To use the DoctrineODMMongoDBAdapter.", - "doctrine/orm": "To use the DoctrineORMAdapter.", - "doctrine/phpcr-odm": "To use the DoctrineODMPhpcrAdapter. >= 1.1.0", - "mandango/mandango": "To use the MandangoAdapter.", - "propel/propel": "To use the Propel2Adapter", - "propel/propel1": "To use the PropelAdapter", - "solarium/solarium": "To use the SolariumAdapter." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pagerfanta\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Pablo Díez", - "email": "pablodip@gmail.com" - } - ], - "description": "Pagination for PHP 5.3", - "keywords": [ - "page", - "pagination", - "paginator", - "paging" - ], - "time": "2018-05-01T10:49:10+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.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": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/link", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "time": "2016-10-28T16:06:13+00:00" - }, - { - "name": "psr/log", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2018-11-20T15:27:04+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" - }, - "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.", - "time": "2016-02-11T07:05:27+00:00" - }, - { - "name": "sensio/distribution-bundle", - "version": "v5.0.24", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "59eac70f15f97ee945924948a6f5e2f6f86b7a4b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/59eac70f15f97ee945924948a6f5e2f6f86b7a4b", - "reference": "59eac70f15f97ee945924948a6f5e2f6f86b7a4b", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "sensiolabs/security-checker": "~5.0", - "symfony/class-loader": "~2.3|~3.0", - "symfony/config": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/filesystem": "~2.3|~3.0", - "symfony/http-kernel": "~2.3|~3.0", - "symfony/process": "~2.3|~3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Sensio\\Bundle\\DistributionBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Base bundle for Symfony Distributions", - "keywords": [ - "configuration", - "distribution" - ], - "time": "2018-12-14T17:36:15+00:00" - }, - { - "name": "sensio/framework-extra-bundle", - "version": "v3.0.29", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "bb907234df776b68922eb4b25bfa061683597b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a", - "reference": "bb907234df776b68922eb4b25bfa061683597b6a", - "shasum": "" - }, - "require": { - "doctrine/common": "~2.2", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0|~4.0" - }, - "require-dev": { - "doctrine/doctrine-bundle": "~1.5", - "doctrine/orm": "~2.4,>=2.4.5", - "symfony/asset": "~2.7|~3.0|~4.0", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0", - "symfony/expression-language": "~2.4|~3.0|~4.0", - "symfony/finder": "~2.3|~3.0|~4.0", - "symfony/phpunit-bridge": "~3.2|~4.0", - "symfony/psr-http-message-bridge": "^0.3|^1.0", - "symfony/security-bundle": "~2.4|~3.0|~4.0", - "symfony/templating": "~2.3|~3.0|~4.0", - "symfony/translation": "~2.3|~3.0|~4.0", - "symfony/twig-bundle": "~2.3|~3.0|~4.0", - "symfony/yaml": "~2.3|~3.0|~4.0", - "twig/twig": "~1.12|~2.0", - "zendframework/zend-diactoros": "^1.3" - }, - "suggest": { - "symfony/expression-language": "", - "symfony/psr-http-message-bridge": "To use the PSR-7 converters", - "symfony/security-bundle": "" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Sensio\\Bundle\\FrameworkExtraBundle\\": "" - } - }, - "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" - ], - "time": "2017-12-14T19:03:23+00:00" - }, - { - "name": "sensiolabs/security-checker", - "version": "v5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "46be3f58adac13084497961e10eed9a7fb4d44d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/46be3f58adac13084497961e10eed9a7fb4d44d1", - "reference": "46be3f58adac13084497961e10eed9a7fb4d44d1", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "php": ">=5.5.9", - "symfony/console": "~2.7|~3.0|~4.0" - }, - "bin": [ - "security-checker" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "SensioLabs\\Security\\": "SensioLabs/Security" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien.potencier@gmail.com" - } - ], - "description": "A security checker for your composer.lock", - "time": "2018-12-19T17:14:59+00:00" - }, - { - "name": "stof/doctrine-extensions-bundle", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git", - "reference": "46db71ec7ffee9122eca3cdddd4ef8d84bae269c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/46db71ec7ffee9122eca3cdddd4ef8d84bae269c", - "reference": "46db71ec7ffee9122eca3cdddd4ef8d84bae269c", - "shasum": "" - }, - "require": { - "gedmo/doctrine-extensions": "^2.3.4", - "php": ">=5.3.2", - "symfony/framework-bundle": "~2.7|~3.2|~4.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.0", - "symfony/security-bundle": "^2.7 || ^3.2 || ^4.0" - }, - "suggest": { - "doctrine/doctrine-bundle": "to use the ORM extensions", - "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Stof\\DoctrineExtensionsBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - } - ], - "description": "Integration of the gedmo/doctrine-extensions with Symfony2", - "homepage": "https://github.com/stof/StofDoctrineExtensionsBundle", - "keywords": [ - "behaviors", - "doctrine2", - "extensions", - "gedmo", - "loggable", - "nestedset", - "sluggable", - "sortable", - "timestampable", - "translatable", - "tree" - ], - "time": "2017-12-24T16:06:50+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.4-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "time": "2018-07-31T09:26:32+00:00" - }, - { - "name": "symfony/assetic-bundle", - "version": "v2.8.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/assetic-bundle.git", - "reference": "2e0a23a4874838e26de6f025e02fc63328921a4c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c", - "reference": "2e0a23a4874838e26de6f025e02fc63328921a4c", - "shasum": "" - }, - "require": { - "kriswallsmith/assetic": "~1.4", - "php": ">=5.3.0", - "symfony/console": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" - }, - "conflict": { - "kriswallsmith/spork": "<=0.2", - "twig/twig": "<1.27" - }, - "require-dev": { - "kriswallsmith/spork": "~0.3", - "patchwork/jsqueeze": "~1.0", - "symfony/class-loader": "~2.3|~3.0", - "symfony/css-selector": "~2.3|~3.0", - "symfony/dom-crawler": "~2.3|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/twig-bundle": "~2.3|~3.0" - }, - "suggest": { - "kriswallsmith/spork": "to be able to dump assets in parallel", - "symfony/twig-bundle": "to use the Twig integration" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bundle\\AsseticBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kris Wallsmith", - "email": "kris.wallsmith@gmail.com", - "homepage": "http://kriswallsmith.net/" - } - ], - "description": "Integrates Assetic into Symfony2", - "homepage": "https://github.com/symfony/AsseticBundle", - "keywords": [ - "assets", - "compression", - "minification" - ], - "abandoned": "symfony/webpack-encore-pack", - "time": "2017-07-14T07:26:46+00:00" - }, - { - "name": "symfony/monolog-bundle", - "version": "v2.12.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", - "shasum": "" - }, - "require": { - "monolog/monolog": "~1.18", - "php": ">=5.3.2", - "symfony/config": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/http-kernel": "~2.3|~3.0", - "symfony/monolog-bridge": "~2.3|~3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8", - "symfony/console": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony MonologBundle", - "homepage": "http://symfony.com", - "keywords": [ - "log", - "logging" - ], - "time": "2017-01-02T19:04:26+00:00" - }, - { - "name": "symfony/polyfill-apcu", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "19e1b73bf255265ad0b568f81766ae2a3266d8d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/19e1b73bf255265ad0b568f81766ae2a3266d8d2", - "reference": "19e1b73bf255265ad0b568f81766ae2a3266d8d2", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "apcu", - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2018-08-06T14:22:27+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2018-08-06T14:22:27+00:00" - }, - { - "name": "symfony/polyfill-intl-icu", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "f22a90256d577c7ef7efad8df1f0201663d57644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644", - "reference": "f22a90256d577c7ef7efad8df1f0201663d57644", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/intl": "~2.3|~3.0|~4.0" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's ICU-related data and classes", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], - "time": "2018-08-06T14:22:27+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-09-21T13:07:52+00:00" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "ff208829fe1aa48ab9af356992bb7199fed551af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af", - "reference": "ff208829fe1aa48ab9af356992bb7199fed551af", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2018-09-21T06:26:08+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2018-09-21T06:26:08+00:00" - }, - { - "name": "symfony/polyfill-util", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "3b58903eae668d348a7126f999b0da0f2f93611c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c", - "reference": "3b58903eae668d348a7126f999b0da0f2f93611c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "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 utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "time": "2018-09-30T16:36:12+00:00" - }, - { - "name": "symfony/swiftmailer-bundle", - "version": "v2.6.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "c4808f5169efc05567be983909d00f00521c53ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec", - "reference": "c4808f5169efc05567be983909d00f00521c53ec", - "shasum": "" - }, - "require": { - "php": ">=5.3.2", - "swiftmailer/swiftmailer": "~4.2|~5.0", - "symfony/config": "~2.7|~3.0", - "symfony/dependency-injection": "~2.7|~3.0", - "symfony/http-kernel": "~2.7|~3.0" - }, - "require-dev": { - "symfony/console": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0", - "symfony/phpunit-bridge": "~3.3@dev", - "symfony/yaml": "~2.7|~3.0" - }, - "suggest": { - "psr/log": "Allows logging" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bundle\\SwiftmailerBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony SwiftmailerBundle", - "homepage": "http://symfony.com", - "time": "2017-10-19T01:06:41+00:00" - }, - { - "name": "symfony/symfony", - "version": "v3.4.21", - "source": { - "type": "git", - "url": "https://github.com/symfony/symfony.git", - "reference": "c7a57e0bcc3c57ae697f072b3e862487b6fd0030" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/c7a57e0bcc3c57ae697f072b3e862487b6fd0030", - "reference": "c7a57e0bcc3c57ae697f072b3e862487b6fd0030", - "shasum": "" - }, - "require": { - "doctrine/common": "~2.4", - "ext-xml": "*", - "fig/link-util": "^1.0", - "php": "^5.5.9|>=7.0.8", - "psr/cache": "~1.0", - "psr/container": "^1.0", - "psr/link": "^1.0", - "psr/log": "~1.0", - "psr/simple-cache": "^1.0", - "symfony/polyfill-apcu": "~1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.6", - "twig/twig": "^1.35|^2.4.4" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", - "phpdocumentor/type-resolver": "<0.3.0", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" - }, - "provide": { - "psr/cache-implementation": "1.0", - "psr/container-implementation": "1.0", - "psr/log-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" - }, - "replace": { - "symfony/asset": "self.version", - "symfony/browser-kit": "self.version", - "symfony/cache": "self.version", - "symfony/class-loader": "self.version", - "symfony/config": "self.version", - "symfony/console": "self.version", - "symfony/css-selector": "self.version", - "symfony/debug": "self.version", - "symfony/debug-bundle": "self.version", - "symfony/dependency-injection": "self.version", - "symfony/doctrine-bridge": "self.version", - "symfony/dom-crawler": "self.version", - "symfony/dotenv": "self.version", - "symfony/event-dispatcher": "self.version", - "symfony/expression-language": "self.version", - "symfony/filesystem": "self.version", - "symfony/finder": "self.version", - "symfony/form": "self.version", - "symfony/framework-bundle": "self.version", - "symfony/http-foundation": "self.version", - "symfony/http-kernel": "self.version", - "symfony/inflector": "self.version", - "symfony/intl": "self.version", - "symfony/ldap": "self.version", - "symfony/lock": "self.version", - "symfony/monolog-bridge": "self.version", - "symfony/options-resolver": "self.version", - "symfony/process": "self.version", - "symfony/property-access": "self.version", - "symfony/property-info": "self.version", - "symfony/proxy-manager-bridge": "self.version", - "symfony/routing": "self.version", - "symfony/security": "self.version", - "symfony/security-bundle": "self.version", - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version", - "symfony/serializer": "self.version", - "symfony/stopwatch": "self.version", - "symfony/templating": "self.version", - "symfony/translation": "self.version", - "symfony/twig-bridge": "self.version", - "symfony/twig-bundle": "self.version", - "symfony/validator": "self.version", - "symfony/var-dumper": "self.version", - "symfony/web-link": "self.version", - "symfony/web-profiler-bundle": "self.version", - "symfony/web-server-bundle": "self.version", - "symfony/workflow": "self.version", - "symfony/yaml": "self.version" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/annotations": "~1.0", - "doctrine/cache": "~1.6", - "doctrine/data-fixtures": "1.0.*", - "doctrine/dbal": "~2.4", - "doctrine/doctrine-bundle": "~1.4", - "doctrine/orm": "~2.4,>=2.4.5", - "egulias/email-validator": "~1.2,>=1.2.8|~2.0", - "monolog/monolog": "~1.11", - "ocramius/proxy-manager": "~0.4|~1.0|~2.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "predis/predis": "~1.0", - "symfony/phpunit-bridge": "~3.4|~4.0", - "symfony/security-acl": "~2.8|~3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", - "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", - "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", - "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", - "Symfony\\Bundle\\": "src/Symfony/Bundle/", - "Symfony\\Component\\": "src/Symfony/Component/" - }, - "classmap": [ - "src/Symfony/Component/Intl/Resources/stubs" - ], - "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": "The Symfony PHP framework", - "homepage": "https://symfony.com", - "keywords": [ - "framework" - ], - "time": "2019-01-06T15:54:26+00:00" - }, - { - "name": "twig/extensions", - "version": "v1.5.4", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig-extensions.git", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202", - "reference": "57873c8b0c1be51caa47df2cdb824490beb16202", - "shasum": "" - }, - "require": { - "twig/twig": "^1.27|^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4", - "symfony/translation": "^2.7|^3.4" - }, - "suggest": { - "symfony/translation": "Allow the time_diff output to be translated" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_Extensions_": "lib/" - }, - "psr-4": { - "Twig\\Extensions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Common additional features for Twig that do not directly belong in core", - "keywords": [ - "i18n", - "text" - ], - "time": "2018-12-05T18:34:18+00:00" - }, - { - "name": "twig/twig", - "version": "v2.6.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "a11dd39f5b6589e14f0ff3b36675d06047c589b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1", - "reference": "a11dd39f5b6589e14f0ff3b36675d06047c589b1", - "shasum": "" - }, - "require": { - "php": "^7.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/debug": "^2.7", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - }, - "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": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", - "role": "Contributors" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "time": "2018-12-16T10:36:48+00:00" - }, - { - "name": "zendframework/zend-code", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb", - "reference": "c21db169075c6ec4b342149f446e7b7b724f95eb", - "shasum": "" - }, - "require": { - "php": "^7.1", - "zendframework/zend-eventmanager": "^2.6 || ^3.0" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "zendframework/zend-coding-standard": "^1.0.0", - "zendframework/zend-stdlib": "^2.7 || ^3.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev", - "dev-develop": "3.4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", - "keywords": [ - "code", - "zf2" - ], - "time": "2018-08-13T20:36:59+00:00" - }, - { - "name": "zendframework/zend-eventmanager", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0" - }, - "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://github.com/zendframework/zend-eventmanager", - "keywords": [ - "event", - "eventmanager", - "events", - "zf2" - ], - "time": "2018-04-25T15:33:34+00:00" - } - ], - "packages-dev": [ - { - "name": "beberlei/assert", - "version": "v2.9.6", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2018-06-11T17:15:25+00:00" - }, - { - "name": "behat/behat", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Behat.git", - "reference": "e4bce688be0c2029dc1700e46058d86428c63cab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/e4bce688be0c2029dc1700e46058d86428c63cab", - "reference": "e4bce688be0c2029dc1700e46058d86428c63cab", - "shasum": "" - }, - "require": { - "behat/gherkin": "^4.5.1", - "behat/transliterator": "^1.2", - "container-interop/container-interop": "^1.2", - "ext-mbstring": "*", - "php": ">=5.3.3", - "psr/container": "^1.0", - "symfony/class-loader": "~2.1||~3.0", - "symfony/config": "~2.3||~3.0||~4.0", - "symfony/console": "~2.7.40||^2.8.33||~3.3.15||^3.4.3||^4.0.3", - "symfony/dependency-injection": "~2.1||~3.0||~4.0", - "symfony/event-dispatcher": "~2.1||~3.0||~4.0", - "symfony/translation": "~2.3||~3.0||~4.0", - "symfony/yaml": "~2.1||~3.0||~4.0" - }, - "require-dev": { - "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^4.8.36|^6.3", - "symfony/process": "~2.5|~3.0|~4.0" - }, - "bin": [ - "bin/behat" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.5.x-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Behat": "src/", - "Behat\\Testwork": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Scenario-oriented BDD framework for PHP 5.3", - "homepage": "http://behat.org/", - "keywords": [ - "Agile", - "BDD", - "ScenarioBDD", - "Scrum", - "StoryBDD", - "User story", - "business", - "development", - "documentation", - "examples", - "symfony", - "testing" - ], - "time": "2018-08-10T18:56:51+00:00" - }, - { - "name": "behat/gherkin", - "version": "v4.5.1", - "source": { - "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Gherkin DSL parser for PHP 5.3", - "homepage": "http://behat.org/", - "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "time": "2017-08-30T11:04:43+00:00" - }, - { - "name": "behat/mink", - "version": "v1.7.1", - "source": { - "type": "git", - "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "shasum": "" - }, - "require": { - "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" - }, - "suggest": { - "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", - "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", - "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Mink\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Browser controller/emulator abstraction for PHP", - "homepage": "http://mink.behat.org/", - "keywords": [ - "browser", - "testing", - "web" - ], - "time": "2016-03-05T08:26:18+00:00" - }, - { - "name": "behat/mink-browserkit-driver", - "version": "1.3.3", - "source": { - "type": "git", - "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/1b9a7ce903cfdaaec5fb32bfdbb26118343662eb", - "reference": "1b9a7ce903cfdaaec5fb32bfdbb26118343662eb", - "shasum": "" - }, - "require": { - "behat/mink": "^1.7.1@dev", - "php": ">=5.3.6", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0" - }, - "require-dev": { - "mink/driver-testsuite": "dev-master", - "symfony/http-kernel": "~2.3|~3.0|~4.0" - }, - "type": "mink-driver", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Mink\\Driver\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Symfony2 BrowserKit driver for Mink framework", - "homepage": "http://mink.behat.org/", - "keywords": [ - "Mink", - "Symfony2", - "browser", - "testing" - ], - "time": "2018-05-02T09:25:31+00:00" - }, - { - "name": "behat/mink-extension", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/Behat/MinkExtension.git", - "reference": "80f7849ba53867181b7e412df9210e12fba50177" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/80f7849ba53867181b7e412df9210e12fba50177", - "reference": "80f7849ba53867181b7e412df9210e12fba50177", - "shasum": "" - }, - "require": { - "behat/behat": "^3.0.5", - "behat/mink": "^1.5", - "php": ">=5.3.2", - "symfony/config": "^2.7|^3.0|^4.0" - }, - "require-dev": { - "behat/mink-goutte-driver": "^1.1", - "phpspec/phpspec": "^2.0" - }, - "type": "behat-extension", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\MinkExtension": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - }, - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" - } - ], - "description": "Mink extension for Behat", - "homepage": "http://extensions.behat.org/mink", - "keywords": [ - "browser", - "gui", - "test", - "web" - ], - "time": "2018-02-06T15:36:30+00:00" - }, - { - "name": "behat/symfony2-extension", - "version": "2.1.5", - "source": { - "type": "git", - "url": "https://github.com/Behat/Symfony2Extension.git", - "reference": "d7c834487426a784665f9c1e61132274dbf2ea26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/d7c834487426a784665f9c1e61132274dbf2ea26", - "reference": "d7c834487426a784665f9c1e61132274dbf2ea26", - "shasum": "" - }, - "require": { - "behat/behat": "^3.4.3", - "php": ">=5.3.3", - "symfony/framework-bundle": "~2.0|~3.0|~4.0" - }, - "require-dev": { - "behat/mink": "~1.7@dev", - "behat/mink-browserkit-driver": "~1.3@dev", - "behat/mink-extension": "~2.0", - "phpspec/phpspec": "~2.0|~3.0|~4.0", - "phpunit/phpunit": "~4.0|~5.0", - "symfony/symfony": "~2.1|~3.0|~4.0" - }, - "type": "behat-extension", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Symfony2Extension": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - }, - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" - } - ], - "description": "Symfony2 framework extension for Behat", - "homepage": "http://behat.org", - "keywords": [ - "BDD", - "framework", - "symfony" - ], - "time": "2018-04-20T15:48:23+00:00" - }, - { - "name": "container-interop/container-interop", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "shasum": "" - }, - "require": { - "psr/container": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14T19:40:03+00:00" - }, - { - "name": "sensio/generator-bundle", - "version": "v3.1.7", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65", - "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65", - "shasum": "" - }, - "require": { - "symfony/console": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0", - "symfony/process": "~2.7|~3.0", - "symfony/yaml": "~2.7|~3.0", - "twig/twig": "^1.28.2|^2.0" - }, - "require-dev": { - "doctrine/orm": "~2.4", - "symfony/doctrine-bridge": "~2.7|~3.0", - "symfony/filesystem": "~2.7|~3.0", - "symfony/phpunit-bridge": "^3.3" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Sensio\\Bundle\\GeneratorBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "This bundle generates code for you", - "time": "2017-12-07T15:36:41+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=7.1.1" - }, - "platform-dev": [] -} diff --git a/docker-compose.yml b/docker-compose.yml index e58e9df1..3b69bfc8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,49 +1,65 @@ ############################################################################### # Generated on phpdocker.io # ############################################################################### -version: "3.1" +version: "3.4" services: - memcached: - image: memcached:alpine - container_name: phpdocker-io-memcached - - mailhog: - image: mailhog/mailhog:latest - container_name: phpdocker-io-mailhog + # Main gateway to act as reverse proxy for all the other services via https://phpdocker.local + # Uses the same certs as the others - we don't need them if we close their outside p + gateway: + depends_on: + - api + - frontend + - mailhog + image: nginx:alpine + working_dir: /application + volumes: + - .:/application + - ./infrastructure/local/gateway.nginx.conf:/etc/nginx/conf.d/default.conf ports: - - "10001:8025" + - "443:443" + - "80:80" - mysql: - image: mysql:5.7 - container_name: phpdocker-io-mysql + database: + image: postgres:9.6-alpine working_dir: /application volumes: - .:/application environment: - - MYSQL_ROOT_PASSWORD=root-password - - MYSQL_DATABASE=phpdockerio - - MYSQL_USER=username - - MYSQL_PASSWORD=password - ports: - - "10002:3306" + - POSTGRES_USER=root + - POSTGRES_PASSWORD=root + - POSTGRES_DB=phpdocker - webserver: + api: image: nginx:alpine - container_name: phpdocker-io-webserver working_dir: /application volumes: - - .:/application - - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ports: - - "10000:80" + - ./backend:/application + - ./backend/docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf + - ./infrastructure/local:/etc/infrastructure php-fpm: - build: phpdocker/php-fpm - container_name: phpdocker-io-php-fpm + build: + dockerfile: docker/php-fpm/Dockerfile + context: backend + target: base + working_dir: /application + volumes: + - ./backend:/application + - ./backend/docker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini + + frontend: + image: node:12.0-alpine working_dir: /application + stdin_open: true # Regression in react-scripts 3.4.1, fixed in 4.0 https://github.com/facebook/create-react-app/pull/8845 environment: - - SYMFONY_ENV=dev + - REACT_APP_POST_API_URI=https://api.phpdocker.local/content/posts + - REACT_APP_CONTACT_API_URI=https://api.phpdocker.local/contact + - REACT_APP_GENERATOR_API_URI=https://api.phpdocker.local/generator volumes: - - .:/application - - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini + - ./frontend:/application + - ./infrastructure/local:/etc/infrastructure + command: yarn start + + mailhog: + image: mailhog/mailhog:latest diff --git a/etc/sites-enabled/phpdocker.io.conf b/etc/sites-enabled/phpdocker.io.conf deleted file mode 100644 index 44a26aa3..00000000 --- a/etc/sites-enabled/phpdocker.io.conf +++ /dev/null @@ -1,62 +0,0 @@ - - ServerName www.phpdocker.io - ServerAlias *.phpdocker.io - - RewriteEngine On - RewriteRule ^(.*)$ http://phpdocker.io$1 [R=301,L] - - - - ServerName phpdocker.io - - ## Vhost docroot - DocumentRoot "/var/www/phpdocker.io/web" - - ## PHP-FPM - ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/phpdocker.io/web/$1 - - ## Make HTTP basic auth work - SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 - - ## 301 to HTTPS - RewriteEngine On - RewriteCond %{HTTPS} !=on - RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] - - ## Directories, there should at least be a declaration for /var/www/phpdocker.io/public - - Options Indexes FollowSymlinks MultiViews - AllowOverride All - Require all granted - - # Enable pretty-urls on app - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^(.*)$ app.php [QSA,L] - - # Redirect www to non-www - RewriteBase / - RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] - RewriteRule ^(.*)$ http://%1/$1 [R=301,L] - - - - Deny from all - - - ## Mod expires - - - ExpiresActive On - ExpiresDefault "access plus 1 week" - - - - ## Logging - ServerSignature Off - ErrorLog "/var/log/apache2/phpdocker.io_error.log" - CustomLog "/var/log/apache2/phpdocker.io_access.log" combined - - ## SetEnv/SetEnvIf for environment variables - SetEnv SYMFONY_ENV prod - diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 00000000..3674ce05 --- /dev/null +++ b/frontend/.env @@ -0,0 +1,3 @@ +REACT_APP_POST_API_URI = "https://phpdocker.local:5002/content/posts" +REACT_APP_CONTACT_API_URI = "https://phpdocker.local:5002/contact" +REACT_APP_GENERATOR_API_URI = "https://phpdocker.local:5002/generator" diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..897dc836 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,44 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..53227a28 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,35 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "dot-object": "^1.7.1", + "formik": "^1.5.1", + "formik-semantic-ui": "^0.10.0", + "jsonld": "^1.5.1", + "react": "^16.7.0", + "react-dom": "^16.7.0", + "react-jsonschema-form": "^1.5.0", + "react-router": "^4.3.1", + "react-router-dom": "^4.3.1", + "react-scripts": "^3.0", + "save-file": "^2.3.1", + "fomantic-ui-css": "^2.8.6", + "semantic-ui-react": "^1.0.0" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] +} diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 00000000..8a14c3f9 --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,39 @@ + + + + + + + + + + PHPDocker.io - PHP and Docker development environment generator + + + +
+ + + diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 00000000..1f2f141f --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 00000000..92f956e8 --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,32 @@ +.App { + text-align: center; +} + +.App-logo { + animation: App-logo-spin infinite 20s linear; + height: 40vmin; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/frontend/src/App.js b/frontend/src/App.js new file mode 100644 index 00000000..0af5cd1f --- /dev/null +++ b/frontend/src/App.js @@ -0,0 +1,60 @@ +import React, { Component } from 'react' +import List from './Posts/List' +import Generator from './Generator/Generator' +import Contact from './Contact' +import './App.css' +import 'fomantic-ui-css/semantic.min.css'; +import { Menu } from 'semantic-ui-react' +import { BrowserRouter as Router, Link, Route } from 'react-router-dom' + +class App extends Component { + state = {} + handleItemClick = (e, { name }) => this.setState({ activeItem: name }) + + render () { + const { activeItem } = this.state + + return ( +
+ + + +
+ + + + + + + + + + + +
+
+
+ ) + } +} + +export default App diff --git a/frontend/src/App.test.js b/frontend/src/App.test.js new file mode 100644 index 00000000..a754b201 --- /dev/null +++ b/frontend/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); + ReactDOM.unmountComponentAtNode(div); +}); diff --git a/frontend/src/Contact.js b/frontend/src/Contact.js new file mode 100644 index 00000000..d6bd4229 --- /dev/null +++ b/frontend/src/Contact.js @@ -0,0 +1,92 @@ +import React, { Component } from 'react' +import { Button, Form } from 'formik-semantic-ui' + +const { contactApiUri } = require('./config') + +class List extends Component { + constructor (props) { + super(props) + + this.state = {} + } + + componentDidMount () { + + } + + handleSubmit = async (email, message) => { + const result = await fetch(contactApiUri, { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify({ + email, + message + }) + }) + + if (result.status !== 200) { + const response = await result.json() + if (response.errors) { + const errors = {} + + for (let { property, description } of response.errors) { + errors[property] = description + } + + throw errors + } + + return true + } + } + + render () { + + return ( +
+

Contact

+
{ + this.handleSubmit(values.email, values.message, actions).then( + ok => {}, + errors => { + actions.setSubmitting(false) + actions.setErrors(errors) + actions.setStatus({ msg: 'Set some arbitrary status or data' }) + }) + }} + + schema={{ + email: { + inputProps: { + placeholder: 'Your email', + }, + type: 'text', + }, + message: { + type: 'textarea', + inputProps: { + placeholder: 'Feedback, recommendations, feature requests...', + } + } + }} + > + + Send your message + +

+ Privacy notice: this contact form sends an email to the website maintainer with your + email address as + reply-to, and obviously your message. Other than my email inbox, neither your email address nor your + message are stored or logged anywhere else nor will they be used for anything other than replying back + to you. +

+
+
+ ) + } +} + +export default List diff --git a/frontend/src/Generator/ElasticSearchOptions.js b/frontend/src/Generator/ElasticSearchOptions.js new file mode 100644 index 00000000..f1537531 --- /dev/null +++ b/frontend/src/Generator/ElasticSearchOptions.js @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import { Checkbox, Dropdown, } from './controls/index' +import { Form } from 'semantic-ui-react' + +import { enumToOptions } from './semanticUiTools' + +import { capitalize } from '../util' + +class ElasticSearchOptions extends Component { + render () { + const properties = this.props.schema.properties + const schemaNode = 'elasticsearchOptions' + + if (properties === undefined) { + return null + } + + const esOptions = properties[schemaNode] + + const name = esOptions.title + const enableFieldName = 'has' + capitalize(name.toLowerCase()) + const dbVersions = enumToOptions(esOptions.properties.version) + + return ( +
+ {name} + + + + + + + +
+ ) + } +} + +export default ElasticSearchOptions diff --git a/frontend/src/Generator/Generator.js b/frontend/src/Generator/Generator.js new file mode 100644 index 00000000..2639a618 --- /dev/null +++ b/frontend/src/Generator/Generator.js @@ -0,0 +1,171 @@ +/* + * Copyright 2019 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import Form2 from 'react-jsonschema-form' +import { saveSync } from 'save-file' +import { Button, Form } from 'semantic-ui-react' +import { Formik } from 'formik' + +import ProjectOptions from './ProjectOptions' +import ZeroConfigServiceOptions from './ZeroConfigServiceOptions' +import MySQLCompatibleOptions from './MySQLCompatibleOptions' +import ElasticSearchOptions from './ElasticSearchOptions' + +import 'fomantic-ui-css/semantic.min.css'; +import './generator.css' + + +import { randomRange } from '../util' +import PostgresOptions from './PostgresOptions' + +const { generatorApiUri } = require('../config') + +class Generator extends Component { + constructor (props) { + super(props) + + this.state = { + formSchema: {}, + } + } + + handleRequestErrors = (response, formik) => { + switch (true) { + case response.ok: + return response.json() + + case response.status === 400: + response.json() + .then(json => { + json.errors.forEach(error => { + formik.setFieldError(error.property, error.description) + }) + + formik.setSubmitting(false) + }) + break + + default: + formik.setSubmitting(false) + break + + } + + throw Error('Failed to generate project due to errors in the request') + } + + handleRequestSuccess = (json, formik) => { + saveSync(json.base64Blob, json.filename) + formik.setSubmitting(false) + } + + submitProject = (values, formik) => { + const request = new Request(generatorApiUri, { + method: 'POST', + headers: new Headers(), + body: JSON.stringify(values) + }) + + request.headers.append('accept', 'application/json') + + fetch(request) + .then(response => { + return this.handleRequestErrors(response, formik) + }) + .then(json => { + this.handleRequestSuccess(json, formik) + }) + .catch(error => { + console.error(error.message) + }) + } + + componentDidMount () { + const request = new Request(generatorApiUri, { + method: 'GET', + headers: new Headers() + }) + + request.headers.append('accept', 'application/json') + + fetch(request) + .then(response => { + return response.json() + }) + .then(schema => { + this.setState({ + formSchema: schema + }) + }) + } + + renderForm = ({ handleSubmit, handleReset, isSubmitting }) => ( +
+ + + + + + + + + + + ) + + /* + * @todo: find a way to do default values properly. Setting these here as using the input props + * doesn't seem to trigger setFieldValue in Formik. + */ + render () { + return ( +
+

Generator

+ + + +
+

Schema'd form

+ +
+ ) + } +} + +export default Generator diff --git a/frontend/src/Generator/MySQLCompatibleOptions.js b/frontend/src/Generator/MySQLCompatibleOptions.js new file mode 100644 index 00000000..cc0fbc41 --- /dev/null +++ b/frontend/src/Generator/MySQLCompatibleOptions.js @@ -0,0 +1,99 @@ +/* + * Copyright 2019 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import { Checkbox, Dropdown, Input, } from './controls/index' +import { Form } from 'semantic-ui-react' + +import { enumToOptions, getPlaceholder } from './semanticUiTools' + +import { capitalize } from '../util' + +class MySQLCompatibleOptions extends Component { + render () { + const properties = this.props.schema.properties + const schemaNode = this.props.schemaNode + + if (properties === undefined) { + return null + } + + const dbOptions = properties[schemaNode] + + const name = dbOptions.title + const enableFieldName = 'has' + capitalize(name.toLowerCase()) + const dbVersions = enumToOptions(dbOptions.properties.version) + + return ( +
+ {name} + + + + + + + + + + + + + +
+ ) + } +} + +export default MySQLCompatibleOptions diff --git a/frontend/src/Generator/PostgresOptions.js b/frontend/src/Generator/PostgresOptions.js new file mode 100644 index 00000000..549af3ee --- /dev/null +++ b/frontend/src/Generator/PostgresOptions.js @@ -0,0 +1,92 @@ +/* + * Copyright 2019 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import { Checkbox, Dropdown, Input, } from './controls/index' +import { Form } from 'semantic-ui-react' + +import { enumToOptions, getPlaceholder } from './semanticUiTools' + +import { capitalize } from '../util' + +class PostgresOptions extends Component { + render () { + const properties = this.props.schema.properties + const schemaNode = 'postgresOptions' + + if (properties === undefined) { + return null + } + + const dbOptions = properties[schemaNode] + + const name = dbOptions.title + const enableFieldName = 'has' + capitalize(name.toLowerCase()) + const dbVersions = enumToOptions(dbOptions.properties.version) + + return ( +
+ {name} + + + + + + + + + + + + +
+ ) + } +} + +export default PostgresOptions diff --git a/frontend/src/Generator/ProjectOptions.js b/frontend/src/Generator/ProjectOptions.js new file mode 100644 index 00000000..576dee6a --- /dev/null +++ b/frontend/src/Generator/ProjectOptions.js @@ -0,0 +1,89 @@ +/* + * Copyright 2019 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import { Form } from 'semantic-ui-react' +import { Dropdown, Input, } from './controls/index' + +import { enumToOptions, getPlaceholder } from './semanticUiTools' + +class ProjectOptions extends Component { + render () { + const properties = this.props.schema.properties + + if (properties === undefined) { + return null + } + + const appOptions = properties.applicationOptions.properties + const appTypeOptions = enumToOptions(appOptions.applicationType) + + return ( +
+ Project options + + + + + + + + + +
+ ) + } +} + +export default ProjectOptions diff --git a/frontend/src/Generator/ZeroConfigServiceOptions.js b/frontend/src/Generator/ZeroConfigServiceOptions.js new file mode 100644 index 00000000..2f3992a8 --- /dev/null +++ b/frontend/src/Generator/ZeroConfigServiceOptions.js @@ -0,0 +1,74 @@ +/* + * Copyright 2019 Luis Alberto Pabón Flores + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import React, { Component } from 'react' +import { Form } from 'semantic-ui-react' + +import { Checkbox } from './controls/index' + +class ZeroConfigServiceOptions extends Component { + render () { + const properties = this.props.schema.properties + + if (properties === undefined) { + return null + } + + return ( +
+ Zero-config services + + + + + + + + + + + +
+ ) + } +} + +export default ZeroConfigServiceOptions diff --git a/frontend/src/Generator/controls/Checkbox.js b/frontend/src/Generator/controls/Checkbox.js new file mode 100644 index 00000000..3d2409a9 --- /dev/null +++ b/frontend/src/Generator/controls/Checkbox.js @@ -0,0 +1,60 @@ +/* + * Lifted from https://github.com/justinobney/formik-semantic-ui-example + */ + +import React, { Component } from 'react' +import { Checkbox, Form } from 'semantic-ui-react' +import { Field } from 'formik' +const dot = require('dot-object') + +let fieldCounter = 0 + +class FormikCheckbox extends Component { + constructor (props) { + super(props) + this.id = props.id || `field_checkbox_${fieldCounter++}` + } + + render () { + const { name, label, inputProps = {}, fieldProps = {} } = this.props + return ( + { + // Even though formik serialises correctly dot notation, setFieldError creates objects - work around + const dotErrors = dot.dot(form.errors) + const error = dotErrors[name] + + return ( + + { + form.setFieldValue(name, checked, true) + }} + {...inputProps} + /> + {error && ( + + {error} + + )} + + ) + }} + /> + ) + } +} + +export default FormikCheckbox diff --git a/frontend/src/Generator/controls/Dropdown.js b/frontend/src/Generator/controls/Dropdown.js new file mode 100644 index 00000000..8967edb6 --- /dev/null +++ b/frontend/src/Generator/controls/Dropdown.js @@ -0,0 +1,76 @@ +/* + * Lifted from https://github.com/justinobney/formik-semantic-ui-example + */ + +import React, { Component } from 'react' +import { Dropdown, Form } from 'semantic-ui-react' +import { Field } from 'formik' + +const dot = require('dot-object') + +let fieldCounter = 0 + +class FormikDropdown extends Component { + constructor (props) { + super(props) + this.id = props.id || `field_dropdown_${fieldCounter++}` + } + + render () { + const { + name, + label, + options, + inputProps = {}, + fieldProps = {} + } = this.props + return ( + { + // Even though formik serialises correctly dot notation, setFieldError creates objects - work around + const dotErrors = dot.dot(form.errors) + const error = dotErrors[name] + + return ( + + {!!label && ( + + )} + (this._dropdown = el)} + id={this.id} + name={name} + options={options} + selectOnBlur={false} + selectOnNavigation={false} + selection + {...inputProps} + value={field.value} + onChange={(e, { name, value }) => { + form.setFieldValue(name, value, true) + }} + /> + {error && ( + + {error} + + )} + + ) + }} + /> + ) + } +} + +export default FormikDropdown diff --git a/frontend/src/Generator/controls/Input.js b/frontend/src/Generator/controls/Input.js new file mode 100644 index 00000000..2dbedffc --- /dev/null +++ b/frontend/src/Generator/controls/Input.js @@ -0,0 +1,61 @@ +/* + * Lifted from https://github.com/justinobney/formik-semantic-ui-example + */ + +import React, { Component } from 'react' +import { Form, Input } from 'semantic-ui-react' +import { Field } from 'formik' + +const dot = require('dot-object') + +let fieldCounter = 0 + +class FormikInput extends Component { + constructor (props) { + super(props) + this.id = props.id || `field_input_${fieldCounter++}` + } + + render () { + const { name, label, inputProps = {}, fieldProps = {} } = this.props + return ( + { + // Even though formik serialises correctly dot notation, setFieldError creates objects - work around + const dotErrors = dot.dot(form.errors) + const error = dotErrors[name] + + return ( + + {!!label && } + { + form.setFieldValue(name, value, true) + }} + {...inputProps} + /> + {error && ( + + {error} + + )} + + ) + }} + /> + ) + } +} + +export default FormikInput diff --git a/frontend/src/Generator/controls/TextArea.js b/frontend/src/Generator/controls/TextArea.js new file mode 100644 index 00000000..50e57d95 --- /dev/null +++ b/frontend/src/Generator/controls/TextArea.js @@ -0,0 +1,62 @@ +/* + * Lifted from https://github.com/justinobney/formik-semantic-ui-example + */ + +import React, { Component } from 'react' +import { Form, TextArea } from 'semantic-ui-react' +import { Field } from 'formik' + +const dot = require('dot-object') + +let fieldCounter = 0 + +class FormikTextArea extends Component { + constructor (props) { + super(props) + this.id = props.id || `field_textarea_${fieldCounter++}` + } + + render () { + const { name, label, inputProps = {}, fieldProps = {} } = this.props + return ( + { + // Even though formik serialises correctly dot notation, setFieldError creates objects - work around + const dotErrors = dot.dot(form.errors) + const error = dotErrors[name] + + return ( + + {!!label && } +