From c0d2f7d1839c313a92952792803ccb45219bf6d5 Mon Sep 17 00:00:00 2001 From: Gediminas Date: Mon, 21 Oct 2024 16:39:55 +0300 Subject: [PATCH] Project init --- .dockerignore | 34 + .editorconfig | 58 + .env.example | 30 + .env.test | 7 + .gitattributes | 17 + .github/workflows/ci.yml | 73 + .gitignore | 27 + Dockerfile | 97 + LICENSE | 19 + README.md | 88 + bin/console | 21 + bin/phpunit | 23 + compose.override.yaml | 30 + compose.prod.yaml | 10 + compose.yaml | 66 + composer.json | 88 + composer.lock | 7533 +++++++++++++++++ config/bundles.php | 11 + config/packages/cache.yaml | 19 + .../packages/dama_doctrine_test_bundle.yaml | 5 + config/packages/doctrine.yaml | 54 + config/packages/doctrine_migrations.yaml | 6 + config/packages/framework.yaml | 16 + config/packages/routing.yaml | 10 + config/packages/twig.yaml | 6 + config/packages/validator.yaml | 11 + config/preload.php | 5 + config/routes.yaml | 5 + config/routes/framework.yaml | 4 + config/services.yaml | 33 + docs/alpine.md | 29 + docs/digitalocean-dns.png | Bin 0 -> 129432 bytes docs/digitalocean-droplet.png | Bin 0 -> 163083 bytes docs/existing-project.md | 44 + docs/extra-services.md | 18 + docs/makefile.md | 97 + docs/mysql.md | 83 + docs/options.md | 71 + docs/production.md | 110 + docs/tls.md | 51 + docs/troubleshooting.md | 9 + docs/updating.md | 15 + docs/xdebug.md | 58 + frankenphp/Caddyfile | 47 + frankenphp/conf.d/10-app.ini | 13 + frankenphp/conf.d/20-app.dev.ini | 5 + frankenphp/conf.d/20-app.prod.ini | 2 + frankenphp/docker-entrypoint.sh | 60 + frankenphp/worker.Caddyfile | 4 + migrations/.gitignore | 0 phpcs.xml.dist | 19 + phpunit.xml.dist | 39 + public/.gitignore | 0 public/index.php | 9 + src/Controller/.gitignore | 0 src/DataFixtures/AppFixtures.php | 17 + src/Entity/.gitignore | 0 src/Kernel.php | 11 + src/Repository/.gitignore | 0 symfony.lock | 184 + templates/base.html.twig | 38 + tests/bootstrap.php | 13 + 62 files changed, 9452 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .env.test create mode 100644 .gitattributes create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100755 bin/console create mode 100755 bin/phpunit create mode 100644 compose.override.yaml create mode 100644 compose.prod.yaml create mode 100644 compose.yaml create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/bundles.php create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/dama_doctrine_test_bundle.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/preload.php create mode 100644 config/routes.yaml create mode 100644 config/routes/framework.yaml create mode 100644 config/services.yaml create mode 100644 docs/alpine.md create mode 100644 docs/digitalocean-dns.png create mode 100644 docs/digitalocean-droplet.png create mode 100644 docs/existing-project.md create mode 100644 docs/extra-services.md create mode 100644 docs/makefile.md create mode 100644 docs/mysql.md create mode 100644 docs/options.md create mode 100644 docs/production.md create mode 100644 docs/tls.md create mode 100644 docs/troubleshooting.md create mode 100644 docs/updating.md create mode 100644 docs/xdebug.md create mode 100644 frankenphp/Caddyfile create mode 100644 frankenphp/conf.d/10-app.ini create mode 100644 frankenphp/conf.d/20-app.dev.ini create mode 100644 frankenphp/conf.d/20-app.prod.ini create mode 100755 frankenphp/docker-entrypoint.sh create mode 100644 frankenphp/worker.Caddyfile create mode 100644 migrations/.gitignore create mode 100644 phpcs.xml.dist create mode 100644 phpunit.xml.dist create mode 100644 public/.gitignore create mode 100644 public/index.php create mode 100644 src/Controller/.gitignore create mode 100644 src/DataFixtures/AppFixtures.php create mode 100644 src/Entity/.gitignore create mode 100644 src/Kernel.php create mode 100644 src/Repository/.gitignore create mode 100644 symfony.lock create mode 100644 templates/base.html.twig create mode 100644 tests/bootstrap.php diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..dc5a875 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,34 @@ +**/*.log +**/*.md +**/*.php~ +**/*.dist.php +**/*.dist +**/*.cache +**/._* +**/.dockerignore +**/.DS_Store +**/.git/ +**/.gitattributes +**/.gitignore +**/.gitmodules +**/compose.*.yaml +**/compose.*.yml +**/compose.yaml +**/compose.yml +**/docker-compose.*.yaml +**/docker-compose.*.yml +**/docker-compose.yaml +**/docker-compose.yml +**/Dockerfile +**/Thumbs.db +.github/ +docs/ +public/bundles/ +tests/ +var/ +vendor/ +.editorconfig +.env.*.local +.env.local +.env.local.php +.env.test diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1ea8214 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,58 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +# Change these settings to your own preference +indent_style = space +indent_size = 4 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{js,html,ts,tsx}] +indent_size = 2 + +[*.json] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[*.sh] +indent_style = tab + +[*.xml{,.dist}] +indent_style = space +indent_size = 4 + +[*.{yaml,yml}] +trim_trailing_whitespace = false + +[.github/workflows/*.yml] +indent_size = 2 + +[.gitmodules] +indent_style = tab + +[.php_cs{,.dist}] +indent_style = space +indent_size = 4 + +[composer.json] +indent_size = 4 + +[{,docker-}compose{,.*}.{yaml,yml}] +indent_style = space +indent_size = 2 + +[{,*.*}Dockerfile] +indent_style = tab + +[{,*.*}Caddyfile] +indent_style = tab diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c161619 --- /dev/null +++ b/.env.example @@ -0,0 +1,30 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# https://symfony.com/doc/current/configuration/secrets.html +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=170d2f730fd872f54cbbdafd3e368c54 +###< symfony/framework-bundle ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +# +# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" +# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4" +# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4" +DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8" +###< doctrine/doctrine-bundle ### diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..57ecd8d --- /dev/null +++ b/.env.test @@ -0,0 +1,7 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='$ecretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 +PANTHER_APP_ENV=panther +PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots +DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..642c91f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +* text=auto eol=lf + +*.conf text eol=lf +*.html text eol=lf +*.ini text eol=lf +*.js text eol=lf +*.json text eol=lf +*.md text eol=lf +*.php text eol=lf +*.sh text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +bin/console text eol=lf +composer.lock text eol=lf merge=ours + +*.ico binary +*.png binary diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7d950ba --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +name: CI + +on: + push: + branches: + - main + pull_request: ~ + workflow_dispatch: ~ + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + tests: + name: Tests + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - + name: Build Docker images + uses: docker/bake-action@v4 + with: + pull: true + load: true + files: | + compose.yaml + compose.override.yaml + set: | + *.cache-from=type=gha,scope=${{github.ref}} + *.cache-from=type=gha,scope=refs/heads/main + *.cache-to=type=gha,scope=${{github.ref}},mode=max + - + name: Start services + run: docker compose up --wait --no-build + - + name: Check HTTP reachability + run: curl -v --fail-with-body http://localhost + - + name: Check HTTPS reachability + if: false # Remove this line when the homepage will be configured, or change the path to check + run: curl -vk --fail-with-body https://localhost + - + name: Create test database + if: false # Remove this line if Doctrine ORM is installed + run: docker compose exec -T php bin/console -e test doctrine:database:create + - + name: Run migrations + if: false # Remove this line if Doctrine Migrations is installed + run: docker compose exec -T php bin/console -e test doctrine:migrations:migrate --no-interaction + - + name: Run PHPUnit + if: false # Remove this line if PHPUnit is installed + run: docker compose exec -T php bin/phpunit + - + name: Doctrine Schema Validator + if: false # Remove this line if Doctrine ORM is installed + run: docker compose exec -T php bin/console -e test doctrine:schema:validate + lint: + name: Docker Lint + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Lint Dockerfile + uses: hadolint/hadolint-action@v3.1.0 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2be31bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +.idea + +###> symfony/framework-bundle ### +/.env +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/phpunit-bridge ### +.phpunit.result.cache +/phpunit.xml +###< symfony/phpunit-bridge ### + +###> phpunit/phpunit ### +/phpunit.xml +.phpunit.result.cache +###< phpunit/phpunit ### + +###> squizlabs/php_codesniffer ### +/.phpcs-cache +/phpcs.xml +###< squizlabs/php_codesniffer ### diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6bcc4f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,97 @@ +#syntax=docker/dockerfile:1 + +# Versions +FROM dunglas/frankenphp:1-php8.3 AS frankenphp_upstream + +# The different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# Base FrankenPHP image +FROM frankenphp_upstream AS frankenphp_base + +WORKDIR /app + +VOLUME /app/var/ + +# persistent / runtime deps +# hadolint ignore=DL3008 +RUN apt-get update && apt-get install -y --no-install-recommends \ + acl \ + file \ + gettext \ + git \ + && rm -rf /var/lib/apt/lists/* + +RUN set -eux; \ + install-php-extensions \ + @composer \ + apcu \ + intl \ + opcache \ + zip \ + ; + +# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser +ENV COMPOSER_ALLOW_SUPERUSER=1 + +ENV PHP_INI_SCAN_DIR=":$PHP_INI_DIR/app.conf.d" + +###> recipes ### +###> doctrine/doctrine-bundle ### +RUN install-php-extensions pdo_pgsql +###< doctrine/doctrine-bundle ### +###< recipes ### + +COPY --link frankenphp/conf.d/10-app.ini $PHP_INI_DIR/app.conf.d/ +COPY --link --chmod=755 frankenphp/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +COPY --link frankenphp/Caddyfile /etc/caddy/Caddyfile + +ENTRYPOINT ["docker-entrypoint"] + +HEALTHCHECK --start-period=60s CMD curl -f http://localhost:2019/metrics || exit 1 +CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile" ] + +# Dev FrankenPHP image +FROM frankenphp_base AS frankenphp_dev + +ENV APP_ENV=dev XDEBUG_MODE=off + +RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" + +RUN set -eux; \ + install-php-extensions \ + xdebug \ + ; + +COPY --link frankenphp/conf.d/20-app.dev.ini $PHP_INI_DIR/app.conf.d/ + +CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile", "--watch" ] + +# Prod FrankenPHP image +FROM frankenphp_base AS frankenphp_prod + +ENV APP_ENV=prod +ENV FRANKENPHP_CONFIG="import worker.Caddyfile" + +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" + +COPY --link frankenphp/conf.d/20-app.prod.ini $PHP_INI_DIR/app.conf.d/ +COPY --link frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile + +# prevent the reinstallation of vendors at every changes in the source code +COPY --link composer.* symfony.* ./ +RUN set -eux; \ + composer install --no-cache --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress + +# copy sources +COPY --link . ./ +RUN rm -Rf frankenphp/ + +RUN set -eux; \ + mkdir -p var/cache var/log; \ + composer dump-autoload --classmap-authoritative --no-dev; \ + composer dump-env prod; \ + composer run-script --no-dev post-install-cmd; \ + chmod +x bin/console; sync; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bc6b2a1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dc67252 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ + +# Event Registration System Application + +![register](https://github.com/user-attachments/assets/a1d5a98a-3621-430d-a55d-8d02937adf53) + +This Event Registration System is built with Symfony. It allows users to register for events through a web interface. This document outlines the steps required to set up the system on your local development environment. + +## Prerequisites + +Before proceeding with the setup, ensure you have the following installed on your machine: + +- Docker +- Docker Compose + +## Setup + +#### 1. **Clone the Repository** + +First, clone the repository to your local machine. Open a terminal and run the following command: + +`git clone git@github.com:gediminasnn/symfony.twig.event-registration-system.git` + +(Optional) Replace `git@github.com:gediminasnn/symfony.twig.event-registration-system.git` with the URL of repository. + +#### 2. **Navigate to the Application Directory** + +Change directory to the application root: + +`cd symfony.twig.event-registration-system` + +(Optional) Replace `symfony.twig.event-registration-system` with the path where you cloned the repository. + +#### 3. **Prepare the Environment File** + +Prepare the application's environment file. Locate the `env.example` file in the application root and create a new file named `.env` using it as a template. Optionally, edit the `.env` file to adjust any environment variables specific to your setup. + +#### 4. **Start the Docker Containers** + +Use Docker Compose to start the Docker containers. Run the following command in your terminal: + +`docker-compose up` + +This command builds and starts all containers needed for the application. The first time you run this, it might take a few minutes to download and build everything. + +#### 5. **Setup Development Database** + +After the Docker environment is up and running, set up the development database by executing the following command: + +`docker-compose exec php php bin/console doctrine:migrations:migrate` + +This command runs the migration files to create the necessary database tables for the application. + +#### 6. **Run Database Seeds** + +After successfully running the migrations, it's time to populate the database with some initial data, run the database fixtures. Ensure your Docker containers are up and running. In the terminal, execute the following command: + +`docker-compose exec php bin/console doctrine:fixtures:load` + +This command will execute the fixtures defined in your application, populating the database with sample or default data. + +#### 7. **(Optional) Run Tests** + +Ensure that your Docker containers are still up and running. Open a new terminal window or tab and execute the following command: + +`docker-compose exec php php bin/phpunit` + +This command will use phpunit's built-in test runner to execute your application's test suite. It will run all the tests located in the tests directory of your application. + +By completing this step, you will have fully set up your Event Registration System Application on your local development environment, ensuring it is ready for further development, testing, or deployment. + +## Pages documentation +### Events List +![list](https://github.com/user-attachments/assets/d1a752de-21cc-4bda-bcf0-ffce964db28f) +### Event Preview +![preview](https://github.com/user-attachments/assets/a97523bf-8fe4-4206-85ec-313349a94eeb) +### Event Registration +![register](https://github.com/user-attachments/assets/a1d5a98a-3621-430d-a55d-8d02937adf53) +### Event Registration Success +![success](https://github.com/user-attachments/assets/14390373-b257-4b01-8721-7bf623e4c3d7) +### Event Registration Error +![error](https://github.com/user-attachments/assets/bd7d3cc4-5c9d-44e0-b604-041103ff7e2a) + +## Entity Relationship Diagram +![erdiagram](https://github.com/user-attachments/assets/fb821666-3a4f-4c55-863c-4fa1e1ca3b55) + +## License + +This project is licensed under the MIT License diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..d8d530e --- /dev/null +++ b/bin/console @@ -0,0 +1,21 @@ +#!/usr/bin/env php += 80000) { + require dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit'; + } else { + define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php'); + require PHPUNIT_COMPOSER_INSTALL; + PHPUnit\TextUI\Command::main(); + } +} else { + if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) { + echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n"; + exit(1); + } + + require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php'; +} diff --git a/compose.override.yaml b/compose.override.yaml new file mode 100644 index 0000000..22e80a5 --- /dev/null +++ b/compose.override.yaml @@ -0,0 +1,30 @@ +# Development environment override +services: + php: + build: + context: . + target: frankenphp_dev + volumes: + - ./:/app + - ./frankenphp/Caddyfile:/etc/caddy/Caddyfile:ro + - ./frankenphp/conf.d/20-app.dev.ini:/usr/local/etc/php/app.conf.d/20-app.dev.ini:ro + # If you develop on Mac or Windows you can remove the vendor/ directory + # from the bind-mount for better performance by enabling the next line: + #- /app/vendor + environment: + MERCURE_EXTRA_DIRECTIVES: demo + # See https://xdebug.org/docs/all_settings#mode + XDEBUG_MODE: "${XDEBUG_MODE:-off}" + extra_hosts: + # Ensure that host.docker.internal is correctly defined on Linux + - host.docker.internal:host-gateway + tty: true + +###> symfony/mercure-bundle ### +###< symfony/mercure-bundle ### + +###> doctrine/doctrine-bundle ### + database: + ports: + - "5432" +###< doctrine/doctrine-bundle ### diff --git a/compose.prod.yaml b/compose.prod.yaml new file mode 100644 index 0000000..f0db05d --- /dev/null +++ b/compose.prod.yaml @@ -0,0 +1,10 @@ +# Production environment override +services: + php: + build: + context: . + target: frankenphp_prod + environment: + APP_SECRET: ${APP_SECRET} + MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} + MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET} diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..f53e21f --- /dev/null +++ b/compose.yaml @@ -0,0 +1,66 @@ +services: + php: + image: ${IMAGES_PREFIX:-}app-php + restart: unless-stopped + environment: + SERVER_NAME: ${SERVER_NAME:-localhost}, php:80 + MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + # Run "composer require symfony/orm-pack" to install and configure Doctrine ORM + DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:5432/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-15}&charset=${POSTGRES_CHARSET:-utf8} + # Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration + MERCURE_URL: ${CADDY_MERCURE_URL:-http://php/.well-known/mercure} + MERCURE_PUBLIC_URL: ${CADDY_MERCURE_PUBLIC_URL:-https://${SERVER_NAME:-localhost}/.well-known/mercure} + MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!} + # The two next lines can be removed after initial installation + SYMFONY_VERSION: ${SYMFONY_VERSION:-} + STABILITY: ${STABILITY:-stable} + volumes: + - caddy_data:/data + - caddy_config:/config + ports: + # HTTP + - target: 80 + published: ${HTTP_PORT:-80} + protocol: tcp + # HTTPS + - target: 443 + published: ${HTTPS_PORT:-443} + protocol: tcp + # HTTP/3 + - target: 443 + published: ${HTTP3_PORT:-443} + protocol: udp + +# Mercure is installed as a Caddy module, prevent the Flex recipe from installing another service +###> symfony/mercure-bundle ### +###< symfony/mercure-bundle ### + +###> doctrine/doctrine-bundle ### + database: + image: postgres:${POSTGRES_VERSION:-16}-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-app} + # You should definitely change the password in production + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} + POSTGRES_USER: ${POSTGRES_USER:-app} + healthcheck: + test: ["CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}"] + timeout: 5s + retries: 5 + start_period: 60s + volumes: + - database_data:/var/lib/postgresql/data:rw + # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! + # - ./docker/db/data:/var/lib/postgresql/data:rw +###< doctrine/doctrine-bundle ### + +volumes: + caddy_data: + caddy_config: +###> symfony/mercure-bundle ### +###< symfony/mercure-bundle ### + +###> doctrine/doctrine-bundle ### + database_data: +###< doctrine/doctrine-bundle ### diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..6359f79 --- /dev/null +++ b/composer.json @@ -0,0 +1,88 @@ +{ + "name": "symfony/skeleton", + "type": "project", + "license": "MIT", + "description": "A minimal Symfony project recommended to create bare bones applications", + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": ">=8.3.12", + "ext-ctype": "*", + "ext-iconv": "*", + "doctrine/dbal": "^3", + "doctrine/doctrine-bundle": "^2.13", + "doctrine/doctrine-migrations-bundle": "^3.3", + "doctrine/orm": "^3.3", + "runtime/frankenphp-symfony": "^0.2.0", + "symfony/console": "7.1.*", + "symfony/dotenv": "7.1.*", + "symfony/flex": "^2", + "symfony/form": "7.1.*", + "symfony/framework-bundle": "7.1.*", + "symfony/runtime": "7.1.*", + "symfony/security-csrf": "7.1.*", + "symfony/twig-bundle": "7.1.*", + "symfony/validator": "7.1.*", + "symfony/yaml": "7.1.*" + }, + "config": { + "allow-plugins": { + "php-http/discovery": true, + "symfony/flex": true, + "symfony/runtime": true + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*", + "symfony/polyfill-php74": "*", + "symfony/polyfill-php80": "*", + "symfony/polyfill-php81": "*", + "symfony/polyfill-php82": "*" + }, + "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": "7.1.*", + "docker": true + } + }, + "require-dev": { + "dama/doctrine-test-bundle": "^8.2", + "doctrine/doctrine-fixtures-bundle": "^3.6", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.10", + "symfony/browser-kit": "7.1.*", + "symfony/css-selector": "7.1.*", + "symfony/maker-bundle": "^1.61", + "symfony/phpunit-bridge": "^7.1" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..eb5200b --- /dev/null +++ b/composer.lock @@ -0,0 +1,7533 @@ +{ + "_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": "0378a7fb253502fefb41b8a0e2c5c770", + "packages": [ + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.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%2Fcollections", + "type": "tidelift" + } + ], + "time": "2024-04-18T06:56:21+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.9.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "9.6.20", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.9.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2024-10-10T17:56:43+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/orm": "<2.17 || >=4.0", + "twig/twig": "<1.34 || >=2.0 <2.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/coding-standard": "^12", + "doctrine/deprecations": "^1.0", + "doctrine/orm": "^2.17 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^5", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1 || ^7.0", + "symfony/property-info": "^5.4 || ^6.0 || ^7.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/string": "^5.4 || ^6.0 || ^7.0", + "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0", + "vimeo/psalm": "^5.15" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.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-bundle", + "type": "tidelift" + } + ], + "time": "2024-09-01T09:46:40+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", + "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "^2.4", + "doctrine/migrations": "^3.2", + "php": "^7.2|^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.6 || ^3", + "doctrine/persistence": "^2.0 || ^3 ", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^8.5|^9.5", + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^3 || ^5", + "symfony/phpunit-bridge": "^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6 || ^7", + "vimeo/psalm": "^4.30 || ^5.15" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.3.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2024-05-14T20:32:18+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2024-05-22T20:47:39+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "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": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.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": "2024-02-05T11:56:58+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "5007eb1168691225ac305fe16856755c20860842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", + "reference": "5007eb1168691225ac305fe16856755c20860842", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.2 || ^7.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3", + "doctrine/sql-formatter": "^1.0", + "ext-pdo_sqlite": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^10.3", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.8.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": "2024-10-10T21:35:27+00:00" + }, + { + "name": "doctrine/orm", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "69958152e661aa9c14e80d1ee4962863485aa60b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/69958152e661aa9c14e80d1ee4962863485aa60b", + "reference": "69958152e661aa9c14e80d1ee4962863485aa60b", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1", + "ext-ctype": "*", + "php": "^8.1", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.4.0", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4 || ^6.2 || ^7.0", + "vimeo/psalm": "5.24.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "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/3.3.0" + }, + "time": "2024-10-12T20:07:18+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.3.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "b337726451f5d530df338fc7f68dee8781b49779" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", + "reference": "b337726451f5d530df338fc7f68dee8781b49779", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.11.1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.30.0 || 5.24.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.3.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2024-06-20T10:14:30+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "16ca9e39877369d664f06dacde468548298bdc40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/16ca9e39877369d664f06dacde468548298bdc40", + "reference": "16ca9e39877369d664f06dacde468548298bdc40", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.0" + }, + "time": "2024-09-11T07:29:40+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "runtime/frankenphp-symfony", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-runtime/frankenphp-symfony.git", + "reference": "56822c3631d9522a3136a4c33082d006bdfe4bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-runtime/frankenphp-symfony/zipball/56822c3631d9522a3136a4c33082d006bdfe4bad", + "reference": "56822c3631d9522a3136a4c33082d006bdfe4bad", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/runtime": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Runtime\\FrankenPhpSymfony\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "kevin@dunglas.dev" + } + ], + "description": "FrankenPHP runtime for Symfony", + "support": { + "issues": "https://github.com/php-runtime/frankenphp-symfony/issues", + "source": "https://github.com/php-runtime/frankenphp-symfony/tree/0.2.0" + }, + "funding": [ + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2023-12-12T12:06:11+00:00" + }, + { + "name": "symfony/cache", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/86e5296b10e4dec8c8441056ca606aedb8a3be0a", + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.1.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": "2024-09-17T09:16:35+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/config", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/console", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "38465f925ec4e0707b090e9147c65869837d639d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/38465f925ec4e0707b090e9147c65869837d639d", + "reference": "38465f925ec4e0707b090e9147c65869837d639d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/2568d0adaa5b0018b07beaa90363b880a43cc957", + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "doctrine/data-fixtures": "^1.1", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.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": "2024-09-08T12:32:26+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "6d966200b399fa59759286f3fc7c919f0677c449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/6d966200b399fa59759286f3fc7c919f0677c449", + "reference": "6d966200b399fa59759286f3fc7c919f0677c449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/process": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.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/v7.1.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": "2024-09-17T09:16:35+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-07-26T13:02:51+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.1.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": "2024-09-17T09:16:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.1.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": "2024-08-13T14:28:19+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.4.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "conflict": { + "composer/semver": "<1.7.2" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.4.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-07T08:51:54+00:00" + }, + { + "name": "symfony/form", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/6b8b53ad6d42f14b158c896163b96ff260d78222", + "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/options-resolver": "^6.4|^7.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/error-handler": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/8a792de86230c13a9de7750c0c8b23cc083183d4", + "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^7.1.5", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^7.1", + "symfony/finder": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<6.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.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": "2024-09-20T13:35:23+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.1.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": "2024-09-21T06:09:21+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/4ad96eb7cf9e2f8f133ada95f2b8021769061662", + "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "6c709f97103355016e5782d0622437ae381012ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.1.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": "2024-08-30T16:12:47+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "^7.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-07-26T07:36:36+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.1.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": "2024-08-29T08:16:25+00:00" + }, + { + "name": "symfony/runtime", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/ea34522c447dd91a2b31cb330ee4540a56ba53f6", + "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.2" + }, + "conflict": { + "symfony/dotenv": "<6.4" + }, + "require-dev": { + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:55:39+00:00" + }, + { + "name": "symfony/security-core", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/dbeb09f0b786590d126c0da297e2320e66ec353b", + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/validator": "^6.4|^7.0" + }, + "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/v7.1.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": "2024-09-20T13:35:23+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/27cd1bce9d7f3457a152a6ca9790712d6954dd21", + "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-foundation": "^6.4|^7.0" + }, + "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/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/string", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e997e5025b53c0f7b17632802daefdd6a04540ae", + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.9" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.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": "2024-09-15T06:48:17+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", + "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.1.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": "2024-09-08T12:32:26+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-info": "<6.4" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.1.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": "2024-09-19T21:48:23+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "e57592782dc2a86997477f28164c51af53512ad8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/e57592782dc2a86997477f28164c51af53512ad8", + "reference": "e57592782dc2a86997477f28164c51af53512ad8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v7.1.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": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "e20e03889539fd4e4211e14d2179226c513c010d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", + "reference": "e20e03889539fd4e4211e14d2179226c513c010d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.1.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": "2024-09-16T10:07:02+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-06-28T08:00:31+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.1.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": "2024-09-17T12:49:58+00:00" + }, + { + "name": "twig/twig", + "version": "v3.14.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "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.14.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-09-09T17:55:12+00:00" + } + ], + "packages-dev": [ + { + "name": "dama/doctrine-test-bundle", + "version": "v8.2.0", + "source": { + "type": "git", + "url": "https://github.com/dmaicher/doctrine-test-bundle.git", + "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/1f81a280ea63f049d24e9c8ce00e557b18e0ff2f", + "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.3 || ^4.0", + "doctrine/doctrine-bundle": "^2.11.0", + "php": "^7.4 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^5.4 || ^6.3 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0" + }, + "require-dev": { + "behat/behat": "^3.0", + "friendsofphp/php-cs-fixer": "^3.27", + "phpstan/phpstan": "^1.2", + "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0 || ^11.0", + "symfony/phpunit-bridge": "^6.3", + "symfony/process": "^5.4 || ^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.3 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Maicher", + "email": "mail@dmaicher.de" + } + ], + "description": "Symfony bundle to isolate doctrine database tests and improve test performance", + "keywords": [ + "doctrine", + "isolation", + "performance", + "symfony", + "testing", + "tests" + ], + "support": { + "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.2.0" + }, + "time": "2024-05-28T15:41:06+00:00" + }, + { + "name": "doctrine/data-fixtures", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", + "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1.0", + "doctrine/persistence": "^2.0|^3.0", + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.5 || >=5", + "doctrine/orm": "<2.14 || >=4", + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/annotations": "^1.12 || ^2", + "doctrine/coding-standard": "^12", + "doctrine/dbal": "^3.5 || ^4", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.14 || ^3", + "ext-sqlite3": "*", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6.13 || ^10.4.2", + "symfony/cache": "^5.4 || ^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6.3 || ^7", + "vimeo/psalm": "^5.9" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/1.7.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%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2023-11-24T11:18:31+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/d13a08ebf244f74c8adb8ff15aa55d01c404e534", + "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.3", + "doctrine/doctrine-bundle": "^2.2", + "doctrine/orm": "^2.14.0 || ^3.0", + "doctrine/persistence": "^2.4|^3.0", + "php": "^7.4 || ^8.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/doctrine-bridge": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0" + }, + "conflict": { + "doctrine/dbal": "< 3" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10.39", + "phpunit/phpunit": "^9.6.13", + "symfony/phpunit-bridge": "^6.3.6", + "vimeo/psalm": "^5.15" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.6.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2024-05-07T07:16:35+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:39:25+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + }, + "time": "2024-10-08T18:51:32+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:23:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.21", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-09-19T10:50:18+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "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.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.10.3", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-09-18T10:38:58+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "9c13742e3175b5815e272b981876ae329bec2040" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9c13742e3175b5815e272b981876ae329bec2040", + "reference": "9c13742e3175b5815e272b981876ae329bec2040", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/dom-crawler": "^6.4|^7.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "b92af238457a7cdd2738f941cd525d76313e8283" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b92af238457a7cdd2738f941cd525d76313e8283", + "reference": "b92af238457a7cdd2738f941cd525d76313e8283", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v7.1.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": "2024-09-15T06:48:17+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.61.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^4.18|^5.0", + "php": ">=8.1", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.10", + "doctrine/orm": "<2.15" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.5.0", + "doctrine/orm": "^2.15|^3", + "symfony/http-client": "^6.4|^7.0", + "symfony/phpunit-bridge": "^6.4.1|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0|^4.x-dev" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "dev", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.61.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": "2024-08-29T22:50:23+00:00" + }, + { + "name": "symfony/phpunit-bridge", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "conflict": { + "phpunit/phpunit": "<7.5|9.1.2" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/error-handler": "^5.4|^6.4|^7.0", + "symfony/polyfill-php81": "^1.27" + }, + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", + "extra": { + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Bridge\\PhpUnit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides utilities for PHPUnit, especially user deprecation notices management", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.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": "2024-08-13T14:28:19+00:00" + }, + { + "name": "symfony/process", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "5c03ee6369281177f07f7c68252a280beccba847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.1.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": "2024-09-19T21:48:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.3.12", + "ext-ctype": "*", + "ext-iconv": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..2f08179 --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,11 @@ + ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], +]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..6899b72 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/dama_doctrine_test_bundle.yaml b/config/packages/dama_doctrine_test_bundle.yaml new file mode 100644 index 0000000..3482cba --- /dev/null +++ b/config/packages/dama_doctrine_test_bundle.yaml @@ -0,0 +1,5 @@ +when@test: + dama_doctrine_test: + enable_static_connection: true + enable_static_meta_data_cache: true + enable_static_query_cache: true diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 0000000..25138b9 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,54 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '16' + + profiling_collect_backtrace: '%kernel.debug%' + use_savepoints: true + orm: + auto_generate_proxy_classes: true + enable_lazy_ghost_objects: true + report_fields_where_declared: true + validate_xml_mapping: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + identity_generation_preferences: + Doctrine\DBAL\Platforms\PostgreSQLPlatform: identity + auto_mapping: true + mappings: + App: + type: attribute + is_bundle: false + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App + controller_resolver: + auto_mapping: false + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..29231d9 --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' + enable_profiler: false diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..f64e9d0 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,16 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + csrf_protection: true + + # Note that the session will be started ONLY if you read or write from it. + session: true + + #esi: true + #fragments: true + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..8166181 --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,10 @@ +framework: + router: + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..3f795d9 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,6 @@ +twig: + file_name_pattern: '*.twig' + +when@test: + twig: + strict_variables: true diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 0000000..dd47a6a --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,11 @@ +framework: + validation: + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + #auto_mapping: + # App\Entity\: [] + +when@test: + framework: + validation: + not_compromised_password: false diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 0000000..5ebcdb2 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ +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 qux@lc<*9`Vga)cnN#$^EK0_i@(z*}sI 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 Pz@PkG6`4{g)8PLD`yHC| literal 0 HcmV?d00001 diff --git a/docs/digitalocean-droplet.png b/docs/digitalocean-droplet.png new file mode 100644 index 0000000000000000000000000000000000000000..be27e499047310ace23dd05879e864efc162e0dc GIT binary patch literal 163083 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ℑGP@~vaKR|#boD* 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 literal 0 HcmV?d00001 diff --git a/docs/existing-project.md b/docs/existing-project.md new file mode 100644 index 0000000..14b2677 --- /dev/null +++ b/docs/existing-project.md @@ -0,0 +1,44 @@ +# Installing on an Existing Project + +It's also possible to use Symfony Docker with existing projects! + +First, [download this skeleton](https://github.com/dunglas/symfony-docker). + +If you cloned the Git repository, be sure to not copy the `.git` directory to prevent conflicts with the `.git` directory already in your existing project. +You can copy the contents of the repository using git and tar. This will not contain `.git` or any uncommited changes. + + git archive --format=tar HEAD | tar -xC my-existing-project/ + +If you downloaded the skeleton as a zip you can just copy the extracted files: + + cp -Rp symfony-docker/. my-existing-project/ + +Enable the Docker support of Symfony Flex: + + composer config --json extra.symfony.docker 'true' + +Re-execute the recipes to update the Docker-related files according to the packages you use + + rm symfony.lock + composer recipes:install --force --verbose + +Double-check the changes, revert the changes that you don't want to keep: + + git diff + ... + +Build the Docker images: + + docker compose build --no-cache --pull + +Start the project! + + docker compose up -d + +Browse `https://localhost`, your Docker configuration is ready! + +> [!NOTE] +> If you want to use the worker mode of FrankenPHP, make sure you required the `runtime/frankenphp-symfony` package. + +> [!NOTE] +> The worker mode of FrankenPHP is enabled by default in prod. To disabled it, add the env var FRANKENPHP_CONFIG as empty to the compose.prod.yaml file. diff --git a/docs/extra-services.md b/docs/extra-services.md new file mode 100644 index 0000000..851e549 --- /dev/null +++ b/docs/extra-services.md @@ -0,0 +1,18 @@ +# Support for Extra Services + +Symfony Docker is extensible. When you install a compatible Composer package using Symfony Flex, +the recipe will automatically modify the `Dockerfile` and `compose.yaml` to fulfill the requirements of this package. + +The currently supported packages are: + +* `symfony/orm-pack`: install a PostgreSQL service +* `symfony/mercure-bundle`: use the Mercure.rocks module shipped with Caddy +* `symfony/panther`: install chromium and these drivers +* `symfony/mailer`: install a Mailpit service +* `blackfireio/blackfire-symfony-meta`: install a Blackfire service + +> [!NOTE] +> If a recipe modifies the Dockerfile, the container needs to be rebuilt. + +> [!WARNING] +> We recommend that you use the `composer require` command inside the container in development mode so that recipes can be applied correctly diff --git a/docs/makefile.md b/docs/makefile.md new file mode 100644 index 0000000..80c4d20 --- /dev/null +++ b/docs/makefile.md @@ -0,0 +1,97 @@ +# Makefile + +Here is a Makefile template. It provides some shortcuts for the most common tasks. +To use it, create a new `Makefile` file at the root of your project. Copy/paste +the content in the template section. To view all the available commands, run `make`. + +For example, in the [getting started section](/README.md#getting-started), the +`docker compose` commands could be replaced by: + +1. Run `make build` to build fresh images +2. Run `make up` (detached mode without logs) +3. Run `make down` to stop the Docker containers + +Of course, this template is basic for now. But, as your application is growing, +you will probably want to add some targets like running your tests as described +in [the Symfony book](https://symfony.com/doc/current/the-fast-track/en/17-tests.html#automating-your-workflow-with-a-makefile). +You can also find a more complete example in this [snippet](https://www.strangebuzz.com/en/snippets/the-perfect-makefile-for-symfony). + +If you want to run make from within the `php` container, in the [Dockerfile](/Dockerfile), +add: + +```diff +gettext \ +git \ ++make \ +``` + +And rebuild the PHP image. + +> [!NOTE] +> If you are using Windows, you have to install [chocolatey.org](https://chocolatey.org/) or [Cygwin](http://cygwin.com) to use the `make` command. Check out this [StackOverflow question](https://stackoverflow.com/q/2532234/633864) for more explanations. + +## The template + +```Makefile +# Executables (local) +DOCKER_COMP = docker compose + +# Docker containers +PHP_CONT = $(DOCKER_COMP) exec php + +# Executables +PHP = $(PHP_CONT) php +COMPOSER = $(PHP_CONT) composer +SYMFONY = $(PHP) bin/console + +# Misc +.DEFAULT_GOAL = help +.PHONY : help build up start down logs sh composer vendor sf cc test + +## —— 🎵 🐳 The Symfony Docker Makefile 🐳 🎵 —————————————————————————————————— +help: ## Outputs this help screen + @grep -E '(^[a-zA-Z0-9\./_-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}{printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' | sed -e 's/\[32m##/[33m/' + +## —— Docker 🐳 ———————————————————————————————————————————————————————————————— +build: ## Builds the Docker images + @$(DOCKER_COMP) build --pull --no-cache + +up: ## Start the docker hub in detached mode (no logs) + @$(DOCKER_COMP) up --detach + +start: build up ## Build and start the containers + +down: ## Stop the docker hub + @$(DOCKER_COMP) down --remove-orphans + +logs: ## Show live logs + @$(DOCKER_COMP) logs --tail=0 --follow + +sh: ## Connect to the FrankenPHP container + @$(PHP_CONT) sh + +bash: ## Connect to the FrankenPHP container via bash so up and down arrows go to previous commands + @$(PHP_CONT) bash + +test: ## Start tests with phpunit, pass the parameter "c=" to add options to phpunit, example: make test c="--group e2e --stop-on-failure" + @$(eval c ?=) + @$(DOCKER_COMP) exec -e APP_ENV=test php bin/phpunit $(c) + + +## —— Composer 🧙 —————————————————————————————————————————————————————————————— +composer: ## Run composer, pass the parameter "c=" to run a given command, example: make composer c='req symfony/orm-pack' + @$(eval c ?=) + @$(COMPOSER) $(c) + +vendor: ## Install vendors according to the current composer.lock file +vendor: c=install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction +vendor: composer + +## —— Symfony 🎵 ——————————————————————————————————————————————————————————————— +sf: ## List all Symfony commands or pass the parameter "c=" to run a given command, example: make sf c=about + @$(eval c ?=) + @$(SYMFONY) $(c) + +cc: c=c:c ## Clear the cache +cc: sf +``` diff --git a/docs/mysql.md b/docs/mysql.md new file mode 100644 index 0000000..ee6f599 --- /dev/null +++ b/docs/mysql.md @@ -0,0 +1,83 @@ +# Using MySQL + +The Docker configuration of this repository is extensible thanks to Flex recipes. By default, the recipe installs PostgreSQL. +If you prefer to work with MySQL, follow these steps: + +First, install the `symfony/orm-pack` package as described: `docker compose exec php composer req symfony/orm-pack` + +## Docker Configuration +Change the database image to use MySQL instead of PostgreSQL in `compose.yaml`: + +```diff +###> doctrine/doctrine-bundle ### +- image: postgres:${POSTGRES_VERSION:-15}-alpine ++ image: mysql:${MYSQL_VERSION:-8} + environment: +- POSTGRES_DB: ${POSTGRES_DB:-app} ++ MYSQL_DATABASE: ${MYSQL_DATABASE:-app} + # You should definitely change the password in production ++ MYSQL_RANDOM_ROOT_PASSWORD: "true" +- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} ++ MYSQL_PASSWORD: ${MYSQL_PASSWORD:-!ChangeMe!} +- POSTGRES_USER: ${POSTGRES_USER:-app} ++ MYSQL_USER: ${MYSQL_USER:-app} + healthcheck: +- test: ["CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}"] ++ test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] + timeout: 5s + retries: 5 + start_period: 60s + volumes: +- - database_data:/var/lib/postgresql/data:rw ++ - database_data:/var/lib/mysql:rw + # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! +- # - ./docker/db/data:/var/lib/postgresql/data:rw ++ # - ./docker/db/data:/var/lib/mysql:rw +###< doctrine/doctrine-bundle ### +``` + +Depending on the database configuration, modify the environment in the same file at `services.php.environment.DATABASE_URL` +``` +DATABASE_URL: mysql://${MYSQL_USER:-app}:${MYSQL_PASSWORD:-!ChangeMe!}@database:3306/${MYSQL_DATABASE:-app}?serverVersion=${MYSQL_VERSION:-8}&charset=${MYSQL_CHARSET:-utf8mb4} +``` + +Since we changed the port, we also have to define this in the `compose.override.yaml`: +```diff +###> doctrine/doctrine-bundle ### + database: + ports: +- - "5432" ++ - "3306" +###< doctrine/doctrine-bundle ### +``` + +Last but not least, we need to install the MySQL driver in `Dockerfile`: +```diff +###> doctrine/doctrine-bundle ### +-RUN install-php-extensions pdo_pgsql ++RUN install-php-extensions pdo_mysql +###< doctrine/doctrine-bundle ### +``` + +## Change Environment +Change the database configuration in `.env`: + +```dotenv +DATABASE_URL=mysql://${MYSQL_USER:-app}:${MYSQL_PASSWORD:-!ChangeMe!}@database:3306/${MYSQL_DATABASE:-app}?serverVersion=${MYSQL_VERSION:-8}&charset=${MYSQL_CHARSET:-utf8mb4} +``` + +## Final steps +Rebuild the docker environment: +```shell +docker compose down --remove-orphans && docker compose build --pull --no-cache +``` + +Start the services: +```shell +docker compose up -d +``` + +Test your setup: +```shell +docker compose exec php bin/console dbal:run-sql -q "SELECT 1" && echo "OK" || echo "Connection is not working" +``` diff --git a/docs/options.md b/docs/options.md new file mode 100644 index 0000000..a6bca26 --- /dev/null +++ b/docs/options.md @@ -0,0 +1,71 @@ +# Docker Build Options + +You can customize the docker build process using these environment variables. + +> [!NOTE] +> All Symfony-specific environment variables are used only if no `composer.json` file is found in the project directory. + +## Selecting a Specific Symfony Version + +Use the `SYMFONY_VERSION` environment variable to select a specific Symfony version. + +For instance, use the following command to install Symfony 6.4: + +On Linux: + + SYMFONY_VERSION=6.4.* docker compose up -d --wait +On Windows: + + set SYMFONY_VERSION=6.4.* && docker compose up -d --wait&set SYMFONY_VERSION= + +## Installing Development Versions of Symfony + +To install a non-stable version of Symfony, use the `STABILITY` environment variable during the build. +The value must be [a valid Composer stability option](https://getcomposer.org/doc/04-schema.md#minimum-stability). + +For instance, use the following command to use the development branch of Symfony: + +On Linux: + + STABILITY=dev docker compose up -d --wait + +On Windows: + + set STABILITY=dev && docker compose up -d --wait&set STABILITY= + +## Using custom HTTP ports + +Use the environment variables `HTTP_PORT`, `HTTPS_PORT` and/or `HTTP3_PORT` to adjust the ports to your needs, e.g. + + HTTP_PORT=8000 HTTPS_PORT=4443 HTTP3_PORT=4443 docker compose up -d --wait + +to access your application on [https://localhost:4443](https://localhost:4443). + +> [!NOTE] +> Let's Encrypt only supports the standard HTTP and HTTPS ports. Creating a Let's Encrypt certificate for another port will not work, you have to use the standard ports or to configure Caddy to use another provider. + + +## Caddyfile Options + +You can also customize the `Caddyfile` by using the following environment variables to inject options block, directive or configuration. + +> [!TIP] +> All the following environment variables can be defined in your `.env` file at the root of the project to keep them persistent at each startup + +| Environment variable | Description | Default value | +|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------| +| `CADDY_GLOBAL_OPTIONS` | the [global options block](https://caddyserver.com/docs/caddyfile/options#global-options), one per line | | +| `CADDY_EXTRA_CONFIG` | the [snippet](https://caddyserver.com/docs/caddyfile/concepts#snippets) or the [named-routes](https://caddyserver.com/docs/caddyfile/concepts#named-routes) options block, one per line | | +| `CADDY_SERVER_EXTRA_DIRECTIVES` | the [`Caddyfile` directives](https://caddyserver.com/docs/caddyfile/concepts#directives) | | +| `SERVER_NAME` | the server name or address | `localhost` | +| `FRANKENPHP_CONFIG` | a list of extra [FrankenPHP directives](https://frankenphp.dev/docs/config/#caddyfile-config), one per line | `import worker.Caddyfile` | +| `MERCURE_TRANSPORT_URL` | the value passed to the `transport_url` directive | `bolt://mercure.db` | +| `MERCURE_PUBLISHER_JWT_KEY` | the JWT key to use for publishers | | +| `MERCURE_PUBLISHER_JWT_ALG` | the JWT algorithm to use for publishers | `HS256` | +| `MERCURE_SUBSCRIBER_JWT_KEY` | the JWT key to use for subscribers | | +| `MERCURE_SUBSCRIBER_JWT_ALG` | the JWT algorithm to use for subscribers | `HS256` | +| `MERCURE_EXTRA_DIRECTIVES` | a list of extra [Mercure directives](https://mercure.rocks/docs/hub/config), one per line | | + +### Example of server name customize: + + SERVER_NAME="app.localhost" docker compose up -d --wait diff --git a/docs/production.md b/docs/production.md new file mode 100644 index 0000000..d02001d --- /dev/null +++ b/docs/production.md @@ -0,0 +1,110 @@ +# Deploying in Production + +Symfony Docker provides Docker images, and a Docker Compose definition optimized for production usage. +In this tutorial, we will learn how to deploy our Symfony application on a single server using Docker Compose. + +## Preparing a Server + +To deploy your application in production, you need a server. +In this tutorial, we will use a virtual machine provided by DigitalOcean, but any Linux server can work. +If you already have a Linux server with Docker Compose installed, you can skip straight to [the next section](#configuring-a-domain-name). + +Otherwise, use [this affiliate link](https://m.do.co/c/5d8aabe3ab80) to get $100 of free credit, create an account, then click on "Create a Droplet". +Then, click on the "Marketplace" tab under the "Choose an image" section and search for the app named "Docker". +This will provision an Ubuntu server with the latest versions of Docker and Docker Compose already installed! + +For test purposes, the cheapest plans will be enough, even though you might want at least 2GB of RAM to execute Docker Compose for the first time. For real production usage, you'll probably want to pick a plan in the "general purpose" section to fit your needs. + +![Deploying a Symfony app on DigitalOcean with Docker Compose](digitalocean-droplet.png) + +You can keep the defaults for other settings, or tweak them according to your needs. +Don't forget to add your SSH key or create a password then press the "Finalize and create" button. + +Then, wait a few seconds while your Droplet is provisioning. +When your Droplet is ready, use SSH to connect: + +```console +ssh root@ +``` + +## Configuring a Domain Name + +In most cases, you'll want to associate a domain name with your site. +If you don't own a domain name yet, you'll have to buy one through a registrar. + +Then create a DNS record of type `A` for your domain name pointing to the IP address of your server: + +```dns +your-domain-name.example.com. IN A 207.154.233.113 +``` + +Example with the DigitalOcean Domains service ("Networking" > "Domains"): + +![Configuring DNS on DigitalOcean](digitalocean-dns.png) + +> [!NOTE] +> Let's Encrypt, the service used by default by Symfony Docker to automatically generate a TLS certificate doesn't support using bare IP addresses. Using a domain name is mandatory to use Let's Encrypt. + +## Deploying + +Copy your project on the server using `git clone`, `scp`, or any other tool that may fit your need. +If you use GitHub, you may want to use [a deploy key](https://docs.github.com/en/free-pro-team@latest/developers/overview/managing-deploy-keys#deploy-keys). +Deploy keys are also [supported by GitLab](https://docs.gitlab.com/ee/user/project/deploy_keys/). + +Example with Git: + +```console +git clone git@github.com:/.git +``` + +Go into the directory containing your project (``), and start the app in production mode: + +```console +SERVER_NAME=your-domain-name.example.com \ +APP_SECRET=ChangeMe \ +CADDY_MERCURE_JWT_SECRET=ChangeThisMercureHubJWTSecretKey \ +docker compose -f compose.yaml -f compose.prod.yaml up -d --wait +``` + +Be sure to replace `your-domain-name.example.com` with your actual domain name and to set the values of `APP_SECRET`, `CADDY_MERCURE_JWT_SECRET` to cryptographically secure random values. + +Your server is up and running, and a HTTPS certificate has been automatically generated for you. +Go to `https://your-domain-name.example.com` and enjoy! + +> [!NOTE] +> The worker mode of FrankenPHP is enabled by default in prod. To disable it, add the env var FRANKENPHP_CONFIG as empty to the compose.prod.yaml file. + +> [!CAUTION] +> Docker can have a cache layer, make sure you have the right build for each deployment or rebuild your project with --no-cache option to avoid cache issue. + +## Disabling HTTPS + +Alternatively, if you don't want to expose an HTTPS server but only an HTTP one, run the following command: + +```console +SERVER_NAME=:80 \ +APP_SECRET=ChangeMe \ +CADDY_MERCURE_JWT_SECRET=ChangeThisMercureHubJWTSecretKey \ +docker compose -f compose.yaml -f compose.prod.yaml up -d --wait +``` + +## Deploying on Multiple Nodes + +If you want to deploy your app on a cluster of machines, you can use [Docker Swarm](https://docs.docker.com/engine/swarm/stack-deploy/), +which is compatible with the provided Compose files. +To deploy on Kubernetes, take a look at [the Helm chart provided with API Platform](https://api-platform.com/docs/deployment/kubernetes/), which can be easily adapted for use with Symfony Docker. + +## Passing local environment variables to containers + +By default, `.env.local` and `.env.*.local` files are excluded from production images. +If you want to pass them to your containers, you can use the [`env_file` attribute](https://docs.docker.com/compose/environment-variables/set-environment-variables/#use-the-env_file-attribute): + +```yaml +# compose.prod.yml + +services: + php: + env_file: + - .env.prod.local + # ... +``` diff --git a/docs/tls.md b/docs/tls.md new file mode 100644 index 0000000..c3b64f6 --- /dev/null +++ b/docs/tls.md @@ -0,0 +1,51 @@ +# TLS Certificates + +## Trusting the Authority + +With a standard installation, the authority used to sign certificates generated in the Caddy container is not trusted by your local machine. +You must add the authority to the trust store of the host : + +``` +# Mac +$ docker cp $(docker compose ps -q php):/data/caddy/pki/authorities/local/root.crt /tmp/root.crt && sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /tmp/root.crt +# Linux +$ docker cp $(docker compose ps -q php):/data/caddy/pki/authorities/local/root.crt /usr/local/share/ca-certificates/root.crt && sudo update-ca-certificates +# Windows +$ docker compose cp php:/data/caddy/pki/authorities/local/root.crt %TEMP%/root.crt && certutil -addstore -f "ROOT" %TEMP%/root.crt +``` + +## Using Custom TLS Certificates + +By default, Caddy will automatically generate TLS certificates using Let's Encrypt or ZeroSSL. +But sometimes you may prefer using custom certificates. + +For instance, to use self-signed certificates created with [mkcert](https://github.com/FiloSottile/mkcert) do as follows: + +1. Locally install `mkcert` +2. Create the folder storing the certs: + `mkdir frankenphp/certs -p` +3. Generate the certificates for your local host (example: "server-name.localhost"): + `mkcert -cert-file frankenphp/certs/tls.pem -key-file frankenphp/certs/tls.key "server-name.localhost"` +4. Add these lines to the `./compose.override.yaml` file about `CADDY_SERVER_EXTRA_DIRECTIVES` environment and volume for the `php` service : + ```diff + php: + environment: + + CADDY_SERVER_EXTRA_DIRECTIVES: "tls /etc/caddy/certs/tls.pem /etc/caddy/certs/tls.key" + # ... + volumes: + + - ./frankenphp/certs:/etc/caddy/certs:ro + - ./public:/app/public:ro + ``` +5. Restart your `php` service + +## Disabling HTTPS for Local Development + +To disable HTTPS, configure your environment to use HTTP by setting the following variables and starting the project with this command: + +```bash +SERVER_NAME=http://localhost \ +MERCURE_PUBLIC_URL=http://localhost/.well-known/mercure \ +docker compose up --pull always -d --wait +``` + +Ensure your application is accessible over HTTP by visiting `http://localhost` in your web browser. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..88ae99c --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,9 @@ +# Troubleshooting + +## Editing Permissions on Linux + +If you work on linux and cannot edit some of the project files right after the first installation, you can run `docker compose run --rm php chown -R $(id -u):$(id -g) .` to set yourself as owner of the project files that were created by the docker container. + +## TLS/HTTPS Issues + +See more in the [TLS section](tls.md) diff --git a/docs/updating.md b/docs/updating.md new file mode 100644 index 0000000..f406d56 --- /dev/null +++ b/docs/updating.md @@ -0,0 +1,15 @@ +# Updating Your Project + +To import the changes made to the *Symfony Docker* template into your project, we recommend using +[*template-sync*](https://github.com/coopTilleuls/template-sync): + +1. Run the script to synchronize your project with the latest version of the skeleton: + + ```console + curl -sSL https://raw.githubusercontent.com/coopTilleuls/template-sync/main/template-sync.sh | sh -s -- https://github.com/dunglas/symfony-docker + ``` + +2. Resolve conflicts, if any +3. Run `git cherry-pick --continue` + +For more advanced options, refer to [the documentation of *template sync*](https://github.com/coopTilleuls/template-sync#template-sync). diff --git a/docs/xdebug.md b/docs/xdebug.md new file mode 100644 index 0000000..7ae2ccb --- /dev/null +++ b/docs/xdebug.md @@ -0,0 +1,58 @@ +# Using Xdebug + +The default development image is shipped with [Xdebug](https://xdebug.org/), +a popular debugger and profiler for PHP. + +Because it has a significant performance overhead, the step-by-step debugger is disabled by default. +It can be enabled by setting the `XDEBUG_MODE` environment variable to `debug`. + +On Linux and Mac: + +``` +XDEBUG_MODE=debug docker compose up -d +``` + +On Windows: + +``` +set XDEBUG_MODE=debug&& docker compose up -d&set XDEBUG_MODE= +``` + +## Debugging with Xdebug and PHPStorm + +First, [create a PHP debug remote server configuration](https://www.jetbrains.com/help/phpstorm/creating-a-php-debug-server-configuration.html): + +1. In the `Settings/Preferences` dialog, go to `PHP | Servers` +2. Create a new server: + * Name: `symfony` (or whatever you want to use for the variable `PHP_IDE_CONFIG`) + * Host: `localhost` (or the one defined using the `SERVER_NAME` environment variable) + * Port: `443` + * Debugger: `Xdebug` + * Check `Use path mappings` + * Absolute path on the server: `/app` + +You can now use the debugger! + +1. In PHPStorm, open the `Run` menu and click on `Start Listening for PHP Debug Connections` +2. Add the `XDEBUG_SESSION=PHPSTORM` query parameter to the URL of the page you want to debug, or use [other available triggers](https://xdebug.org/docs/step_debug#activate_debugger) + + Alternatively, you can use [the **Xdebug extension**](https://xdebug.org/docs/step_debug#browser-extensions) for your preferred web browser. + +3. On command line, we might need to tell PHPStorm which [path mapping configuration](https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging-cli.html#configure-path-mappings) should be used, set the value of the PHP_IDE_CONFIG environment variable to `serverName=symfony`, where `symfony` is the name of the debug server configured higher. + + Example: + + ```console + XDEBUG_SESSION=1 PHP_IDE_CONFIG="serverName=symfony" php bin/console ... + ``` + +## Troubleshooting + +Inspect the installation with the following command. The Xdebug version should be displayed. + +```console +$ docker compose exec php php --version + +PHP ... + with Xdebug v3.x.x ... +``` diff --git a/frankenphp/Caddyfile b/frankenphp/Caddyfile new file mode 100644 index 0000000..b8bb57d --- /dev/null +++ b/frankenphp/Caddyfile @@ -0,0 +1,47 @@ +{ + {$CADDY_GLOBAL_OPTIONS} + + frankenphp { + {$FRANKENPHP_CONFIG} + } +} + +{$CADDY_EXTRA_CONFIG} + +{$SERVER_NAME:localhost} { + log { + # Redact the authorization query parameter that can be set by Mercure + format filter { + request>uri query { + replace authorization REDACTED + } + } + } + + root * /app/public + encode zstd br gzip + + mercure { + # Transport to use (default to Bolt) + transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db} + # Publisher JWT key + publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG} + # Subscriber JWT key + subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG} + # Allow anonymous subscribers (double-check that it's what you want) + anonymous + # Enable the subscription API (double-check that it's what you want) + subscriptions + # Extra directives + {$MERCURE_EXTRA_DIRECTIVES} + } + + vulcain + + {$CADDY_SERVER_EXTRA_DIRECTIVES} + + # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics + header ?Permissions-Policy "browsing-topics=()" + + php_server +} diff --git a/frankenphp/conf.d/10-app.ini b/frankenphp/conf.d/10-app.ini new file mode 100644 index 0000000..79a17dd --- /dev/null +++ b/frankenphp/conf.d/10-app.ini @@ -0,0 +1,13 @@ +expose_php = 0 +date.timezone = UTC +apc.enable_cli = 1 +session.use_strict_mode = 1 +zend.detect_unicode = 0 + +; https://symfony.com/doc/current/performance.html +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +opcache.enable_file_override = 1 diff --git a/frankenphp/conf.d/20-app.dev.ini b/frankenphp/conf.d/20-app.dev.ini new file mode 100644 index 0000000..e50f43d --- /dev/null +++ b/frankenphp/conf.d/20-app.dev.ini @@ -0,0 +1,5 @@ +; See https://docs.docker.com/desktop/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host +; See https://github.com/docker/for-linux/issues/264 +; The `client_host` below may optionally be replaced with `discover_client_host=yes` +; Add `start_with_request=yes` to start debug session on each request +xdebug.client_host = host.docker.internal diff --git a/frankenphp/conf.d/20-app.prod.ini b/frankenphp/conf.d/20-app.prod.ini new file mode 100644 index 0000000..3bcaa71 --- /dev/null +++ b/frankenphp/conf.d/20-app.prod.ini @@ -0,0 +1,2 @@ +opcache.preload_user = root +opcache.preload = /app/config/preload.php diff --git a/frankenphp/docker-entrypoint.sh b/frankenphp/docker-entrypoint.sh new file mode 100755 index 0000000..9823560 --- /dev/null +++ b/frankenphp/docker-entrypoint.sh @@ -0,0 +1,60 @@ +#!/bin/sh +set -e + +if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then + # Install the project the first time PHP is started + # After the installation, the following block can be deleted + if [ ! -f composer.json ]; then + rm -Rf tmp/ + composer create-project "symfony/skeleton $SYMFONY_VERSION" tmp --stability="$STABILITY" --prefer-dist --no-progress --no-interaction --no-install + + cd tmp + cp -Rp . .. + cd - + rm -Rf tmp/ + + composer require "php:>=$PHP_VERSION" runtime/frankenphp-symfony + composer config --json extra.symfony.docker 'true' + + if grep -q ^DATABASE_URL= .env; then + echo "To finish the installation please press Ctrl+C to stop Docker Compose and run: docker compose up --build -d --wait" + sleep infinity + fi + fi + + if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then + composer install --prefer-dist --no-progress --no-interaction + fi + + if grep -q ^DATABASE_URL= .env; then + echo "Waiting for database to be ready..." + ATTEMPTS_LEFT_TO_REACH_DATABASE=60 + until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do + if [ $? -eq 255 ]; then + # If the Doctrine command exits with 255, an unrecoverable error occurred + ATTEMPTS_LEFT_TO_REACH_DATABASE=0 + break + fi + sleep 1 + ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) + echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left." + done + + if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then + echo "The database is not up or not reachable:" + echo "$DATABASE_ERROR" + exit 1 + else + echo "The database is now ready and reachable" + fi + + if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then + php bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing + fi + fi + + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var +fi + +exec docker-php-entrypoint "$@" diff --git a/frankenphp/worker.Caddyfile b/frankenphp/worker.Caddyfile new file mode 100644 index 0000000..d384ae4 --- /dev/null +++ b/frankenphp/worker.Caddyfile @@ -0,0 +1,4 @@ +worker { + file ./public/index.php + env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime +} diff --git a/migrations/.gitignore b/migrations/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..89195e2 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,19 @@ + + + + + + + + + + + + bin/ + config/ + public/ + src/ + tests/ + + diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..01988de --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + tests + + + + + + src + + + + + + + + + + + diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..9982c21 --- /dev/null +++ b/public/index.php @@ -0,0 +1,9 @@ +persist($product); + + $manager->flush(); + } +} diff --git a/src/Entity/.gitignore b/src/Entity/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..779cd1f --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,11 @@ + + + + + {% block title %}Welcome!{% endblock %} + + + + + {% block stylesheets %} + {% endblock %} + + +

+ +
+ {% for label, messages in app.flashes %} + {% for message in messages %} + + {% endfor %} + {% endfor %} + + {% block body %}{% endblock %} +
+ + + + {% block javascripts %} + {% endblock %} + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..47a5855 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,13 @@ +bootEnv(dirname(__DIR__).'/.env'); +} + +if ($_SERVER['APP_DEBUG']) { + umask(0000); +}