diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..b3e97bf --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,30 @@ +# PHP CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-php/ for more details +# +version: 2 +jobs: + php74: + docker: + - image: circleci/php:7.4-cli-node-browsers + steps: + - checkout + - run: php -v + - run: cp .env.example .env + - run: composer install --no-interaction --prefer-source --no-suggest + - run: php vendor/bin/phpunit --colors=always + php80: + docker: + - image: circleci/php:8.0-cli-node-browsers + steps: + - checkout + - run: php -v + - run: cp .env.example .env + - run: composer install --no-interaction --prefer-source --no-suggest + - run: php vendor/bin/phpunit --colors=always +workflows: + version: 2 + build: + jobs: + - php74 + - php80 diff --git a/.editorconfig b/.editorconfig index 27e2667..91aebb8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,8 +11,5 @@ indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true -[*.md] -trim_trailing_whitespace = false - [*.yml] indent_size = 2 diff --git a/.env.example b/.env.example index 45292b1..eeba99f 100644 --- a/.env.example +++ b/.env.example @@ -1,14 +1,47 @@ -APP_ENV=dev -APP_DISPLAY_ERRORS=1 +# +# The application URL +# +# Must contain scheme, host and port (if not standard) +# +APP_URL="http://localhost:3000" -DATABASE_URL="mysql://user:password@127.0.0.1:3306/acme" +# +# The application environment +# +# Use only the following values: dev, test, stage or prod +# +APP_ENV="dev" +# +# If set to 1, debug info will be logged +# +# In the production MUST be set to 0 +# +APP_DEBUG=1 + +# +# If set to 1, fatal errors will not be displayed +# +# In the production MUST be set to 1 +# +APP_SILENT=0 + +# +# Database server address to which you will write +# +DB_MASTER_URL="mysql://user:password@localhost:3306/acme?charset=utf8mb4" + +# +# Database server address from which you will read +# +# If replication is not configured, just duplicate the address of the master server +# +DB_SLAVE_URL="mysql://user:password@localhost:3306/acme?charset=utf8mb4" + +# +# Telegram logging +# TELEGRAM_URL="https://api.telegram.org" -TELEGRAM_TOKEN= -TELEGRAM_RECIPIENT= -TELEGRAM_LEVEL=ERROR - -CORS_DEBUG=1 -CORS_SERVER_ORIGIN_SCHEME=http -CORS_SERVER_ORIGIN_HOST="127.0.0.1" -CORS_SERVER_ORIGIN_PORT=3000 +TELEGRAM_TOKEN="" +TELEGRAM_RECIPIENT="" +TELEGRAM_LEVEL="ERROR" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..bdea986 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +*.php.dev linguist-language=PHP +*.php.test linguist-language=PHP +*.php.stage linguist-language=PHP +*.php.prod linguist-language=PHP +*.php.local linguist-language=PHP diff --git a/.gitignore b/.gitignore index 7d11e10..d7ccb34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,14 @@ +/.down /.env /.php_cs.cache +/.phpunit.result.cache /.rr.yml +/coverage.xml /phpbench.json /phpcs.xml /phpunit.xml +/cache/* /config/definitions/*.php.local /tests/db/*.sqlite /vendor/ +!.gitkeep diff --git a/.rr.yml.example b/.rr.yml.example index 6e8e608..089d0a0 100644 --- a/.rr.yml.example +++ b/.rr.yml.example @@ -3,7 +3,7 @@ rpc: http: address: 0.0.0.0:3000 workers: - command: "php bin/roadrunner-worker pipes" + command: "php bin/worker-roadrunner pipes" pool: numWorkers: 4 - maxJobs: 0 + maxJobs: 1000 diff --git a/.scrutinizer.yml b/.scrutinizer.yml index d95425d..6bbb005 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -1,4 +1,9 @@ build: + environment: + php: + version: '8.0' + ini: + 'xdebug.mode': 'coverage' nodes: analysis: tests: @@ -6,6 +11,8 @@ build: - php-scrutinizer-run coverage: tests: + before: + - command: cp .env.example .env override: - command: php vendor/bin/phpunit --coverage-clover coverage.xml coverage: diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 56e0076..0000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: php - -matrix: - include: - - php: 7.3 - fast_finish: true - -before_install: - - travis_retry composer self-update - -install: - - travis_retry composer install --no-interaction --prefer-source --no-suggest - -script: php vendor/bin/phpunit --colors=always --coverage-text diff --git a/README.md b/README.md index a5a958a..28991a6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -## Awesome Skeleton for modern development on PHP 7.3+ +## Awesome Skeleton for modern development on PHP 7.4+ (incl. PHP 8) -[![Build Status](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/badges/build.png?b=master)](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/build-status/master) +> Contains quality tested packages, thoughtful structure and everything you need to develop microservices. + +[![Build Status](https://circleci.com/gh/sunrise-php/awesome-skeleton.svg?style=shield)](https://circleci.com/gh/sunrise-php/awesome-skeleton) [![Code Coverage](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/sunrise-php/awesome-skeleton/?branch=master) [![Total Downloads](https://poser.pugx.org/sunrise/awesome-skeleton/downloads?format=flat)](https://packagist.org/packages/sunrise/awesome-skeleton) @@ -15,9 +17,23 @@ composer create-project 'sunrise/awesome-skeleton:^3.0' app ``` +## Cooking + +Set up your database connection: + +```bash +cp .env.example .env && nano .env +``` + +Execute a migration: + +```bash +php bin/app migrations:migrate --service 'master' --no-interaction +``` + ## Run CLI -> including: Doctrine DBAL, Doctrine ORM, Doctrine Migrations. +> incl.: Doctrine DBAL, Doctrine ORM, Doctrine Migrations. ```bash php bin/app @@ -35,10 +51,22 @@ composer serve > listen 0.0.0.0:3000 +Set up your server: + +```bash +cp .rr.yml.example .rr.yml && nano .rr.yml +``` + +Run the server: + ```bash rr -dv serve ``` +## Run via Swoole + +> Coming soon... + ## Run tests ```bash @@ -53,9 +81,81 @@ composer bench --- +## Run routes through cURL + +> you may need to change the server address... + +#### Home (index) + +```bash +curl -X 'GET' 'http://127.0.0.1:3000/' +``` + +#### OpenAPI document + +```bash +curl -X 'GET' 'http://127.0.0.1:3000/openapi' +``` + +#### Create an entry (example bundle) + +```bash +curl -X 'POST' -H 'Content-Type: application/json' -d '{"name": "foo", "slug": "foo"}' 'http://127.0.0.1:3000/api/v1/entry' +``` + +#### Update an existing entry (example bundle) + +> you need to set an existing ID. + +```bash +curl -X 'PATCH' -H 'Content-Type: application/json' -d '{"name": "foo", "slug": "foo"}' 'http://127.0.0.1:3000/api/v1/entry/b06fd41d-d131-4bb9-a472-eb583369437c' +``` + +#### Delete an existing entry (example bundle) + +> you need to set an existing ID. + +```bash +curl -X 'DELETE' 'http://127.0.0.1:3000/api/v1/entry/b06fd41d-d131-4bb9-a472-eb583369437c' +``` + +#### Read an existing entry (example bundle) + +> you need to set an existing ID. + +```bash +curl -X 'GET' 'http://127.0.0.1:3000/api/v1/entry/b06fd41d-d131-4bb9-a472-eb583369437c' +``` + +#### List of entries (example bundle) + +```bash +curl -X 'GET' 'http://127.0.0.1:3000/api/v1/entry' +``` + +--- + ## Useful commands -#### Generate Systemd unit file for RoadRunner +#### Deploy + +```bash +bash bin/deploy +``` + +#### Down + +```bash +bash bin/down 'Reason...' +``` + +#### Up + +```bash +bash bin/up +``` + +#### Generate Systemd unit for RoadRunner ```bash php bin/app app:roadrunner:generate-systemd-unit > app.service @@ -64,13 +164,15 @@ php bin/app app:roadrunner:generate-systemd-unit > app.service #### Generate OpenApi document ```bash -php bin/app app:openapi:generate-documentation --pretty > openapi.json +php bin/app app:openapi:generate-document > openapi.json ``` --- ## Used stack +> see composer.json + * https://github.com/PHP-DI/PHP-DI * https://github.com/Seldaek/monolog * https://github.com/sunrise-php/http-router @@ -78,10 +180,7 @@ php bin/app app:openapi:generate-documentation --pretty > openapi.json * https://github.com/doctrine/migrations * https://github.com/symfony/console * https://github.com/symfony/validator -* https://github.com/neomerx/cors-psr7 * https://github.com/justinrainbow/json-schema -* https://github.com/filp/whoops -* https://github.com/twigphp/Twig ## Used technology diff --git a/bin/app b/bin/app index 604ad9d..041bce0 100755 --- a/bin/app +++ b/bin/app @@ -16,8 +16,4 @@ $application->addCommands( $container->get('commands') ); -$application->addCommands( - $container->get('doctrine')->getCommands() -); - $application->run(); diff --git a/bin/deploy b/bin/deploy new file mode 100644 index 0000000..f40a2ae --- /dev/null +++ b/bin/deploy @@ -0,0 +1,14 @@ +#!/bin/bash + +bash bin/down 'deploying' + +git fetch --tags +git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) + +find cache/ -type f -not -name '.gitkeep' -delete +composer install --no-dev --classmap-authoritative + +php bin/app migrations:migrate --service 'master' --no-interaction +php bin/app orm:generate-proxies --service 'master' + +bash bin/up diff --git a/bin/down b/bin/down new file mode 100644 index 0000000..8b72d71 --- /dev/null +++ b/bin/down @@ -0,0 +1,3 @@ +#!/bin/bash + +echo $1 > .down diff --git a/bin/up b/bin/up new file mode 100644 index 0000000..15adc28 --- /dev/null +++ b/bin/up @@ -0,0 +1,3 @@ +#!/bin/bash + +rm -f .down diff --git a/bin/version b/bin/version new file mode 100644 index 0000000..db3ff1f --- /dev/null +++ b/bin/version @@ -0,0 +1,11 @@ +#!/bin/bash + +VERSION=$(git describe --tags --abbrev=0 2> /dev/null) + +if [ $? -eq 0 ]; then + echo $VERSION | sed 's/^v//' +else + echo '0.1.0-dev' +fi + +exit 0 diff --git a/bin/roadrunner-worker b/bin/worker-roadrunner similarity index 92% rename from bin/roadrunner-worker rename to bin/worker-roadrunner index f05a486..2b38b61 100755 --- a/bin/roadrunner-worker +++ b/bin/worker-roadrunner @@ -27,13 +27,11 @@ $client = new Client( ); while ($request = $client->acceptRequest()) { + $doctrine->reopenManagers(); $handler = new QueueableRequestHandler($router); $handler->add(...$middlewares); - - $doctrine->reopenManagers(); - - $client->respond($handler->handle($request)); - + $response = $handler->handle($request); + $client->respond($response); $doctrine->clearManagers(); $doctrine->closeConnections(); } diff --git a/bin/worker-swoole b/bin/worker-swoole new file mode 100644 index 0000000..16806e2 --- /dev/null +++ b/bin/worker-swoole @@ -0,0 +1,4 @@ +#!/usr/bin/env php +2.2,<2.4" @@ -309,37 +412,50 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+00:00" + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.10.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-07-07T18:54:01+00:00" }, { "name": "doctrine/collections", - "version": "1.6.4", + "version": "1.6.7", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", "phpstan/phpstan-shim": "^0.9.2", "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.2.2" + "vimeo/psalm": "^3.8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" @@ -379,47 +495,39 @@ "iterators", "php" ], - "time": "2019-11-13T13:07:11+00:00" + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.6.7" + }, + "time": "2020-07-27T17:53:49+00:00" }, { "name": "doctrine/common", - "version": "2.12.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6" + "reference": "2afde5a9844126bc311cd5f548b5475e75f800d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", + "url": "https://api.github.com/repos/doctrine/common/zipball/2afde5a9844126bc311cd5f548b5475e75f800d3", + "reference": "2afde5a9844126bc311cd5f548b5475e75f800d3", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/inflector": "^1.0", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.1", - "doctrine/reflection": "^1.0", - "php": "^7.1" + "doctrine/persistence": "^2.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpunit/phpunit": "^7.0", + "doctrine/coding-standard": "^6.0 || ^8.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", "symfony/phpunit-bridge": "^4.0.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.11.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\": "lib/Doctrine/Common" @@ -455,41 +563,61 @@ "email": "ocramius@gmail.com" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.", + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", "homepage": "https://www.doctrine-project.org/projects/common.html", "keywords": [ "common", "doctrine", "php" ], - "time": "2020-01-10T15:49:25+00:00" + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.1.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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2021-01-20T19:58:05+00:00" }, { "name": "doctrine/dbal", - "version": "v2.10.1", + "version": "2.12.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" + "reference": "adce7a954a1c2f14f85e94aed90c8489af204086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086", + "reference": "adce7a954a1c2f14f85e94aed90c8489af204086", "shasum": "" }, "require": { "doctrine/cache": "^1.0", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.2" + "php": "^7.3 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.1", "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.11.3", - "phpunit/phpunit": "^8.4.1", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.4", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.17.2" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -500,8 +628,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -554,24 +681,42 @@ "sqlserver", "sqlsrv" ], - "time": "2020-01-04T12:56:21+00:00" + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.12.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-11-14T20:26:58+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "629572819973f13486371cb611386eb17851e85c" + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", - "reference": "629572819973f13486371cb611386eb17851e85c", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9@dev" @@ -630,37 +775,59 @@ "event system", "events" ], - "time": "2019-11-10T09:48:07+00:00" + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -689,48 +856,67 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "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", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } ], - "time": "2019-10-30T19:59:35+00:00" + "time": "2020-05-29T15:13:26+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -744,7 +930,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -753,24 +939,42 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -815,41 +1019,59 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "doctrine/migrations", - "version": "2.2.1", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "a3987131febeb0e9acb3c47ab0df0af004588934" + "reference": "39520699043d9bfaaebeb81fa026bf2b02a8f735" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/a3987131febeb0e9acb3c47ab0df0af004588934", - "reference": "a3987131febeb0e9acb3c47ab0df0af004588934", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/39520699043d9bfaaebeb81fa026bf2b02a8f735", + "reference": "39520699043d9bfaaebeb81fa026bf2b02a8f735", "shasum": "" }, "require": { + "composer/package-versions-deprecated": "^1.8", "doctrine/dbal": "^2.9", - "ocramius/package-versions": "^1.3", - "ocramius/proxy-manager": "^2.0.2", - "php": "^7.1", - "symfony/console": "^3.4||^4.0||^5.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "php": "^7.1 || ^8.0", + "symfony/console": "^3.4||^4.4.16||^5.0", "symfony/stopwatch": "^3.4||^4.0||^5.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.2", "doctrine/orm": "^2.6", "ext-pdo_sqlite": "*", "jdorn/sql-formatter": "^1.1", "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.10", - "phpstan/phpstan-deprecation-rules": "^0.10", - "phpstan/phpstan-phpunit": "^0.10", - "phpstan/phpstan-strict-rules": "^0.10", - "phpunit/phpunit": "^7.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", "symfony/process": "^3.4||^4.0||^5.0", "symfony/yaml": "^3.4||^4.0||^5.0" }, @@ -897,39 +1119,62 @@ "migrations", "php" ], - "time": "2019-12-04T06:09:14+00:00" + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/2.3.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2020-12-23T14:06:04+00:00" }, { "name": "doctrine/orm", - "version": "v2.7.0", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62" + "reference": "242cf1a33df1b8bc5e1b86c3ebd01db07851c833" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/4d763ca4c925f647b248b9fa01b5f47aa3685d62", - "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62", + "url": "https://api.github.com/repos/doctrine/orm/zipball/242cf1a33df1b8bc5e1b86c3ebd01db07851c833", + "reference": "242cf1a33df1b8bc5e1b86c3ebd01db07851c833", "shasum": "" }, "require": { - "doctrine/annotations": "^1.8", + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "^1.11.1", "doctrine/cache": "^1.9.1", "doctrine/collections": "^1.5", - "doctrine/common": "^2.11", - "doctrine/dbal": "^2.9.3", + "doctrine/common": "^3.0", + "doctrine/dbal": "^2.10.0", "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.4|^2.0", "doctrine/instantiator": "^1.3", - "doctrine/persistence": "^1.2", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^2.0", "ext-pdo": "*", - "php": "^7.1", + "php": "^7.2|^8.0", "symfony/console": "^3.0|^4.0|^5.0" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpunit/phpunit": "^7.5", - "symfony/yaml": "^3.4|^4.0|^5.0" + "doctrine/coding-standard": "^8.0", + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^8.5|^9.4", + "symfony/yaml": "^3.4|^4.0|^5.0", + "vimeo/psalm": "4.1.1" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" @@ -980,20 +1225,24 @@ "database", "orm" ], - "time": "2019-11-19T08:38:05+00:00" + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.8.1" + }, + "time": "2020-12-04T19:53:07+00:00" }, { "name": "doctrine/persistence", - "version": "1.3.6", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4" + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/5dd3ac5eebef2d0b074daa4440bb18f93132dee4", - "reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/9899c16934053880876b920a3b8b02ed2337ac1d", + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d", "shasum": "" }, "require": { @@ -1001,23 +1250,20 @@ "doctrine/cache": "^1.0", "doctrine/collections": "^1.0", "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.1", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.10@dev" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.0" + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^6.0 || ^8.0", + "doctrine/common": "^3.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", + "vimeo/psalm": "^3.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\": "lib/Doctrine/Common", @@ -1063,46 +1309,41 @@ "orm", "persistence" ], - "time": "2020-01-16T22:06:23+00:00" + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/2.1.0" + }, + "time": "2020-10-24T22:13:54+00:00" }, { - "name": "doctrine/reflection", - "version": "v1.1.0", + "name": "fig/http-message-util", + "version": "1.1.5", "source": { "type": "git", - "url": "https://github.com/doctrine/reflection.git", - "reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c" + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/reflection/zipball/bc420ead87fdfe08c03ecc3549db603a45b06d4c", - "reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c", + "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "ext-tokenizer": "*", - "php": "^7.1" - }, - "conflict": { - "doctrine/common": "<2.9" + "php": "^5.3 || ^7.0 || ^8.0" }, - "require-dev": { - "doctrine/coding-standard": "^5.0", - "doctrine/common": "^2.10", - "phpstan/phpstan": "^0.11.0", - "phpstan/phpstan-phpunit": "^0.11.0", - "phpunit/phpunit": "^7.0" + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Fig\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1111,64 +1352,65 @@ ], "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" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", - "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", "keywords": [ - "reflection", - "static" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], - "time": "2020-01-08T19:53:19+00:00" + "support": { + "issues": "https://github.com/php-fig/http-message-util/issues", + "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" + }, + "time": "2020-11-24T22:02:12+00:00" }, { - "name": "fenric/doctrine-array-hydrator", - "version": "v0.1.8", + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/fenric/doctrine-array-hydrator.git", - "reference": "4246102814703306507e01fe6e175fcf315961e7" + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "121af47c9aee9c03031bdeca3fac0540f59aa5c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fenric/doctrine-array-hydrator/zipball/4246102814703306507e01fe6e175fcf315961e7", - "reference": "4246102814703306507e01fe6e175fcf315961e7", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/121af47c9aee9c03031bdeca3fac0540f59aa5c3", + "reference": "121af47c9aee9c03031bdeca3fac0540f59aa5c3", "shasum": "" }, "require": { - "doctrine/orm": "^2.5" + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0" + }, + "conflict": { + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "replace": { + "ocramius/proxy-manager": "^2.1" }, "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "4.8.*" + "ext-phar": "*", + "symfony/phpunit-bridge": "^5.2" }, "type": "library", + "extra": { + "thanks": { + "name": "ocramius/proxy-manager", + "url": "https://github.com/Ocramius/ProxyManager" + } + }, "autoload": { "psr-4": { - "pmill\\Doctrine\\Hydrator\\": "src/" + "ProxyManager\\": "src/ProxyManager" } }, "notification-url": "https://packagist.org/downloads/", @@ -1177,49 +1419,74 @@ ], "authors": [ { - "name": "pmill", - "email": "dev.pmill@gmail.com" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.io/" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" } ], - "description": " An array to entity hydrator for Doctrine 2 entities (fork)", - "homepage": "https://github.com/fenric/doctrine-array-hydrator", + "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", + "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", "keywords": [ - "array", - "doctrine", - "hydrator", - "php" + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "support": { + "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } ], - "time": "2020-02-11T07:40:40+00:00" + "time": "2021-01-14T21:52:44+00:00" }, { - "name": "fig/http-message-util", - "version": "1.1.4", + "name": "justinrainbow/json-schema", + "version": "5.2.10", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "3242caa9da7221a304b8f84eb9eaddae0a7cf422" + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/3242caa9da7221a304b8f84eb9eaddae0a7cf422", - "reference": "3242caa9da7221a304b8f84eb9eaddae0a7cf422", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0" + "php": ">=5.3.3" }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" }, + "bin": [ + "bin/validate-json" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { "psr-4": { - "Fig\\Http\\Message\\": "src/" + "JsonSchema\\": "src/JsonSchema/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1228,231 +1495,363 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" } ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "json", + "schema" ], - "time": "2020-02-05T20:36:27+00:00" + "support": { + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" + }, + "time": "2020-05-27T16:41:55+00:00" }, { - "name": "filp/whoops", - "version": "2.7.1", + "name": "laminas/laminas-code", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130" + "url": "https://github.com/laminas/laminas-code.git", + "reference": "28a6d70ea8b8bca687d7163300e611ae33baf82a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/28a6d70ea8b8bca687d7163300e611ae33baf82a", + "reference": "28a6d70ea8b8bca687d7163300e611ae33baf82a", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" + "laminas/laminas-eventmanager": "^3.3", + "php": "^7.4 || ~8.0.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "replace": { + "zendframework/zend-code": "self.version" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "doctrine/annotations": "^1.10.4", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^2.1.4", + "laminas/laminas-stdlib": "^3.3.0", + "phpunit/phpunit": "^9.4.2", + "psalm/plugin-phpunit": "^0.14.0", + "vimeo/psalm": "^4.3.1" }, "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component", + "laminas/laminas-zendframework-bridge": "A bridge with Zend Framework" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas", + "laminasframework" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-12-30T16:16:14+00:00" + }, + { + "name": "laminas/laminas-diactoros", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "4ff7400c1c12e404144992ef43c8b733fd9ad516" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/4ff7400c1c12e404144992ef43c8b733fd9ad516", + "reference": "4ff7400c1c12e404144992ef43c8b733fd9ad516", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "zendframework/zend-diactoros": "^2.2.1" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.8.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.6-dev" + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" } }, "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], "psr-4": { - "Whoops\\": "src/Whoops/" + "Laminas\\Diactoros\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, + "funding": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "time": "2020-01-15T10:00:00+00:00" + "time": "2020-11-18T18:39:28+00:00" }, { - "name": "jeremeamia/superclosure", - "version": "2.4.0", + "name": "laminas/laminas-eventmanager", + "version": "3.3.0", "source": { "type": "git", - "url": "https://github.com/jeremeamia/super_closure.git", - "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9" + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/5707d5821b30b9a07acfb4d76949784aaa0e9ce9", - "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", "shasum": "" }, "require": { - "nikic/php-parser": "^1.2|^2.0|^3.0|^4.0", - "php": ">=5.4", - "symfony/polyfill-php56": "^1.0" + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ^8.0" + }, + "replace": { + "zendframework/zend-eventmanager": "^3.2.1" }, "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" + "container-interop/container-interop": "^1.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "container-interop/container-interop": "^1.1, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" } }, "autoload": { "psr-4": { - "SuperClosure\\": "src/" + "Laminas\\EventManager\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "funding": [ { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia", - "role": "Developer" + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" } ], - "description": "Serialize Closure objects, including their context and binding", - "homepage": "https://github.com/jeremeamia/super_closure", - "keywords": [ - "closure", - "function", - "lambda", - "parser", - "serializable", - "serialize", - "tokenizer" - ], - "time": "2018-03-21T22:21:57+00:00" + "time": "2020-08-25T11:10:44+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "5.2.9", + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4" + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" }, - "bin": [ - "bin/validate-json" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" } }, "autoload": { + "files": [ + "src/autoload.php" + ], "psr-4": { - "JsonSchema\\": "src/JsonSchema/" + "Laminas\\ZendFrameworkBridge\\": "src//" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2019-09-25T14:49:45+00:00" + "time": "2020-09-14T14:23:00+00:00" }, { "name": "middlewares/payload", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/middlewares/payload.git", - "reference": "9a3f312b7989ab9ead69a73c4b3477c2bac8ed21" + "reference": "ee385662662c79de1e054cfe0e8c4c9f8e81f223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/middlewares/payload/zipball/9a3f312b7989ab9ead69a73c4b3477c2bac8ed21", - "reference": "9a3f312b7989ab9ead69a73c4b3477c2bac8ed21", + "url": "https://api.github.com/repos/middlewares/payload/zipball/ee385662662c79de1e054cfe0e8c4c9f8e81f223", + "reference": "ee385662662c79de1e054cfe0e8c4c9f8e81f223", "shasum": "" }, "require": { "middlewares/utils": "^3.0", - "php": "^7.2", + "php": "^7.2 || ^8.0", "psr/http-server-middleware": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.0", + "laminas/laminas-diactoros": "^2.3", "oscarotero/php-cs-fixer-config": "^1.0", - "phpunit/phpunit": "^8.1", - "squizlabs/php_codesniffer": "^3.0", - "zendframework/zend-diactoros": "^2.2" + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8|^9", + "squizlabs/php_codesniffer": "^3.0" }, "suggest": { "middlewares/csv-payload": "Adds support for parsing CSV body of request" @@ -1479,33 +1878,38 @@ "server", "url-encode" ], - "time": "2019-11-29T17:20:58+00:00" + "support": { + "issues": "https://github.com/middlewares/payload/issues", + "source": "https://github.com/middlewares/payload/tree/v3.0.1" + }, + "time": "2020-12-02T00:06:33+00:00" }, { "name": "middlewares/response-time", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/middlewares/response-time.git", - "reference": "b5786a9d019d2f00393e69d90ec42a9727b9ab18" + "reference": "dd9ec6b120897c42008c61fee8d9679911ba671f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/middlewares/response-time/zipball/b5786a9d019d2f00393e69d90ec42a9727b9ab18", - "reference": "b5786a9d019d2f00393e69d90ec42a9727b9ab18", + "url": "https://api.github.com/repos/middlewares/response-time/zipball/dd9ec6b120897c42008c61fee8d9679911ba671f", + "reference": "dd9ec6b120897c42008c61fee8d9679911ba671f", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "psr/http-server-middleware": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.0", + "laminas/laminas-diactoros": "^2.3", "middlewares/utils": "^3.0", "oscarotero/php-cs-fixer-config": "^1.0", - "phpunit/phpunit": "^8.1", - "squizlabs/php_codesniffer": "^3.0", - "zendframework/zend-diactoros": "^2.2" + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8|^9", + "squizlabs/php_codesniffer": "^3.0" }, "type": "library", "autoload": { @@ -1528,42 +1932,47 @@ "server", "time" ], - "time": "2019-11-30T01:59:10+00:00" + "support": { + "issues": "https://github.com/middlewares/response-time/issues", + "source": "https://github.com/middlewares/response-time/tree/v2.0.1" + }, + "time": "2020-12-03T01:14:02+00:00" }, { "name": "middlewares/utils", - "version": "v3.1.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/middlewares/utils.git", - "reference": "13689487e8f3bba10b6cc66ed206efc8b874163e" + "reference": "a9ef1e5365020ead0ae343b95602bd877a9bf852" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/middlewares/utils/zipball/13689487e8f3bba10b6cc66ed206efc8b874163e", - "reference": "13689487e8f3bba10b6cc66ed206efc8b874163e", + "url": "https://api.github.com/repos/middlewares/utils/zipball/a9ef1e5365020ead0ae343b95602bd877a9bf852", + "reference": "a9ef1e5365020ead0ae343b95602bd877a9bf852", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "psr/container": "^1.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0", "psr/http-server-middleware": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", + "friendsofphp/php-cs-fixer": "^v2.16", "guzzlehttp/psr7": "dev-master", - "laminas/laminas-diactoros": "^2.2", + "laminas/laminas-diactoros": "^2.4", "nyholm/psr7": "^1.0", "oscarotero/php-cs-fixer-config": "^1.0", - "phpunit/phpunit": "^8.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8|^9", "slim/psr7": "~0.3", - "squizlabs/php_codesniffer": "^3.0", + "squizlabs/php_codesniffer": "^3.5", "sunrise/http-message": "^1.0", "sunrise/http-server-request": "^1.0", - "sunrise/stream": "^1.0", - "sunrise/uri": "^1.0" + "sunrise/stream": "^1.0.15", + "sunrise/uri": "^1.0.15" }, "type": "library", "autoload": { @@ -1585,24 +1994,28 @@ "psr-17", "psr-7" ], - "time": "2020-01-19T00:30:41+00:00" + "support": { + "issues": "https://github.com/middlewares/utils/issues", + "source": "https://github.com/middlewares/utils/tree/v3.2.0" + }, + "time": "2020-11-30T20:07:15+00:00" }, { "name": "monolog/monolog", - "version": "2.0.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", "shasum": "" }, "require": { - "php": "^7.2", + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -1611,16 +2024,17 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^6.0", + "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", + "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <3.0", + "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -1640,7 +2054,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -1656,390 +2070,424 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-12-14T13:15:25+00:00" }, { - "name": "neomerx/cors-psr7", - "version": "v2.0.2", + "name": "opis/closure", + "version": "3.6.1", "source": { "type": "git", - "url": "https://github.com/neomerx/cors-psr7.git", - "reference": "454e923aaf9ba4aa162f7aca2a514e41708b6ba5" + "url": "https://github.com/opis/closure.git", + "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/neomerx/cors-psr7/zipball/454e923aaf9ba4aa162f7aca2a514e41708b6ba5", - "reference": "454e923aaf9ba4aa162f7aca2a514e41708b6ba5", + "url": "https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", + "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", "shasum": "" }, "require": { - "php": ">=7.1.0", - "psr/http-message": "^1.0", - "psr/log": "^1.0" + "php": "^5.4 || ^7.0 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "mockery/mockery": "^1.0", - "phpmd/phpmd": "^2.6", - "phpunit/phpunit": "^7.0", - "scrutinizer/ocular": "^1.4", - "squizlabs/php_codesniffer": "^2.9" + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, "autoload": { "psr-4": { - "Neomerx\\Cors\\": "src/" - } + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "neomerx", - "email": "info@neomerx.com" + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" } ], - "description": "Framework agnostic (PSR-7) CORS implementation (www.w3.org/TR/cors/)", - "homepage": "https://github.com/neomerx/cors-psr7", + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", "keywords": [ - "Cross Origin Resource Sharing", - "Cross-Origin Resource Sharing", - "cors", - "neomerx", - "psr-7", - "psr7", - "w3.org", - "www.w3.org" + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" ], - "time": "2019-02-14T10:35:50+00:00" + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.1" + }, + "time": "2020-11-07T02:01:34+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.3.0", + "name": "paragonie/random_compat", + "version": "v2.0.19", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" + "url": "https://github.com/paragonie/random_compat.git", + "reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/446fc9faa5c2a9ddf65eb7121c0af7e857295241", + "reference": "446fc9faa5c2a9ddf65eb7121c0af7e857295241", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=5.2.0" }, "require-dev": { - "ircmaxell/php-yacc": "0.0.5", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + "phpunit/phpunit": "4.*|5.*" }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, + "type": "library", "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "files": [ + "lib/random.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" } ], - "description": "A PHP parser written in PHP", + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ - "parser", - "php" + "csprng", + "polyfill", + "pseudorandom", + "random" ], - "time": "2019-11-08T13:50:10+00:00" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T10:06:57+00:00" }, { - "name": "ocramius/package-versions", - "version": "1.5.1", + "name": "php-di/invoker", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "1d32342b8c1eb27353c8887c366147b4c2da673c" + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "992fec6c56f2d1ad1ad5fee28267867c85bfb8f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/1d32342b8c1eb27353c8887c366147b4c2da673c", - "reference": "1d32342b8c1eb27353c8887c366147b4c2da673c", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/992fec6c56f2d1ad1ad5fee28267867c85bfb8f9", + "reference": "992fec6c56f2d1ad1ad5fee28267867c85bfb8f9", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0.0", - "php": "^7.3.0" + "php": ">=7.3", + "psr/container": "~1.0" }, "require-dev": { - "composer/composer": "^1.8.6", - "doctrine/coding-standard": "^6.0.0", - "ext-zip": "*", - "infection/infection": "^0.13.4", - "phpunit/phpunit": "^8.2.5", - "vimeo/psalm": "^3.4.9" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.6.x-dev" - } + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" }, + "type": "library", "autoload": { "psr-4": { - "PackageVersions\\": "src/PackageVersions" + "Invoker\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" + ], + "support": { + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.0" + }, + "funding": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "url": "https://github.com/mnapoli", + "type": "github" } ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2019-07-17T15:49:50+00:00" + "time": "2021-01-15T10:25:40+00:00" }, { - "name": "ocramius/proxy-manager", - "version": "2.2.3", + "name": "php-di/php-di", + "version": "6.3.0", "source": { "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f" + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "955cacea6b0beaba07e8c11b8367f5b3d5abe89f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/4d154742e31c35137d5374c998e8f86b54db2e2f", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/955cacea6b0beaba07e8c11b8367f5b3d5abe89f", + "reference": "955cacea6b0beaba07e8c11b8367f5b3d5abe89f", "shasum": "" }, "require": { - "ocramius/package-versions": "^1.1.3", - "php": "^7.2.0", - "zendframework/zend-code": "^3.3.0" + "opis/closure": "^3.5.5", + "php": ">=7.2.0", + "php-di/invoker": "^2.0", + "php-di/phpdoc-reader": "^2.0.1", + "psr/container": "^1.0" + }, + "provide": { + "psr/container-implementation": "^1.0" }, "require-dev": { - "couscous/couscous": "^1.6.1", - "ext-phar": "*", - "humbug/humbug": "1.0.0-RC.0@RC", - "nikic/php-parser": "^3.1.1", - "padraic/phpunit-accelerator": "dev-master@DEV", - "phpbench/phpbench": "^0.12.2", - "phpstan/phpstan": "dev-master#856eb10a81c1d27c701a83f167dc870fd8f4236a as 0.9.999", - "phpstan/phpstan-phpunit": "dev-master#5629c0a1f4a9c417cb1077cf6693ad9753895761", - "phpunit/phpunit": "^6.4.3", - "squizlabs/php_codesniffer": "^2.9.1" + "doctrine/annotations": "~1.2", + "friendsofphp/php-cs-fixer": "^2.4", + "mnapoli/phpunit-easymock": "^1.2", + "ocramius/proxy-manager": "~2.0.2", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5|^9.0" }, "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" + "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", + "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, "autoload": { - "psr-0": { - "ProxyManager\\": "src" - } + "psr-4": { + "DI\\": "src/" + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ], + "support": { + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/6.3.0" + }, + "funding": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "type": "tidelift" } ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "time": "2019-08-10T08:37:15+00:00" + "time": "2020-10-12T14:39:15+00:00" }, { - "name": "php-di/invoker", - "version": "2.0.0", + "name": "php-di/phpdoc-reader", + "version": "2.2.1", "source": { "type": "git", - "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a" + "url": "https://github.com/PHP-DI/PhpDocReader.git", + "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/540c27c86f663e20fe39a24cd72fa76cdb21d41a", - "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a", + "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c", + "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c", "shasum": "" }, "require": { - "psr/container": "~1.0" + "php": ">=7.2.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "phpunit/phpunit": "~4.5" + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^8.5|^9.0" }, "type": "library", "autoload": { "psr-4": { - "Invoker\\": "src/" + "PhpDocReader\\": "src/PhpDocReader" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Generic and extensible callable invoker", - "homepage": "https://github.com/PHP-DI/Invoker", + "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", "keywords": [ - "callable", - "dependency", - "dependency-injection", - "injection", - "invoke", - "invoker" + "phpdoc", + "reflection" ], - "time": "2017-03-20T19:28:22+00:00" + "support": { + "issues": "https://github.com/PHP-DI/PhpDocReader/issues", + "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1" + }, + "time": "2020-10-12T12:39:22+00:00" }, { - "name": "php-di/php-di", - "version": "6.0.11", + "name": "pmill/doctrine-array-hydrator", + "version": "v0.1.7", "source": { "type": "git", - "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620" + "url": "https://github.com/pmill/doctrine-array-hydrator.git", + "reference": "5ea45549204a91f7c28455863b16dc79e75cfaac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620", - "reference": "9bdcc2f41f5fb700ddd01bc4fa8d5bd7b3f94620", + "url": "https://api.github.com/repos/pmill/doctrine-array-hydrator/zipball/5ea45549204a91f7c28455863b16dc79e75cfaac", + "reference": "5ea45549204a91f7c28455863b16dc79e75cfaac", "shasum": "" }, "require": { - "jeremeamia/superclosure": "^2.0", - "nikic/php-parser": "^2.0|^3.0|^4.0", - "php": ">=7.0.0", - "php-di/invoker": "^2.0", - "php-di/phpdoc-reader": "^2.0.1", - "psr/container": "^1.0" - }, - "provide": { - "psr/container-implementation": "^1.0" + "doctrine/orm": "^2.5" }, "require-dev": { - "doctrine/annotations": "~1.2", - "friendsofphp/php-cs-fixer": "^2.4", - "mnapoli/phpunit-easymock": "~1.0", - "ocramius/proxy-manager": "~2.0.2", - "phpstan/phpstan": "^0.9.2", - "phpunit/phpunit": "~6.4" - }, - "suggest": { - "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", - "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" + "codeclimate/php-test-reporter": "dev-master", + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "4.8.*" }, "type": "library", "autoload": { "psr-4": { - "DI\\": "src/" - }, - "files": [ - "src/functions.php" - ] + "pmill\\Doctrine\\Hydrator\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The dependency injection container for humans", - "homepage": "http://php-di.org/", + "authors": [ + { + "name": "pmill", + "email": "dev.pmill@gmail.com" + } + ], + "description": " An array to entity hydrator for Doctrine 2 entities ", + "homepage": "https://github.com/pmill/doctrine-array-hydrator", "keywords": [ - "PSR-11", - "container", - "container-interop", - "dependency injection", - "di", - "ioc", - "psr11" + "array", + "doctrine", + "hydrator", + "php" ], - "time": "2019-12-12T07:58:02+00:00" + "support": { + "issues": "https://github.com/pmill/doctrine-array-hydrator/issues", + "source": "https://github.com/pmill/doctrine-array-hydrator/tree/v0.1.7" + }, + "time": "2020-01-14T14:47:37+00:00" }, { - "name": "php-di/phpdoc-reader", - "version": "2.1.1", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/PHP-DI/PhpDocReader.git", - "reference": "15678f7451c020226807f520efb867ad26fbbfcf" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/15678f7451c020226807f520efb867ad26fbbfcf", - "reference": "15678f7451c020226807f520efb867ad26fbbfcf", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.6" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "PhpDocReader\\": "src/PhpDocReader" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", "keywords": [ - "phpdoc", - "reflection" + "cache", + "psr", + "psr-6" ], - "time": "2019-09-26T11:24:58+00:00" + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", @@ -2088,6 +2536,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -2140,6 +2592,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, "time": "2019-04-30T12:38:16+00:00" }, { @@ -2190,6 +2645,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -2243,6 +2701,10 @@ "response", "server" ], + "support": { + "issues": "https://github.com/php-fig/http-server-handler/issues", + "source": "https://github.com/php-fig/http-server-handler/tree/master" + }, "time": "2018-10-30T16:46:14+00:00" }, { @@ -2296,20 +2758,24 @@ "request", "response" ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/master" + }, "time": "2018-10-30T17:12:04+00:00" }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -2343,7 +2809,10 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" }, { "name": "psr/simple-cache", @@ -2391,33 +2860,187 @@ "psr-16", "simple-cache" ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "ramsey/uuid", + "version": "3.9.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", + "shasum": "" + }, + "require": { + "ext-json": "*", + "paragonie/random_compat": "^1 | ^2 | 9.99.99", + "php": "^5.4 | ^7 | ^8", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^0.9.11 | ^1", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1", + "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid", + "wiki": "https://github.com/ramsey/uuid/wiki" + }, + "time": "2020-02-21T04:36:14+00:00" + }, + { + "name": "ramsey/uuid-doctrine", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid-doctrine.git", + "reference": "9facc4689547e72e03c1e18df4a0ee162b2778b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid-doctrine/zipball/9facc4689547e72e03c1e18df4a0ee162b2778b0", + "reference": "9facc4689547e72e03c1e18df4a0ee162b2778b0", + "shasum": "" + }, + "require": { + "doctrine/orm": "^2.5", + "php": "^5.4 | ^7 | ^8", + "ramsey/uuid": "^3.5 | ^4" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^0.9 | ^1", + "phpunit/phpunit": "^4.8.36 | ^5.7 | ^6.5 | ^7", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\Doctrine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Allow the use of ramsey/uuid as a Doctrine field type.", + "homepage": "https://github.com/ramsey/uuid-doctrine", + "keywords": [ + "database", + "doctrine", + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid-doctrine/issues", + "rss": "https://github.com/ramsey/uuid-doctrine/releases.atom", + "source": "https://github.com/ramsey/uuid-doctrine", + "wiki": "https://github.com/ramsey/uuid/wiki" + }, + "time": "2020-01-27T05:09:17+00:00" + }, { "name": "spiral/goridge", - "version": "v2.2.1", + "version": "v2.4.5", "source": { "type": "git", - "url": "https://github.com/spiral/goridge.git", - "reference": "676b03eabec8821e50e4af551e331d5e3eaac799" + "url": "https://github.com/spiral/goridge-php.git", + "reference": "a7373de7f86a5452f8ad61bd1340dc158626f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/goridge/zipball/676b03eabec8821e50e4af551e331d5e3eaac799", - "reference": "676b03eabec8821e50e4af551e331d5e3eaac799", + "url": "https://api.github.com/repos/spiral/goridge-php/zipball/a7373de7f86a5452f8ad61bd1340dc158626f7f8", + "reference": "a7373de7f86a5452f8ad61bd1340dc158626f7f8", "shasum": "" }, "require": { - "php": ">=7.0" + "ext-json": "*", + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "~6.0" + "phpstan/phpstan": "^0.12.23", + "phpunit/phpunit": "~8.0", + "spiral/code-style": "^1.0" }, "type": "goridge", "autoload": { "psr-4": { - "Spiral\\Goridge\\": "php-src/" - } + "Spiral\\Goridge\\": "src/" + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2430,32 +3053,39 @@ } ], "description": "High-performance PHP-to-Golang RPC bridge", - "time": "2019-11-30T09:37:08+00:00" + "support": { + "issues": "https://github.com/spiral/goridge-php/issues", + "source": "https://github.com/spiral/goridge-php/tree/v2.4.5" + }, + "time": "2020-08-14T14:28:30+00:00" }, { "name": "spiral/roadrunner", - "version": "1.6.0", + "version": "v1.9.2", "source": { "type": "git", "url": "https://github.com/spiral/roadrunner.git", - "reference": "7165d642978262130db2ca029a0597d5c77f6e8c" + "reference": "b934cc5e46e8b8ce92cacc4fe0094603992706f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spiral/roadrunner/zipball/7165d642978262130db2ca029a0597d5c77f6e8c", - "reference": "7165d642978262130db2ca029a0597d5c77f6e8c", + "url": "https://api.github.com/repos/spiral/roadrunner/zipball/b934cc5e46e8b8ce92cacc4fe0094603992706f2", + "reference": "b934cc5e46e8b8ce92cacc4fe0094603992706f2", "shasum": "" }, "require": { - "php": "^7.1", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "spiral/goridge": "^2.0", - "symfony/console": "^2.5.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "zendframework/zend-diactoros": "^1.3 || ^2.0" + "composer/package-versions-deprecated": "^1.8", + "ext-curl": "*", + "ext-json": "*", + "laminas/laminas-diactoros": "^1.3.6 || ^2.0", + "php": "^7.2 || ^8.0", + "psr/http-factory": "^1.0.1", + "psr/http-message": "^1.0.1", + "spiral/goridge": "^2.4.2", + "symfony/console": "^2.5.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" }, "require-dev": { - "phpstan/phpstan": "~0.12" + "phpstan/phpstan": "~0.12.34" }, "bin": [ "bin/rr" @@ -2481,35 +3111,39 @@ } ], "description": "High-performance PHP application server, load-balancer and process manager written in Golang", - "time": "2020-02-11T09:18:41+00:00" + "support": { + "issues": "https://github.com/spiral/roadrunner/issues", + "source": "https://github.com/spiral/roadrunner/tree/v1.9.2" + }, + "time": "2021-01-14T16:04:43+00:00" }, { "name": "sunrise/http-factory", - "version": "v1.0.8", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-factory.git", - "reference": "ca92950af34020feabbc38e030bc90a151dfcf73" + "reference": "39c20a7557755db05adde73419d1720394ea5ffa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-factory/zipball/ca92950af34020feabbc38e030bc90a151dfcf73", - "reference": "ca92950af34020feabbc38e030bc90a151dfcf73", + "url": "https://api.github.com/repos/sunrise-php/http-factory/zipball/39c20a7557755db05adde73419d1720394ea5ffa", + "reference": "39c20a7557755db05adde73419d1720394ea5ffa", "shasum": "" }, "require": { - "php": "^7.1", - "sunrise/http-message": "^1.0.9", - "sunrise/http-server-request": "^1.0.5", - "sunrise/stream": "^1.0.15", - "sunrise/uri": "^1.0.19" + "php": "^7.1|^8.0", + "sunrise/http-message": "^1.4", + "sunrise/http-server-request": "^1.1", + "sunrise/stream": "^1.2", + "sunrise/uri": "^1.2" }, "provide": { "psr/http-factory-implementation": "1.0" }, "require-dev": { - "http-interop/http-factory-tests": "0.5.0", - "phpunit/phpunit": "7.5.6" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2531,34 +3165,41 @@ "description": "Sunrise HTTP factory for PHP 7.1+ based on PSR-17", "homepage": "https://github.com/sunrise-php/http-factory", "keywords": [ + "PHP7", "fenric", "http", "http-factory", + "php8", "psr-17", "sunrise" ], - "time": "2019-02-25T17:38:10+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-factory/issues", + "source": "https://github.com/sunrise-php/http-factory/tree/v1.1.0" + }, + "time": "2020-12-26T07:32:19+00:00" }, { "name": "sunrise/http-header", - "version": "v1.0.9", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-header.git", - "reference": "c226f101b8a236e484dbea3aa1ebce8f01374e90" + "reference": "0095b3ccc6766aca473d24dce3bad2342f638d77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-header/zipball/c226f101b8a236e484dbea3aa1ebce8f01374e90", - "reference": "c226f101b8a236e484dbea3aa1ebce8f01374e90", + "url": "https://api.github.com/repos/sunrise-php/http-header/zipball/0095b3ccc6766aca473d24dce3bad2342f638d77", + "reference": "0095b3ccc6766aca473d24dce3bad2342f638d77", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.1|^8.0", "psr/http-message": "^1.0" }, "require-dev": { - "phpunit/phpunit": "7.5.6" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2577,44 +3218,171 @@ "homepage": "https://anatoly.fenric.ru/" } ], - "description": "Sunrise HTTP Header interface for PHP 7.1+ based on PSR-7", + "description": "Sunrise HTTP header interface for PHP 7.1+ based on PSR-7", "homepage": "https://github.com/sunrise-php/http-header", "keywords": [ "HTTP-header", "fenric", + "http", + "psr-7", + "sunrise" + ], + "support": { + "issues": "https://github.com/sunrise-php/http-header/issues", + "source": "https://github.com/sunrise-php/http-header/tree/v1.1.0" + }, + "time": "2020-12-25T06:32:55+00:00" + }, + { + "name": "sunrise/http-header-collection", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sunrise-php/http-header-collection.git", + "reference": "f678194920b9b7f0886b336e9b1766927642fe23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sunrise-php/http-header-collection/zipball/f678194920b9b7f0886b336e9b1766927642fe23", + "reference": "f678194920b9b7f0886b336e9b1766927642fe23", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0", + "psr/http-message": "^1.0", + "sunrise/http-header": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sunrise\\Http\\Header\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anatoly Fenric", + "email": "anatoly@fenric.ru", + "homepage": "https://anatoly.fenric.ru/" + } + ], + "description": "Sunrise HTTP header collection for PHP 7.1+ based on PSR-7", + "homepage": "https://github.com/sunrise-php/http-header-collection", + "keywords": [ + "HTTP-header", + "PHP7", + "collection", + "fenric", + "header", + "http", + "http-header-collection", + "php8", + "psr-7", + "sunrise" + ], + "support": { + "issues": "https://github.com/sunrise-php/http-header-collection/issues", + "source": "https://github.com/sunrise-php/http-header-collection/tree/v1.1.0" + }, + "time": "2020-12-25T23:20:27+00:00" + }, + { + "name": "sunrise/http-header-kit", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sunrise-php/http-header-kit.git", + "reference": "0fb4377633ca511b35c7e82ffb564c95c0c1775d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sunrise-php/http-header-kit/zipball/0fb4377633ca511b35c7e82ffb564c95c0c1775d", + "reference": "0fb4377633ca511b35c7e82ffb564c95c0c1775d", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0", + "psr/http-message": "^1.0", + "sunrise/http-header": "^1.1", + "sunrise/http-header-collection": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0", + "sunrise/http-factory": "1.1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sunrise\\Http\\Header\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anatoly Fenric", + "email": "anatoly@fenric.ru", + "homepage": "https://anatoly.fenric.ru/" + } + ], + "description": "Sunrise HTTP header kit for PHP 7.1+ based on PSR-7", + "homepage": "https://github.com/sunrise-php/http-header-kit", + "keywords": [ + "PHP7", + "fenric", + "header", + "http", + "http-header-kit", + "kit", + "php8", "psr-7", "sunrise" ], - "time": "2019-02-25T18:29:14+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-header-kit/issues", + "source": "https://github.com/sunrise-php/http-header-kit/tree/v1.1.0" + }, + "time": "2020-12-26T08:33:57+00:00" }, { "name": "sunrise/http-message", - "version": "v1.2.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-message.git", - "reference": "fd098f240bf26260075bbdc970208115a2e13399" + "reference": "e71162d18efe039bf34f12cb4bc357d908370fbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-message/zipball/fd098f240bf26260075bbdc970208115a2e13399", - "reference": "fd098f240bf26260075bbdc970208115a2e13399", + "url": "https://api.github.com/repos/sunrise-php/http-message/zipball/e71162d18efe039bf34f12cb4bc357d908370fbd", + "reference": "e71162d18efe039bf34f12cb4bc357d908370fbd", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.1|^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0", - "sunrise/http-header": "^1.0", - "sunrise/stream": "^1.0", - "sunrise/uri": "^1.0" + "sunrise/http-header": "^1.1", + "sunrise/http-header-collection": "^1.1", + "sunrise/stream": "^1.2", + "sunrise/uri": "^1.2" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "fig/http-message-util": "1.1.3", - "phpunit/phpunit": "7.5.20" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2640,32 +3408,37 @@ "homepage": "https://github.com/sunrise-php/http-message", "keywords": [ "fenric", + "http", "http-message", "psr-17", "psr-7", "rfc-7230", "sunrise" ], - "time": "2020-01-21T12:33:09+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-message/issues", + "source": "https://github.com/sunrise-php/http-message/tree/v1.4.0" + }, + "time": "2020-12-26T06:03:28+00:00" }, { "name": "sunrise/http-router", - "version": "v2.2.0", + "version": "v2.6.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-router.git", - "reference": "65a909e2e55b327733f7a32d6a5b1edf6675f20a" + "reference": "659b351a87f3bfe7d401abaa227858186c281762" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-router/zipball/65a909e2e55b327733f7a32d6a5b1edf6675f20a", - "reference": "65a909e2e55b327733f7a32d6a5b1edf6675f20a", + "url": "https://api.github.com/repos/sunrise-php/http-router/zipball/659b351a87f3bfe7d401abaa227858186c281762", + "reference": "659b351a87f3bfe7d401abaa227858186c281762", "shasum": "" }, "require": { "doctrine/annotations": "^1.6", "fig/http-message-util": "^1.1", - "php": "^7.1", + "php": "^7.1|^8.0", "psr/container": "^1.0", "psr/http-message": "^1.0", "psr/http-server-handler": "^1.0", @@ -2673,11 +3446,9 @@ "psr/simple-cache": "^1.0" }, "require-dev": { - "phpbench/phpbench": "0.16.10", - "phpunit/phpunit": "7.5.20", + "phpunit/phpunit": "7.5.20|9.5.0", "sunrise/coding-standard": "1.0.0", - "sunrise/http-message": "1.2.0", - "sunrise/http-server-request": "1.0.11" + "sunrise/http-factory": "1.1.0" }, "type": "library", "autoload": { @@ -2704,44 +3475,64 @@ "homepage": "https://anatoly.fenric.ru/" } ], - "description": "Sunrise // HTTP router for PHP 7.1+ based on PSR-7 and PSR-15 with support for annotations and OpenApi Specification", + "description": "Sunrise // HTTP router for PHP 7.1+ (incl. PHP 8 with attributes) based on PSR-7 and PSR-15 with support for annotations and OpenApi Specification", "homepage": "https://github.com/sunrise-php/http-router", "keywords": [ + "PHP7", "annotations", + "attributes", "fenric", "http", + "middlewares", "openapi", + "php-attributes", + "php8", "psr-15", "psr-7", "router", "sunrise" ], - "time": "2020-02-09T11:07:10+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-router/issues", + "source": "https://github.com/sunrise-php/http-router/tree/v2.6.0" + }, + "funding": [ + { + "url": "https://github.com/fenric", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sunrise/http-router", + "type": "tidelift" + } + ], + "time": "2021-02-01T02:24:02+00:00" }, { "name": "sunrise/http-router-openapi", - "version": "v1.3.0", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-router-openapi.git", - "reference": "4bf576eac99badffed4a94140206bea3fc2dd729" + "reference": "b4d02447d3dc86a3724dd5eee63e2ff9e4404538" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-router-openapi/zipball/4bf576eac99badffed4a94140206bea3fc2dd729", - "reference": "4bf576eac99badffed4a94140206bea3fc2dd729", + "url": "https://api.github.com/repos/sunrise-php/http-router-openapi/zipball/b4d02447d3dc86a3724dd5eee63e2ff9e4404538", + "reference": "b4d02447d3dc86a3724dd5eee63e2ff9e4404538", "shasum": "" }, "require": { "doctrine/annotations": "^1.6", - "php": "^7.1", - "sunrise/http-router": "^2.1" + "doctrine/cache": "^1.6", + "php": "^7.1|^8.0", + "sunrise/http-router": "^2.4" }, "require-dev": { - "justinrainbow/json-schema": "5.2.9", - "phpbench/phpbench": "0.16.10", - "phpunit/phpunit": "7.5.20", - "sunrise/coding-standard": "1.0.0" + "justinrainbow/json-schema": "5.2.10", + "phpunit/phpunit": "7.5.20||9.5.0", + "sunrise/coding-standard": "1.0.0", + "sunrise/http-factory": "1.1.0" }, "type": "library", "autoload": { @@ -2763,44 +3554,50 @@ "description": "Sunrise // OpenApi (Swagger) Specification support for Sunrise router", "homepage": "https://github.com/sunrise-php/http-router-openapi", "keywords": [ + "PHP7", "annotations", "fenric", "http", "openapi", + "php8", "router", "sunrise", "swagger" ], - "time": "2020-02-08T09:45:57+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-router-openapi/issues", + "source": "https://github.com/sunrise-php/http-router-openapi/tree/v1.9.0" + }, + "time": "2021-02-06T05:45:54+00:00" }, { "name": "sunrise/http-server-request", - "version": "v1.0.11", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/http-server-request.git", - "reference": "70cc52366cc7ea3c3fc5fc1b6c54bb7a7441d763" + "reference": "03db82a084477b6de9d8bcc7419a7fc1106af56b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/http-server-request/zipball/70cc52366cc7ea3c3fc5fc1b6c54bb7a7441d763", - "reference": "70cc52366cc7ea3c3fc5fc1b6c54bb7a7441d763", + "url": "https://api.github.com/repos/sunrise-php/http-server-request/zipball/03db82a084477b6de9d8bcc7419a7fc1106af56b", + "reference": "03db82a084477b6de9d8bcc7419a7fc1106af56b", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.1|^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0", - "sunrise/http-message": "^1.0", - "sunrise/stream": "^1.0", - "sunrise/uri": "^1.0" + "sunrise/http-message": "^1.4", + "sunrise/stream": "^1.2", + "sunrise/uri": "^1.2" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "7.5.6" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2832,33 +3629,40 @@ "homepage": "https://github.com/peter279k" } ], - "description": "Sunrise HTTP Server Request wrapper for PHP 7.1+ based on PSR-7 & PSR-17", + "description": "Sunrise HTTP server request wrapper for PHP 7.1+ based on PSR-7 & PSR-17", "homepage": "https://github.com/sunrise-php/http-server-request", "keywords": [ + "PHP7", "fenric", + "http", "http-server-request", + "php8", "psr-17", "psr-7", "sunrise" ], - "time": "2019-03-05T09:55:47+00:00" + "support": { + "issues": "https://github.com/sunrise-php/http-server-request/issues", + "source": "https://github.com/sunrise-php/http-server-request/tree/v1.1.0" + }, + "time": "2020-12-26T07:07:15+00:00" }, { "name": "sunrise/stream", - "version": "v1.0.21", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/sunrise-php/stream.git", - "reference": "43fb91e36375b792a8c11853c23aa6efbb71fdbe" + "reference": "8ff45372c752fdf7e1b53d724ab188b894af6209" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/stream/zipball/43fb91e36375b792a8c11853c23aa6efbb71fdbe", - "reference": "43fb91e36375b792a8c11853c23aa6efbb71fdbe", + "url": "https://api.github.com/repos/sunrise-php/stream/zipball/8ff45372c752fdf7e1b53d724ab188b894af6209", + "reference": "8ff45372c752fdf7e1b53d724ab188b894af6209", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.1|^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0" }, @@ -2866,8 +3670,8 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "7.5.6" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2894,30 +3698,37 @@ "description": "Simple Stream wrapper for PHP 7.1+ based on PSR-7 & PSR-17", "homepage": "https://github.com/sunrise-php/stream", "keywords": [ + "PHP7", "fenric", + "http", + "php8", "psr-17", "psr-7", "stream", "sunrise" ], - "time": "2019-03-05T10:21:54+00:00" + "support": { + "issues": "https://github.com/sunrise-php/stream/issues", + "source": "https://github.com/sunrise-php/stream/tree/v1.2.1" + }, + "time": "2020-12-25T06:13:21+00:00" }, { "name": "sunrise/uri", - "version": "v1.0.26", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/sunrise-php/uri.git", - "reference": "fe57c5306cac4b56190662f1f6aea1d8a99dc220" + "reference": "9c450a784ca8145f4a097df03c29b35b23a12210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sunrise-php/uri/zipball/fe57c5306cac4b56190662f1f6aea1d8a99dc220", - "reference": "fe57c5306cac4b56190662f1f6aea1d8a99dc220", + "url": "https://api.github.com/repos/sunrise-php/uri/zipball/9c450a784ca8145f4a097df03c29b35b23a12210", + "reference": "9c450a784ca8145f4a097df03c29b35b23a12210", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.1|^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0" }, @@ -2925,8 +3736,8 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "7.5.6" + "phpunit/phpunit": "7.5.20|9.5.0", + "sunrise/coding-standard": "1.0.0" }, "type": "library", "autoload": { @@ -2953,69 +3764,74 @@ "description": "Simple URI wrapper for PHP 7.1+ based on RFC-3986, PSR-7 & PSR-17", "homepage": "https://github.com/sunrise-php/uri", "keywords": [ + "PHP7", "fenric", + "http", "parser", + "php8", "psr-17", "psr-7", "rfc-3986", "sunrise", "uri" ], - "time": "2019-03-05T10:41:30+00:00" + "support": { + "issues": "https://github.com/sunrise-php/uri/issues", + "source": "https://github.com/sunrise-php/uri/tree/v1.2.0" + }, + "time": "2020-12-25T04:36:40+00:00" }, { - "name": "symfony/console", - "version": "v5.0.4", + "name": "symfony/cache", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8" + "url": "https://github.com/symfony/cache.git", + "reference": "d6aed6c1bbf6f59e521f46437475a0ff4878d388" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/91c294166c38d8c0858a86fad76d8c14dc1144c8", - "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8", + "url": "https://api.github.com/repos/symfony/cache/zipball/d6aed6c1bbf6f59e521f46437475a0ff4878d388", + "reference": "d6aed6c1bbf6f59e521f46437475a0ff4878d388", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "php": ">=7.2.5", + "psr/cache": "~1.0", + "psr/log": "^1.1", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" }, "conflict": { + "doctrine/dbal": "<2.10", "symfony/dependency-injection": "<4.4", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" }, "require-dev": { - "psr/log": "~1.0", + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", "symfony/var-dumper": "^4.4|^5.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" + "Symfony\\Component\\Cache\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3027,51 +3843,74 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", "homepage": "https://symfony.com", - "time": "2020-01-25T15:56:29+00:00" + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T11:24:50+00:00" }, { - "name": "symfony/dotenv", - "version": "v5.0.4", + "name": "symfony/cache-contracts", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/dotenv.git", - "reference": "8331da80cc35fe903db0ff142376d518804ff1b1" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/8331da80cc35fe903db0ff142376d518804ff1b1", - "reference": "8331da80cc35fe903db0ff142376d518804ff1b1", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "psr/cache": "^1.0" }, - "require-dev": { - "symfony/process": "^4.4|^5.0" + "suggest": { + "symfony/cache-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Dotenv\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3079,55 +3918,97 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Registers environment variables from a .env file", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", "keywords": [ - "dotenv", - "env", - "environment" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2020-01-08T17:33:29+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "name": "symfony/console", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "url": "https://github.com/symfony/console.git", + "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/console/zipball/89d4b176d12a2946a1ae4e34906a025b7b6b135a", + "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "suggest": { - "ext-ctype": "For best performance" + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.13-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Component\\Console\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3136,53 +4017,352 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "cli", + "command line", + "console", + "terminal" ], - "time": "2019-11-27T13:56:44+00:00" + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-28T22:06:19+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "2.2-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/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "783f12027c6b40ab0e93d6136d9f642d1d67cd6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/783f12027c6b40ab0e93d6136d9f642d1d67cd6b", + "reference": "783f12027c6b40ab0e93d6136d9f642d1d67cd6b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1" + }, + "require-dev": { + "symfony/process": "^4.4|^5.0" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v5.2.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": "2021-01-27T10:01:46+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", + "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:01:46+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.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": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af", + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, "files": [ "bootstrap.php" @@ -3202,47 +4382,74 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "grapheme", + "intl", "polyfill", "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.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": "2021-01-07T16:49:33+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.13.1", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.22.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "6e971c891537eb617a00bb07a43d182a6915faba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/53dd1cdf3cb986893ccf2b96665b25b3abb384f4", - "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba", + "reference": "6e971c891537eb617a00bb07a43d182a6915faba", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3259,37 +4466,140 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "intl", + "normalizer", "polyfill", "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.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": "2021-01-07T17:09:11+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.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": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.13.1", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3325,41 +4635,72 @@ "portable", "shim" ], - "time": "2019-11-27T16:25:15+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.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": "2021-01-07T16:49:33+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.13.1", + "name": "symfony/polyfill-php80", + "version": "v1.22.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "964a67f293b66b95883a5ed918a65354fcd2258f" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/964a67f293b66b95883a5ed918a65354fcd2258f", - "reference": "964a67f293b66b95883a5ed918a65354fcd2258f", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3369,32 +4710,49 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", "polyfill", + "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.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": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -3403,7 +4761,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3435,32 +4797,44 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.0.4", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4" + "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b12274acfab9d9850c52583d136a24398cdf1a0c", + "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/service-contracts": "^1.0|^2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Stopwatch\\": "" @@ -3483,26 +4857,126 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Stopwatch Component", + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "c95468897f408dd0aca2ff582074423dd0455122" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", + "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "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", - "time": "2020-01-04T14:08:26+00:00" + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-25T15:14:59+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.0.1", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -3510,7 +4984,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3542,49 +5020,73 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-28T13:05:58+00:00" }, { "name": "symfony/validator", - "version": "v5.0.4", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dcde9e9116f0b0ee8623dafafea0eb7d57954b2e" + "reference": "d83d2a9f060ce42636feef6af6facc39793354cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dcde9e9116f0b0ee8623dafafea0eb7d57954b2e", - "reference": "dcde9e9116f0b0ee8623dafafea0eb7d57954b2e", + "url": "https://api.github.com/repos/symfony/validator/zipball/d83d2a9f060ce42636feef6af6facc39793354cf", + "reference": "d83d2a9f060ce42636feef6af6facc39793354cf", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^1.1|^2" }, "conflict": { "doctrine/lexer": "<1.0.2", "phpunit/phpunit": "<5.4.3", "symfony/dependency-injection": "<4.4", + "symfony/expression-language": "<5.1", "symfony/http-kernel": "<4.4", "symfony/intl": "<4.4", "symfony/translation": "<4.4", "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "~1.7", + "doctrine/annotations": "^1.10.4", "doctrine/cache": "~1.0", "egulias/email-validator": "^2.1.10", "symfony/cache": "^4.4|^5.0", "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", + "symfony/expression-language": "^5.1", + "symfony/finder": "^4.4|^5.0", "symfony/http-client": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^4.4|^5.0", "symfony/intl": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", "symfony/property-access": "^4.4|^5.0", "symfony/property-info": "^4.4|^5.0", "symfony/translation": "^4.4|^5.0", @@ -3596,7 +5098,7 @@ "egulias/email-validator": "Strict (RFC compliant) email validation", "psr/cache-implementation": "For using the mapping cache.", "symfony/config": "", - "symfony/expression-language": "For using the Expression validator", + "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", "symfony/http-foundation": "", "symfony/intl": "", "symfony/property-access": "For accessing properties within comparison constraints", @@ -3605,11 +5107,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Validator\\": "" @@ -3624,291 +5121,137 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Validator Component", - "homepage": "https://symfony.com", - "time": "2020-01-31T09:13:47+00:00" - }, - { - "name": "twig/twig", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "5e6df0763a83dab0b73c1e803342fc0315f63ff5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/5e6df0763a83dab0b73c1e803342fc0315f63ff5", - "reference": "5e6df0763a83dab0b73c1e803342fc0315f63ff5", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "time": "2020-02-11T06:03:57+00:00" - }, - { - "name": "zendframework/zend-code", - "version": "3.4.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "268040548f92c2bfcba164421c1add2ba43abaaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/268040548f92c2bfcba164421c1add2ba43abaaa", - "reference": "268040548f92c2bfcba164421c1add2ba43abaaa", - "shasum": "" - }, - "require": { - "php": "^7.1", - "zendframework/zend-eventmanager": "^2.6 || ^3.0" - }, - "conflict": { - "phpspec/prophecy": "<1.9.0" - }, - "require-dev": { - "doctrine/annotations": "^1.7", - "ext-phar": "*", - "phpunit/phpunit": "^7.5.16 || ^8.4", - "zendframework/zend-coding-standard": "^1.0", - "zendframework/zend-stdlib": "^2.7 || ^3.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev", - "dev-develop": "3.5.x-dev", - "dev-dev-4.0": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "keywords": [ - "ZendFramework", - "code", - "zf" - ], - "abandoned": "laminas/laminas-code", - "time": "2019-12-10T19:21:15+00:00" - }, - { - "name": "zendframework/zend-diactoros", - "version": "2.2.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "de5847b068362a88684a55b0dbb40d85986cfa52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/de5847b068362a88684a55b0dbb40d85986cfa52", - "reference": "de5847b068362a88684a55b0dbb40d85986cfa52", - "shasum": "" - }, - "require": { - "php": "^7.1", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.5.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^7.0.2", - "zendframework/zend-coding-standard": "~1.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev", - "dev-develop": "2.2.x-dev", - "dev-release-1.8": "1.8.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], - "psr-4": { - "Zend\\Diactoros\\": "src/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" ], - "description": "PSR HTTP Message implementations", - "keywords": [ - "http", - "psr", - "psr-7" + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "abandoned": "laminas/laminas-diactoros", - "time": "2019-11-13T19:16:13+00:00" + "time": "2021-01-28T22:06:19+00:00" }, { - "name": "zendframework/zend-eventmanager", - "version": "3.2.1", + "name": "symfony/var-exporter", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5aed4875ab514c8cb9b6ff4772baa25fa4c10307", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0" - }, - "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + "symfony/var-dumper": "^4.4.9|^5.0.9" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" - } - }, "autoload": { "psr-4": { - "Zend\\EventManager\\": "src/" - } + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://github.com/zendframework/zend-eventmanager", + "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": [ - "event", - "eventmanager", - "events", - "zf2" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "abandoned": "laminas/laminas-eventmanager", - "time": "2018-04-25T15:33:34+00:00" + "time": "2021-01-27T10:01:46+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v3.2.7", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf" + "reference": "5367e3895976b49704ae671f75bc5f0ba1b986ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf", - "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf", + "url": "https://api.github.com/repos/beberlei/assert/zipball/5367e3895976b49704ae671f75bc5f0ba1b986ab", + "reference": "5367e3895976b49704ae671f75bc5f0ba1b986ab", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-intl": "*", "ext-json": "*", "ext-mbstring": "*", "ext-simplexml": "*", - "php": "^7" + "php": "^7.0 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan-shim": "*", - "phpunit/phpunit": ">=6.0.0 <8" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" + "phpstan/phpstan": "*", + "phpunit/phpunit": ">=6.0.0", + "yoast/phpunit-polyfills": "^0.1.0" }, "type": "library", "autoload": { @@ -3941,222 +5284,151 @@ "assertion", "validation" ], - "time": "2019-12-19T17:51:41+00:00" + "support": { + "issues": "https://github.com/beberlei/assert/issues", + "source": "https://github.com/beberlei/assert/tree/v3.3.0" + }, + "time": "2020-11-13T20:02:54+00:00" }, { - "name": "lstrojny/functional-php", - "version": "1.11.0", + "name": "myclabs/deep-copy", + "version": "1.10.2", "source": { "type": "git", - "url": "https://github.com/lstrojny/functional-php.git", - "reference": "df0e516eb44cd0579eeaff57023ef41ffa11947f" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lstrojny/functional-php/zipball/df0e516eb44cd0579eeaff57023ef41ffa11947f", - "reference": "df0e516eb44cd0579eeaff57023ef41ffa11947f", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { - "php": "~7" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "~7", - "squizlabs/php_codesniffer": "~3.0" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { "psr-4": { - "Functional\\": "src/Functional" + "DeepCopy\\": "src/DeepCopy/" }, "files": [ - "src/Functional/Average.php", - "src/Functional/ButLast.php", - "src/Functional/Capture.php", - "src/Functional/ConstFunction.php", - "src/Functional/CompareOn.php", - "src/Functional/CompareObjectHashOn.php", - "src/Functional/Compose.php", - "src/Functional/Concat.php", - "src/Functional/Contains.php", - "src/Functional/Converge.php", - "src/Functional/Curry.php", - "src/Functional/CurryN.php", - "src/Functional/Difference.php", - "src/Functional/DropFirst.php", - "src/Functional/DropLast.php", - "src/Functional/Each.php", - "src/Functional/Equal.php", - "src/Functional/ErrorToException.php", - "src/Functional/Every.php", - "src/Functional/False.php", - "src/Functional/Falsy.php", - "src/Functional/Filter.php", - "src/Functional/First.php", - "src/Functional/FirstIndexOf.php", - "src/Functional/FlatMap.php", - "src/Functional/Flatten.php", - "src/Functional/Flip.php", - "src/Functional/GreaterThan.php", - "src/Functional/GreaterThanOrEqual.php", - "src/Functional/Group.php", - "src/Functional/Head.php", - "src/Functional/Id.php", - "src/Functional/IfElse.php", - "src/Functional/Identical.php", - "src/Functional/IndexesOf.php", - "src/Functional/Intersperse.php", - "src/Functional/Invoke.php", - "src/Functional/InvokeFirst.php", - "src/Functional/InvokeIf.php", - "src/Functional/InvokeLast.php", - "src/Functional/Invoker.php", - "src/Functional/Last.php", - "src/Functional/LastIndexOf.php", - "src/Functional/LessThan.php", - "src/Functional/LessThanOrEqual.php", - "src/Functional/LexicographicCompare.php", - "src/Functional/Map.php", - "src/Functional/Match.php", - "src/Functional/Maximum.php", - "src/Functional/Memoize.php", - "src/Functional/Minimum.php", - "src/Functional/None.php", - "src/Functional/Noop.php", - "src/Functional/Not.php", - "src/Functional/OmitKeys.php", - "src/Functional/PartialAny.php", - "src/Functional/PartialLeft.php", - "src/Functional/PartialMethod.php", - "src/Functional/PartialRight.php", - "src/Functional/Partition.php", - "src/Functional/Pick.php", - "src/Functional/Pluck.php", - "src/Functional/Poll.php", - "src/Functional/Product.php", - "src/Functional/Ratio.php", - "src/Functional/ReduceLeft.php", - "src/Functional/ReduceRight.php", - "src/Functional/Reindex.php", - "src/Functional/Reject.php", - "src/Functional/Repeat.php", - "src/Functional/Retry.php", - "src/Functional/Select.php", - "src/Functional/SelectKeys.php", - "src/Functional/SequenceConstant.php", - "src/Functional/SequenceExponential.php", - "src/Functional/SequenceLinear.php", - "src/Functional/Some.php", - "src/Functional/Sort.php", - "src/Functional/Sum.php", - "src/Functional/SuppressError.php", - "src/Functional/Tap.php", - "src/Functional/Tail.php", - "src/Functional/TailRecursion.php", - "src/Functional/TakeLeft.php", - "src/Functional/TakeRight.php", - "src/Functional/True.php", - "src/Functional/Truthy.php", - "src/Functional/Unique.php", - "src/Functional/With.php", - "src/Functional/Zip.php", - "src/Functional/ZipAll.php" + "src/DeepCopy/deep_copy.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Lars Strojny", - "email": "lstrojny@php.net", - "homepage": "http://usrportage.de" - }, + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ { - "name": "Max Beutel", - "email": "nash12@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "description": "Functional primitives for PHP", - "keywords": [ - "functional" - ], - "time": "2019-12-19T16:01:40+00:00" + "time": "2020-11-13T09:40:50+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.9.5", + "name": "nikic/php-parser", + "version": "v4.10.4", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "parser", + "php" ], - "time": "2020-01-17T21:11:47+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4186,24 +5458,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -4233,32 +5509,39 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, + "time": "2020-12-13T23:18:30+00:00" }, { "name": "phpbench/container", - "version": "1.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phpbench/container.git", - "reference": "c0e3cbf1cd8f867c70b029cb6d1b0b39fe6d409d" + "reference": "04054b7c8cb30f948e5a289601c34834db58aa9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/container/zipball/c0e3cbf1cd8f867c70b029cb6d1b0b39fe6d409d", - "reference": "c0e3cbf1cd8f867c70b029cb6d1b0b39fe6d409d", + "url": "https://api.github.com/repos/phpbench/container/zipball/04054b7c8cb30f948e5a289601c34834db58aa9f", + "reference": "04054b7c8cb30f948e5a289601c34834db58aa9f", "shasum": "" }, "require": { - "psr/container": "^1.0" + "psr/container": "^1.0", + "symfony/options-resolver": "^4.2 || ^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36" + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.52", + "phpunit/phpunit": "^8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4277,33 +5560,37 @@ } ], "description": "Simple, configurable, service container.", - "time": "2018-02-12T08:08:59+00:00" + "support": { + "issues": "https://github.com/phpbench/container/issues", + "source": "https://github.com/phpbench/container/tree/2.0.1" + }, + "time": "2020-11-21T10:55:32+00:00" }, { "name": "phpbench/dom", - "version": "0.2.0", + "version": "0.3.0", "source": { "type": "git", "url": "https://github.com/phpbench/dom.git", - "reference": "b135378dd0004c05ba5446aeddaf0b83339c1c4c" + "reference": "a126b32e83d0541f3c89befa1b166ba32d0048ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/dom/zipball/b135378dd0004c05ba5446aeddaf0b83339c1c4c", - "reference": "b135378dd0004c05ba5446aeddaf0b83339c1c4c", + "url": "https://api.github.com/repos/phpbench/dom/zipball/a126b32e83d0541f3c89befa1b166ba32d0048ab", + "reference": "a126b32e83d0541f3c89befa1b166ba32d0048ab", "shasum": "" }, "require": { "ext-dom": "*", - "php": "^5.4|^7.0" + "php": "^7.2|^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "^8.0|^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "0.3-dev" } }, "autoload": { @@ -4322,37 +5609,41 @@ } ], "description": "DOM wrapper to simplify working with the PHP DOM implementation", - "time": "2016-02-27T12:15:56+00:00" + "support": { + "issues": "https://github.com/phpbench/dom/issues", + "source": "https://github.com/phpbench/dom/tree/0.3.0" + }, + "time": "2020-10-25T08:41:08+00:00" }, { "name": "phpbench/phpbench", - "version": "0.17.0", + "version": "1.0.0-alpha4", "source": { "type": "git", "url": "https://github.com/phpbench/phpbench.git", - "reference": "1db9db9e94d4f252cdfcfe3b7e5c3c191db3e94f" + "reference": "a0e8edfc1a308d79b4950648ece538cef7a6446e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/phpbench/zipball/1db9db9e94d4f252cdfcfe3b7e5c3c191db3e94f", - "reference": "1db9db9e94d4f252cdfcfe3b7e5c3c191db3e94f", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/a0e8edfc1a308d79b4950648ece538cef7a6446e", + "reference": "a0e8edfc1a308d79b4950648ece538cef7a6446e", "shasum": "" }, "require": { "beberlei/assert": "^2.4 || ^3.0", "doctrine/annotations": "^1.2.7", + "doctrine/lexer": "^1.2", "ext-dom": "*", "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", - "lstrojny/functional-php": "1.0 || ^1.2.3", - "php": "^7.2", - "phpbench/container": "~1.2", - "phpbench/dom": "~0.2.0", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "phpbench/container": "^2.0", + "phpbench/dom": "~0.3.0", "seld/jsonlint": "^1.1", "symfony/console": "^4.2 || ^5.0", - "symfony/debug": "^4.2 || ^5.0", "symfony/filesystem": "^4.2 || ^5.0", "symfony/finder": "^4.2 || ^5.0", "symfony/options-resolver": "^4.2 || ^5.0", @@ -4360,15 +5651,16 @@ "webmozart/path-util": "^2.3" }, "require-dev": { - "doctrine/dbal": "^2.4", + "dantleech/invoke": "^1.2", "friendsofphp/php-cs-fixer": "^2.13.1", + "jangregor/phpstan-prophecy": "^0.8.1", "padraic/phar-updater": "^1.0", - "phpspec/prophecy": "^1.8", - "phpstan/phpstan": "^0.10.7", - "phpunit/phpunit": "^8.5" + "phpspec/prophecy": "^1.11", + "phpstan/phpstan": "^0.12.7", + "phpunit/phpunit": "^8.5.8 || ^9.0", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { - "ext-curl": "For (web) reports extension", "ext-xdebug": "For Xdebug profiling extension." }, "bin": [ @@ -4383,7 +5675,6 @@ "autoload": { "psr-4": { "PhpBench\\": "lib/", - "PhpBench\\Extensions\\Dbal\\": "extensions/dbal/lib/", "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/", "PhpBench\\Extensions\\Reports\\": "extensions/reports/lib/" } @@ -4399,32 +5690,33 @@ } ], "description": "PHP Benchmarking Framework", - "time": "2020-01-16T20:14:52+00:00" + "support": { + "issues": "https://github.com/phpbench/phpbench/issues", + "source": "https://github.com/phpbench/phpbench/tree/1.0.0-alpha4" + }, + "time": "2020-12-29T09:42:38+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -4451,32 +5743,35 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.0.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f", - "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -4504,35 +5799,37 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-09T09:16:15+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -4551,37 +5848,41 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.2", + "version": "1.12.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -4614,44 +5915,52 @@ "spy", "stub" ], - "time": "2020-01-20T15:57:02+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, + "time": "2020-12-19T10:15:11+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "9.2.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -4677,32 +5986,165 @@ "testing", "xunit" ], - "time": "2018-10-31T16:06:48+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:44:49+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+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-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4721,32 +6163,49 @@ "role": "lead" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "filesystem", - "iterator" + "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": "2018-09-13T20:33:42+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -4763,42 +6222,90 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "template" + "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": "2015-06-21T13:50:34+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.2", + "name": "phpunit/phpunit", + "version": "9.5.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { - "php": "^7.1" + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "9.5-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4812,38 +6319,53 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "timer" + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-06-07T04:22:29+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.1", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4858,73 +6380,48 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-09-17T06:23:10+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "phpunit/phpunit", - "version": "7.5.20", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" + "php": ">=7.3" }, "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "phpunit/phpunit": "^9.3" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4943,39 +6440,44 @@ "role": "lead" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" + "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-01-08T08:45:45+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4995,34 +6497,44 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "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": "3.0.2", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5035,6 +6547,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -5046,10 +6562,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -5059,33 +6571,100 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5098,13 +6677,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -5115,27 +6694,37 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -5143,7 +6732,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5168,34 +6757,125 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "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": "3.1.x-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -5211,59 +6891,50 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "export", - "exporter" + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-09-14T09:02:43+00:00" + "time": "2020-10-26T15:55:19+00:00" }, { - "name": "sebastian/global-state", - "version": "2.0.0", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": "^7.0" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -5278,42 +6949,50 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5333,32 +7012,42 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "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": "1.1.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5378,32 +7067,42 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "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": "3.0.0", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5416,14 +7115,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -5431,29 +7130,42 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5473,29 +7185,95 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-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/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5516,24 +7294,34 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "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": "seld/jsonlint", - "version": "1.7.2", + "version": "1.8.3", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19" + "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", + "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" @@ -5565,7 +7353,21 @@ "parser", "validator" ], - "time": "2019-10-24T14:27:39+00:00" + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2020-11-11T09:19:24+00:00" }, { "name": "sunrise/coding-standard", @@ -5602,41 +7404,33 @@ "fenric", "sunrise" ], + "support": { + "issues": "https://github.com/sunrise-php/coding-standard/issues", + "source": "https://github.com/sunrise-php/coding-standard/tree/v1.0.0" + }, "time": "2019-02-24T16:31:02+00:00" }, { - "name": "symfony/debug", - "version": "v4.4.4", + "name": "symfony/finder", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "20236471058bbaa9907382500fc14005c84601f0" + "url": "https://github.com/symfony/finder.git", + "reference": "4adc8d172d602008c204c2e16956f99257248e03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/20236471058bbaa9907382500fc14005c84601f0", - "reference": "20236471058bbaa9907382500fc14005c84601f0", + "url": "https://api.github.com/repos/symfony/finder/zipball/4adc8d172d602008c204c2e16956f99257248e03", + "reference": "4adc8d172d602008c204c2e16956f99257248e03", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" + "php": ">=7.2.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5656,132 +7450,48 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2020-01-25T12:44:29+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.3" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, + "funding": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", - "shasum": "" - }, - "require": { - "php": "^7.2.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "time": "2021-01-28T22:06:19+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.0.4", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04" + "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b1ab86ce52b0c0abe031367a173005a025e30e04", - "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce", + "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" @@ -5804,38 +7514,51 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony OptionsResolver Component", + "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", "keywords": [ "config", "configuration", "options" ], - "time": "2020-01-04T14:08:26+00:00" + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T12:56:27+00:00" }, { "name": "symfony/process", - "version": "v5.0.4", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1" + "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", + "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", + "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -5858,29 +7581,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2020-01-09T09:53:06+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -5900,28 +7640,39 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", - "version": "1.6.0", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" @@ -5948,7 +7699,11 @@ "check", "validate" ], - "time": "2019-11-24T13:36:37+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" }, { "name": "webmozart/path-util", @@ -5994,16 +7749,23 @@ } ], "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "phpbench/phpbench": 15 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.3" + "php": "^7.4|^8.0" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.0.0" } diff --git a/config/bootstrap.php b/config/bootstrap.php index 32ae9b7..fdf1e6b 100644 --- a/config/bootstrap.php +++ b/config/bootstrap.php @@ -1,12 +1,14 @@ load(__DIR__ . '/../.env'); +// loads environment variables... +(new Dotenv)->usePutenv()->load(__DIR__ . '/../.env'); diff --git a/database/proxies/.gitkeep b/config/bundles/.gitkeep similarity index 100% rename from database/proxies/.gitkeep rename to config/bundles/.gitkeep diff --git a/config/bundles/example/definitions/doctrine.php b/config/bundles/example/definitions/doctrine.php new file mode 100644 index 0000000..aaccd36 --- /dev/null +++ b/config/bundles/example/definitions/doctrine.php @@ -0,0 +1,10 @@ + add([ + string('{app.root}/src/Bundle/Example/Entity'), + ]), +]; diff --git a/config/bundles/example/definitions/router.php b/config/bundles/example/definitions/router.php new file mode 100644 index 0000000..bf34f87 --- /dev/null +++ b/config/bundles/example/definitions/router.php @@ -0,0 +1,10 @@ + add([ + string('{app.root}/src/Bundle/Example/Controller'), + ]), +]; diff --git a/config/bundles/example/definitions/services.php b/config/bundles/example/definitions/services.php new file mode 100644 index 0000000..015a314 --- /dev/null +++ b/config/bundles/example/definitions/services.php @@ -0,0 +1,12 @@ + autowire(EntryManager::class), + 'entrySerializer' => create(EntrySerializer::class), +]; diff --git a/config/container.php b/config/container.php index 3bc6c07..a6da9ad 100644 --- a/config/container.php +++ b/config/container.php @@ -1,17 +1,31 @@ useAutowiring(true); -$builder->useAnnotations(true); + $builder = new ContainerBuilder(); + $builder->useAutowiring(true); + $builder->useAnnotations(true); -$builder->addDefinitions( - ...glob(__DIR__ . '/definitions/*.php'), - ...glob(__DIR__ . '/definitions/*.php.' . $env), - ...glob(__DIR__ . '/definitions/*.php.local') -); + $builder->addDefinitions( + // main definitions... + ...glob(__DIR__ . '/definitions/*.php'), + ...glob(__DIR__ . '/definitions/*.php.' . $env), + ...glob(__DIR__ . '/definitions/*.php.local'), + // bundle definitions... + ...glob(__DIR__ . '/bundles/*/definitions/*.php'), + ...glob(__DIR__ . '/bundles/*/definitions/*.php.' . $env), + ...glob(__DIR__ . '/bundles/*/definitions/*.php.local'), + ); -return $builder->build(); + if ('prod' === $env) { + $builder->enableCompilation(__DIR__ . '/../cache'); + $builder->enableDefinitionCache('container'); + $builder->writeProxiesToFile(true, __DIR__ . '/../cache'); + } + + return $builder->build(); +})(); diff --git a/config/definitions/app.php b/config/definitions/app.php index 48ffc9c..89a0870 100644 --- a/config/definitions/app.php +++ b/config/definitions/app.php @@ -7,11 +7,34 @@ return [ + /** + * The application name + * + * Use only ASCII without whitespace characters + */ + 'app.name' => 'acme', + + /** + * The application summary (short description) + * + * Use only markdown markup to format text + */ + 'app.summary' => 'Awesome Skeleton', + /** * The application root + * + * Must contain the root path of the application */ 'app.root' => realpath(__DIR__ . '/../..'), + /** + * The application URL + * + * Must contain scheme, host and port (if not standard) + */ + 'app.url' => env('APP_URL', 'http://localhost:3000'), + /** * The application environment * @@ -20,18 +43,18 @@ 'app.env' => env('APP_ENV', 'dev'), /** - * The application name + * If set to true, debug info will be logged * - * Use only ASCII without whitespace characters + * In the production MUST be set to 0 */ - 'app.name' => 'acme', + 'app.debug' => env('APP_DEBUG', '1'), /** - * The application summary + * If set to true, fatal errors will not be displayed * - * Use only markdown markup to format text + * In the production MUST be set to 1 */ - 'app.summary' => 'Awesome Skeleton', + 'app.silent' => env('APP_SILENT', '0'), /** * The application version @@ -40,36 +63,30 @@ * * @link https://semver.org/ */ - 'app.version' => '0.1.0', + 'app.version' => trim(`bash bin/version`), /** * The application signature * * Use to accurate identification of the application (for example in logs) */ - 'app.signature' => string('{app.name}@{app.version}.{app.env}'), - - /** - * If set to false, fatal errors will not be displayed - */ - 'app.display_errors' => env('APP_DISPLAY_ERRORS', true), + 'app.signature' => string('{app.name}@{app.version}-{app.env}'), /** * The application commands */ 'commands' => [ - autowire(App\Command\GenerateOpenApiDocumentationCommand::class), - create(App\Command\GenerateRoadRunnerSystemdUnitCommand::class), + autowire(App\Command\GenerateOpenApiDocumentCommand::class), + autowire(App\Command\GenerateRoadRunnerSystemdUnitCommand::class), ], /** * The application middlewares */ 'middlewares' => [ - autowire(App\Middleware\CorsMiddleware::class), autowire(App\Middleware\ErrorHandlingMiddleware::class), + autowire(App\Middleware\DoormanMiddleware::class), create(Middlewares\ResponseTime::class), create(Middlewares\JsonPayload::class), - create(Middlewares\UrlEncodePayload::class), ], ]; diff --git a/config/definitions/cors.php b/config/definitions/cors.php deleted file mode 100644 index 7a285b1..0000000 --- a/config/definitions/cors.php +++ /dev/null @@ -1,62 +0,0 @@ - env('CORS_DEBUG', false), - - 'cors.configuration' => [ - 'serverOriginScheme' => get('cors.configuration.serverOriginScheme'), - 'serverOriginHost' => get('cors.configuration.serverOriginHost'), - 'serverOriginPort' => get('cors.configuration.serverOriginPort'), - 'preFlightCacheMaxAge' => get('cors.configuration.preFlightCacheMaxAge'), - 'forceAddMethods' => get('cors.configuration.forceAddMethods'), - 'forceAddHeaders' => get('cors.configuration.forceAddHeaders'), - 'useCredentials' => get('cors.configuration.useCredentials'), - 'allOriginsAllowed' => get('cors.configuration.allOriginsAllowed'), - 'allowedOrigins' => get('cors.configuration.allowedOrigins'), - 'allMethodsAllowed' => get('cors.configuration.allMethodsAllowed'), - 'allowedMethods' => get('cors.configuration.allowedMethods'), - 'allHeadersAllowed' => get('cors.configuration.allHeadersAllowed'), - 'allowedHeaders' => get('cors.configuration.allowedHeaders'), - 'exposedHeaders' => get('cors.configuration.exposedHeaders'), - 'checkHost' => get('cors.configuration.checkHost'), - ], - - 'cors.configuration.serverOriginScheme' => env('CORS_SERVER_ORIGIN_SCHEME', 'http'), - 'cors.configuration.serverOriginHost' => env('CORS_SERVER_ORIGIN_HOST', '127.0.0.1'), - 'cors.configuration.serverOriginPort' => env('CORS_SERVER_ORIGIN_PORT', 3000), - - 'cors.configuration.preFlightCacheMaxAge' => 0, - - 'cors.configuration.forceAddMethods' => false, - 'cors.configuration.forceAddHeaders' => false, - - 'cors.configuration.useCredentials' => false, - - 'cors.configuration.allOriginsAllowed' => false, - 'cors.configuration.allowedOrigins' => [], - - 'cors.configuration.allMethodsAllowed' => false, - 'cors.configuration.allowedMethods' => [ - 'HEAD', - 'GET', - 'POST', - 'PUT', - 'PATCH', - 'DELETE', - 'PURGE', - ], - - 'cors.configuration.allHeadersAllowed' => false, - 'cors.configuration.allowedHeaders' => [ - 'Content-Type', - 'api_key', - 'Authorization', - ], - - 'cors.configuration.exposedHeaders' => [], - - 'cors.configuration.checkHost' => true, -]; diff --git a/config/definitions/cors.php.dev b/config/definitions/cors.php.dev deleted file mode 100644 index 98bba94..0000000 --- a/config/definitions/cors.php.dev +++ /dev/null @@ -1,8 +0,0 @@ - add([]), -]; diff --git a/config/definitions/doctrine.php b/config/definitions/doctrine.php index 5a9230b..13843f0 100644 --- a/config/definitions/doctrine.php +++ b/config/definitions/doctrine.php @@ -5,6 +5,7 @@ use function DI\autowire; use function DI\create; +use function DI\decorate; use function DI\env; use function DI\get; use function DI\string; @@ -12,29 +13,67 @@ return [ 'doctrine' => autowire(ManagerRegistry::class), + 'doctrine.types' => [], + 'doctrine.configuration' => [ - 'default' => [ - 'connection' => get('doctrine.configuration.default.connection'), - 'metadata_sources' => get('doctrine.configuration.default.metadata_sources'), - 'metadata_cache' => get('doctrine.configuration.default.metadata_cache'), - 'query_cache' => get('doctrine.configuration.default.query_cache'), - 'result_cache' => get('doctrine.configuration.default.result_cache'), - 'proxy_dir' => get('doctrine.configuration.default.proxy_dir'), - 'proxy_namespace' => get('doctrine.configuration.default.proxy_namespace'), - 'proxy_auto_generate' => get('doctrine.configuration.default.proxy_auto_generate'), + 'master' => [ + 'connection' => get('doctrine.configuration.master.connection'), + 'metadata_sources' => get('doctrine.configuration.master.metadata_sources'), + 'metadata_cache' => get('doctrine.configuration.master.metadata_cache'), + 'query_cache' => get('doctrine.configuration.master.query_cache'), + 'result_cache' => get('doctrine.configuration.master.result_cache'), + 'proxy_dir' => get('doctrine.configuration.master.proxy_dir'), + 'proxy_namespace' => get('doctrine.configuration.master.proxy_namespace'), + 'proxy_auto_generate' => get('doctrine.configuration.master.proxy_auto_generate'), + 'sql_logger' => get('doctrine.configuration.master.sql_logger'), + ], + 'slave' => [ + 'connection' => get('doctrine.configuration.slave.connection'), + 'metadata_sources' => get('doctrine.configuration.slave.metadata_sources'), + 'metadata_cache' => get('doctrine.configuration.slave.metadata_cache'), + 'query_cache' => get('doctrine.configuration.slave.query_cache'), + 'result_cache' => get('doctrine.configuration.slave.result_cache'), + 'proxy_dir' => get('doctrine.configuration.slave.proxy_dir'), + 'proxy_namespace' => get('doctrine.configuration.slave.proxy_namespace'), + 'proxy_auto_generate' => get('doctrine.configuration.slave.proxy_auto_generate'), + 'sql_logger' => get('doctrine.configuration.slave.sql_logger'), ], ], - 'doctrine.configuration.default.connection' => [ - 'url' => env('DATABASE_URL', 'mysql://user:password@127.0.0.1:3306/acme'), - ], + 'doctrine.configuration.master.connection' => ['url' => env('DB_MASTER_URL')], + 'doctrine.configuration.master.metadata_sources' => get('doctrine.configuration.default.metadata_sources'), + 'doctrine.configuration.master.metadata_cache' => get('doctrine.configuration.default.metadata_cache'), + 'doctrine.configuration.master.query_cache' => get('doctrine.configuration.default.query_cache'), + 'doctrine.configuration.master.result_cache' => get('doctrine.configuration.default.result_cache'), + 'doctrine.configuration.master.proxy_dir' => get('doctrine.configuration.default.proxy_dir'), + 'doctrine.configuration.master.proxy_namespace' => get('doctrine.configuration.default.proxy_namespace'), + 'doctrine.configuration.master.proxy_auto_generate' => get('doctrine.configuration.default.proxy_auto_generate'), + 'doctrine.configuration.master.sql_logger' => get('doctrine.configuration.default.sql_logger'), - 'doctrine.configuration.default.metadata_sources' => [string('{app.root}/src/Entity')], - 'doctrine.configuration.default.metadata_cache' => get('doctrine.configuration.default.default_cache'), - 'doctrine.configuration.default.query_cache' => get('doctrine.configuration.default.default_cache'), - 'doctrine.configuration.default.result_cache' => get('doctrine.configuration.default.default_cache'), - 'doctrine.configuration.default.default_cache' => create(ArrayCache::class), - 'doctrine.configuration.default.proxy_dir' => string('{app.root}/database/proxies'), - 'doctrine.configuration.default.proxy_namespace' => 'DoctrineProxies', + 'doctrine.configuration.slave.connection' => ['url' => env('DB_SLAVE_URL')], + 'doctrine.configuration.slave.metadata_sources' => get('doctrine.configuration.default.metadata_sources'), + 'doctrine.configuration.slave.metadata_cache' => get('doctrine.configuration.default.metadata_cache'), + 'doctrine.configuration.slave.query_cache' => get('doctrine.configuration.default.query_cache'), + 'doctrine.configuration.slave.result_cache' => get('doctrine.configuration.default.result_cache'), + 'doctrine.configuration.slave.proxy_dir' => get('doctrine.configuration.default.proxy_dir'), + 'doctrine.configuration.slave.proxy_namespace' => get('doctrine.configuration.default.proxy_namespace'), + 'doctrine.configuration.slave.proxy_auto_generate' => get('doctrine.configuration.default.proxy_auto_generate'), + 'doctrine.configuration.slave.sql_logger' => get('doctrine.configuration.default.sql_logger'), + + 'doctrine.configuration.default.metadata_sources' => [string('{app.root}/src/Entity')], + 'doctrine.configuration.default.metadata_cache' => get('doctrine.configuration.default.default_cache'), + 'doctrine.configuration.default.query_cache' => get('doctrine.configuration.default.default_cache'), + 'doctrine.configuration.default.result_cache' => get('doctrine.configuration.default.default_cache'), + 'doctrine.configuration.default.default_cache' => create(ArrayCache::class), + 'doctrine.configuration.default.proxy_dir' => string('{app.root}/cache'), + 'doctrine.configuration.default.proxy_namespace' => 'DoctrineProxies', 'doctrine.configuration.default.proxy_auto_generate' => true, + 'doctrine.configuration.default.sql_logger' => null, + + 'commands' => decorate(function ($previous, $container) { + // Proxy Commands for the Doctrine Library... + $additional = $container->get('doctrine')->getCommands(); + + return array_merge($previous, $additional); + }), ]; diff --git a/config/definitions/doctrine.php.dev b/config/definitions/doctrine.php.dev new file mode 100644 index 0000000..c84b534 --- /dev/null +++ b/config/definitions/doctrine.php.dev @@ -0,0 +1,10 @@ + create(SQLLogger::class)->constructor(get('logger')), +]; diff --git a/config/definitions/doctrine.php.prod b/config/definitions/doctrine.php.prod index 7f085bc..6d7dc15 100644 --- a/config/definitions/doctrine.php.prod +++ b/config/definitions/doctrine.php.prod @@ -6,6 +6,5 @@ use function DI\create; return [ 'doctrine.configuration.default.default_cache' => create(ApcuCache::class), - 'doctrine.configuration.default.proxy_auto_generate' => false, ]; diff --git a/config/definitions/doctrine.php.test b/config/definitions/doctrine.php.test index 10f0022..70aefbc 100644 --- a/config/definitions/doctrine.php.test +++ b/config/definitions/doctrine.php.test @@ -3,7 +3,10 @@ use function DI\string; return [ - 'doctrine.configuration.default.connection' => [ - 'url' => string('sqlite:///{app.root}/tests/db/default.sqlite'), + 'doctrine.configuration.master.connection' => [ + 'url' => string('sqlite:///{app.root}/tests/db/master.sqlite'), + ], + 'doctrine.configuration.slave.connection' => [ + 'url' => string('sqlite:///{app.root}/tests/db/master.sqlite'), ], ]; diff --git a/config/definitions/migrations.php b/config/definitions/migrations.php index 5863f17..a7bfd75 100644 --- a/config/definitions/migrations.php +++ b/config/definitions/migrations.php @@ -25,7 +25,7 @@ 'migrations.configuration.column_name' => null, 'migrations.configuration.column_length' => null, 'migrations.configuration.executed_at_column_name' => null, - 'migrations.configuration.directory' => string('{app.root}/database/migrations'), + 'migrations.configuration.directory' => string('{app.root}/migrations'), 'migrations.configuration.namespace' => 'DoctrineMigrations', 'migrations.configuration.organize_by_year' => null, 'migrations.configuration.organize_by_year_and_month' => null, diff --git a/config/definitions/monolog.php b/config/definitions/monolog.php index ffe49e1..b868b29 100644 --- a/config/definitions/monolog.php +++ b/config/definitions/monolog.php @@ -10,7 +10,7 @@ 'logger' => create(Logger::class)->constructor( get('monolog.configuration.name'), get('monolog.configuration.handlers'), - get('monolog.configuration.processors') + get('monolog.configuration.processors'), ), 'monolog.configuration.name' => get('app.signature'), diff --git a/config/definitions/monolog.php.prod b/config/definitions/monolog.php.prod index fd6a999..942aaff 100644 --- a/config/definitions/monolog.php.prod +++ b/config/definitions/monolog.php.prod @@ -13,7 +13,7 @@ return [ create(TelegramHandler::class)->constructor( get('monolog.configuration.telegram.token'), get('monolog.configuration.telegram.recipient'), - get('monolog.configuration.telegram.level') + get('monolog.configuration.telegram.level'), ), ]), diff --git a/config/definitions/openapi.php b/config/definitions/openapi.php index 731a1ac..c51f6fa 100644 --- a/config/definitions/openapi.php +++ b/config/definitions/openapi.php @@ -2,8 +2,6 @@ use Sunrise\Http\Router\OpenApi\OpenApi; use Sunrise\Http\Router\OpenApi\Object\Info; -use Sunrise\Http\Router\OpenApi\Object\SecurityRequirement; -use Sunrise\Http\Router\OpenApi\Object\SecurityScheme; use function DI\factory; @@ -20,19 +18,7 @@ $openapi = new OpenApi($info); $openapi->includeUndescribedOperations(false); - - $openapi->addRoute( - ...$container->get('router')->getRoutes() - ); - - $basicAuth = new SecurityScheme('basicAuth', 'http'); - $basicAuth->setScheme('basic'); - - $openapi->addComponentObject($basicAuth); - - $openapi->addSecurityRequirement( - new SecurityRequirement('basicAuth') - ); + $openapi->addRoute(...$container->get('router')->getRoutes()); return $openapi; }), diff --git a/config/definitions/router.php b/config/definitions/router.php index 3bd634a..a10f287 100644 --- a/config/definitions/router.php +++ b/config/definitions/router.php @@ -1,26 +1,31 @@ factory(function ($container) { - $router = new Router(); - - $source = realpath(__DIR__ . '/../../src/Controller'); - $loader = new AnnotationDirectoryLoader(); + $loader = new DescriptorDirectoryLoader(); $loader->setContainer($container); - $loader->attach($source); - $router->load($loader); + $loader->setCache($container->get('router.configuration.metadata_cache')); + $loader->attachArray($container->get('router.configuration.metadata_sources')); - $source = realpath(__DIR__ . '/../../config/routes'); - $loader = new CollectableFileLoader(); - $loader->attach($source); + $router = new Router(); $router->load($loader); return $router; }), + + 'router.configuration.metadata_cache' => factory(function () { + return new Cache(new ArrayAdapter()); + }), + + 'router.configuration.metadata_sources' => [ + string('{app.root}/src/Controller'), + ], ]; diff --git a/config/definitions/router.php.prod b/config/definitions/router.php.prod new file mode 100644 index 0000000..f7814d3 --- /dev/null +++ b/config/definitions/router.php.prod @@ -0,0 +1,12 @@ + factory(function () { + return new Cache(new ApcuAdapter('router')); + }), +]; diff --git a/config/definitions/twig.php b/config/definitions/twig.php deleted file mode 100644 index 65821a9..0000000 --- a/config/definitions/twig.php +++ /dev/null @@ -1,41 +0,0 @@ - create(Environment::class)->constructor( - get('twig.loader'), - get('twig.configuration') - ), - - 'twig.loader' => create(FilesystemLoader::class)->constructor( - get('twig.configuration.loader_paths') - ), - - 'twig.configuration' => [ - 'debug' => get('twig.configuration.debug'), - 'charset' => get('twig.configuration.charset'), - 'strict_variables' => get('twig.configuration.strict_variables'), - 'autoescape' => get('twig.configuration.autoescape'), - 'cache' => get('twig.configuration.cache'), - 'auto_reload' => get('twig.configuration.auto_reload'), - 'optimizations' => get('twig.configuration.optimizations'), - ], - - 'twig.configuration.loader_paths' => [ - string('{app.root}/resources/views'), - ], - - 'twig.configuration.debug' => false, - 'twig.configuration.charset' => 'UTF-8', - 'twig.configuration.strict_variables' => false, - 'twig.configuration.autoescape' => 'html', - 'twig.configuration.cache' => false, - 'twig.configuration.auto_reload' => null, - 'twig.configuration.optimizations' => -1, -]; diff --git a/config/definitions/validator.php b/config/definitions/validator.php new file mode 100644 index 0000000..a3fd9c4 --- /dev/null +++ b/config/definitions/validator.php @@ -0,0 +1,19 @@ + factory(function ($container) : ValidatorInterface { + return Validation::createValidatorBuilder() + ->enableAnnotationMapping(true) + ->addDefaultDoctrineAnnotationReader() + ->setConstraintValidatorFactory( + new ContainerConstraintValidatorFactory($container) + ) + ->getValidator(); + }), +]; diff --git a/tests/Integration/.gitkeep b/migrations/.gitkeep similarity index 100% rename from tests/Integration/.gitkeep rename to migrations/.gitkeep diff --git a/migrations/Version20210203204551.php b/migrations/Version20210203204551.php new file mode 100644 index 0000000..781509a --- /dev/null +++ b/migrations/Version20210203204551.php @@ -0,0 +1,38 @@ +addSql('CREATE TABLE Entry ( + id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\', + name VARCHAR(128) NOT NULL, + slug VARCHAR(128) NOT NULL, + createdAt DATETIME NOT NULL, + updatedAt DATETIME DEFAULT NULL, + INDEX IDX_EAE0B27486CA693C (createdAt), + UNIQUE INDEX UNIQ_EAE0B274989D9B62 (slug), + PRIMARY KEY(id) + ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + } + + public function down(Schema $schema) : void + { + $this->addSql('DROP TABLE Entry'); + } +} diff --git a/phpunit.xml.dist b/phpunit.xml.dist index be8715f..a70b1dd 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -2,13 +2,17 @@ - ./tests/ + ./tests + ./src/Tests + ./src/Bundle/*/Tests ./src + ./src/Tests + ./src/Bundle/*/Tests ./src/Benchmark diff --git a/public/index.php b/public/index.php index 13aeb6c..3e7d5ff 100644 --- a/public/index.php +++ b/public/index.php @@ -15,7 +15,12 @@ $handler->add(...$middlewares); $request = ServerRequestFactory::fromGlobals(); +$response = $handler->handle($request); -emit($handler->handle($request)); +emit($response); + +if (function_exists('fastcgi_finish_request')) { + fastcgi_finish_request(); +} exit(0); diff --git a/resources/views/home.html.twig b/resources/views/home.html.twig deleted file mode 100644 index eee8f9e..0000000 --- a/resources/views/home.html.twig +++ /dev/null @@ -1,46 +0,0 @@ - - - - Awesome Skeleton - - - - - - -
-
-
-
-

Awesome Skeleton

-
-
- Star -
-
-

 

-

The Skeleton based on the following packages:

- -
-
- - - diff --git a/tests/Unit/.gitkeep b/src/Bundle/.gitkeep similarity index 100% rename from tests/Unit/.gitkeep rename to src/Bundle/.gitkeep diff --git a/src/Bundle/Example/Controller/EntryCreateController.php b/src/Bundle/Example/Controller/EntryCreateController.php new file mode 100644 index 0000000..eda9164 --- /dev/null +++ b/src/Bundle/Example/Controller/EntryCreateController.php @@ -0,0 +1,89 @@ +container->get('entryManager')->create($request->getParsedBody()); + + return $this->ok($this->container->get('entrySerializer')->serialize($entry), [], 201); + } +} diff --git a/src/Bundle/Example/Controller/EntryDeleteController.php b/src/Bundle/Example/Controller/EntryDeleteController.php new file mode 100644 index 0000000..1c06b86 --- /dev/null +++ b/src/Bundle/Example/Controller/EntryDeleteController.php @@ -0,0 +1,51 @@ +}", + * methods={"DELETE"}, + * summary="Deletes an existing entry", + * tags={"entry"}, + * ) + * + * @OpenApi\Operation( + * responses={ + * 200: @OpenApi\Response( + * description="OK", + * ), + * }, + * ) + */ +final class EntryDeleteController implements RequestHandlerInterface +{ + use ContainerAwareTrait; + use ResponseFactoryAwareTrait; + + /** + * {@inheritDoc} + * + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $entry = $this->container->get('entryManager')->findById($request->getAttribute('entryId')); + + $this->container->get('entryManager')->delete($entry); + + return $this->ok(); + } +} diff --git a/src/Bundle/Example/Controller/EntryListController.php b/src/Bundle/Example/Controller/EntryListController.php new file mode 100644 index 0000000..46749e5 --- /dev/null +++ b/src/Bundle/Example/Controller/EntryListController.php @@ -0,0 +1,99 @@ +getQueryParams(); + + $limit = 10; + $offset = 0; + + if (!empty($q['limit'])) { + $limit = (int) $q['limit']; + } + + if (!empty($q['offset'])) { + $offset = (int) $q['offset']; + } + + $entries = $this->container->get('entryManager')->getList($limit, $offset); + $data = $this->container->get('entrySerializer')->serializeList(...$entries); + + return $this->ok($data); + } +} diff --git a/src/Bundle/Example/Controller/EntryReadController.php b/src/Bundle/Example/Controller/EntryReadController.php new file mode 100644 index 0000000..08394f1 --- /dev/null +++ b/src/Bundle/Example/Controller/EntryReadController.php @@ -0,0 +1,62 @@ +}", + * methods={"GET"}, + * summary="Reads an existing entry", + * tags={"entry"}, + * ) + * + * @OpenApi\Operation( + * responses={ + * 200: @OpenApi\Response( + * description="OK", + * content={ + * "application/json": @OpenApi\MediaType( + * schema=@OpenApi\Schema( + * type="object", + * properties={ + * "data": @OpenApi\SchemaReference( + * class="App\Bundle\Example\Service\EntrySerializer", + * method="serialize", + * ), + * }, + * ), + * ), + * }, + * ), + * }, + * ) + */ +final class EntryReadController implements RequestHandlerInterface +{ + use ContainerAwareTrait; + use ResponseFactoryAwareTrait; + + /** + * {@inheritDoc} + * + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $entry = $this->container->get('entryManager')->findById($request->getAttribute('entryId')); + + return $this->ok($this->container->get('entrySerializer')->serialize($entry)); + } +} diff --git a/src/Bundle/Example/Controller/EntryUpdateController.php b/src/Bundle/Example/Controller/EntryUpdateController.php new file mode 100644 index 0000000..088493c --- /dev/null +++ b/src/Bundle/Example/Controller/EntryUpdateController.php @@ -0,0 +1,91 @@ +}", + * methods={"PATCH"}, + * summary="Updates an existing entry", + * tags={"entry"}, + * middlewares={ + * "App\Middleware\RequestBodyValidationMiddleware", + * }, + * ) + * + * @OpenApi\Operation( + * requestBody=@OpenApi\RequestBody( + * content={ + * "application/json": @OpenApi\MediaType( + * schema=@OpenApi\Schema( + * type="object", + * properties={ + * "name": @OpenApi\SchemaReference( + * class="App\Bundle\Example\Entity\Entry", + * property="name", + * ), + * "slug": @OpenApi\SchemaReference( + * class="App\Bundle\Example\Entity\Entry", + * property="slug", + * ), + * }, + * required={ + * "name", + * "slug", + * }, + * allowAdditionalProperties=false, + * ), + * ), + * }, + * ), + * responses={ + * 200: @OpenApi\Response( + * description="OK", + * content={ + * "application/json": @OpenApi\MediaType( + * schema=@OpenApi\Schema( + * type="object", + * properties={ + * "data": @OpenApi\SchemaReference( + * class="App\Bundle\Example\Service\EntrySerializer", + * method="serialize", + * ), + * }, + * ), + * ), + * }, + * ), + * }, + * ) + */ +final class EntryUpdateController implements RequestHandlerInterface +{ + use ContainerAwareTrait; + use ResponseFactoryAwareTrait; + + /** + * {@inheritDoc} + * + * @param ServerRequestInterface $request + * + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $entry = $this->container->get('entryManager')->findById($request->getAttribute('entryId')); + + $this->container->get('entryManager')->update($entry, $request->getParsedBody()); + + return $this->ok($this->container->get('entrySerializer')->serialize($entry)); + } +} diff --git a/src/Bundle/Example/Entity/Entry.php b/src/Bundle/Example/Entity/Entry.php new file mode 100644 index 0000000..6d0ef44 --- /dev/null +++ b/src/Bundle/Example/Entity/Entry.php @@ -0,0 +1,217 @@ +id = Uuid::uuid4(); + } + + /** + * Gets the entity ID + * + * @return string|UuidInterface + */ + public function getId() + { + return $this->id; + } + + /** + * Gets the entry name + * + * @return string + */ + public function getName() : string + { + return $this->name; + } + + /** + * Gets the entry slug + * + * @return string + */ + public function getSlug() : string + { + return $this->slug; + } + + /** + * Gets the entity created date + * + * @return null|DateTimeInterface + */ + public function getCreatedAt() : ?DateTimeInterface + { + return $this->createdAt; + } + + /** + * Gets the entity last updated date + * + * @return null|DateTimeInterface + */ + public function getUpdatedAt() : ?DateTimeInterface + { + return $this->updatedAt; + } + + /** + * Sets the entry name + * + * @param string $name + * + * @return void + */ + public function setName(string $name) : void + { + $this->name = $name; + } + + /** + * Sets the entry slug + * + * @param string $slug + * + * @return void + */ + public function setSlug(string $slug) : void + { + $this->slug = $slug; + } + + /** + * @ORM\PrePersist() + * + * @return void + */ + public function prePersist() : void + { + $this->createdAt = new DateTime('now'); + } + + /** + * @ORM\PreUpdate() + * + * @return void + */ + public function preUpdate() : void + { + $this->updatedAt = new DateTime('now'); + } +} diff --git a/src/Bundle/Example/Repository/EntryRepository.php b/src/Bundle/Example/Repository/EntryRepository.php new file mode 100644 index 0000000..3066683 --- /dev/null +++ b/src/Bundle/Example/Repository/EntryRepository.php @@ -0,0 +1,56 @@ +getEntityManager() + ->createQueryBuilder(); + + $qb->select('count(entry.id)') + ->from(Entry::class, 'entry'); + + return (int) $qb->getQuery() + ->getSingleScalarResult(); + } + + /** + * Gets the list of entries + * + * @param null|int $limit + * @param null|int $offset + * + * @return Entry[] + */ + public function getList(?int $limit, ?int $offset) : array + { + $qb = $this->getEntityManager() + ->createQueryBuilder(); + + $qb->select('entry') + ->from(Entry::class, 'entry') + ->orderBy('entry.createdAt', 'DESC'); + + return $qb->getQuery() + ->setMaxResults($limit) + ->setFirstResult($offset) + ->getResult(); + } +} diff --git a/src/Bundle/Example/Service/EntryManager.php b/src/Bundle/Example/Service/EntryManager.php new file mode 100644 index 0000000..d32262c --- /dev/null +++ b/src/Bundle/Example/Service/EntryManager.php @@ -0,0 +1,150 @@ +container->get('doctrine') + ->getManager('slave') + ->getRepository(Entry::class) + ->countAll(); + } + + /** + * Gets the list of entries + * + * @param null|int $limit + * @param null|int $offset + * + * @return Entry[] + */ + public function getList(?int $limit, ?int $offset) : array + { + return $this->container->get('doctrine') + ->getManager('slave') + ->getRepository(Entry::class) + ->getList($limit, $offset); + } + + /** + * Finds an entry by the given ID + * + * Please note that an entry will be read from the master. + * + * Throws an exception if an entry wasn't found. + * + * @param string $id + * + * @return Entry + * + * @throws EntityNotFoundException + */ + public function findById(string $id) : Entry + { + $entry = $this->container->get('doctrine') + ->getManager('master') + ->getRepository(Entry::class) + ->find($id); + + if (! ($entry instanceof Entry)) { + throw new EntityNotFoundException(); + } + + return $entry; + } + + /** + * Creates a new entry from the given data + * + * Throws an exception if the given data isn't valid. + * + * @param array $data + * + * @return Entry + * + * @throws InvalidEntityException + */ + public function create(array $data) : Entry + { + $doctrine = $this->container->get('doctrine'); + $validator = $this->container->get('validator'); + + // inits a new entry and maps the given data to it... + $entry = $doctrine->getHydrator()->hydrate(Entry::class, $data); + // validates the inited entry... + InvalidEntityException::assert($entry, $validator); + + $manager = $doctrine->getManager('master'); + $manager->persist($entry); + $manager->flush(); + + return $entry; + } + + /** + * Updates the given entry from the given data + * + * Throws an exception if the given data isn't valid. + * + * @param Entry $entry + * @param array $data + * + * @return void + * + * @throws InvalidEntityException + */ + public function update(Entry $entry, array $data) : void + { + $doctrine = $this->container->get('doctrine'); + $validator = $this->container->get('validator'); + + // to avoid serious problems re-reads the given entry from the master... + $entry = $this->findById((string) $entry->getId()); + // maps the given data to the given entry... + $doctrine->getHydrator()->hydrate($entry, $data); + // validates the given entry... + InvalidEntityException::assert($entry, $validator); + + $manager = $doctrine->getManager('master'); + $manager->flush(); + } + + /** + * Deletes the given entry + * + * @param Entry $entry + * + * @return void + */ + public function delete(Entry $entry) : void + { + $doctrine = $this->container->get('doctrine'); + + // to avoid serious problems re-reads the given entry from the master... + $entry = $this->findById((string) $entry->getId()); + + $manager = $doctrine->getManager('master'); + $manager->remove($entry); + $manager->flush(); + } +} diff --git a/src/Bundle/Example/Service/EntrySerializer.php b/src/Bundle/Example/Service/EntrySerializer.php new file mode 100644 index 0000000..ad5e888 --- /dev/null +++ b/src/Bundle/Example/Service/EntrySerializer.php @@ -0,0 +1,103 @@ + (string) $entry->getId(), + 'name' => $entry->getName(), + 'slug' => $entry->getSlug(), + 'createdAt' => $this->dateTimeSerialize($entry->getCreatedAt()), + 'updatedAt' => $this->dateTimeSerialize($entry->getUpdatedAt()), + ]; + } + + /** + * @OpenApi\Schema( + * refName="EntryList", + * type="array", + * items=@OpenApi\SchemaReference( + * class="App\Bundle\Example\Service\EntrySerializer", + * method="serialize", + * ), + * ) + * + * @param Entry ...$entries + * + * @return array + */ + public function serializeList(Entry ...$entries) : array + { + $result = []; + foreach ($entries as $entry) { + $result[] = $this->serialize($entry); + } + + return $result; + } + + /** + * Use the nullable operator if the application runned on PHP8 (see below) + * + * @param null|DateTimeInterface $dateTime + * + * @return null|string + */ + public function dateTimeSerialize(?DateTimeInterface $dateTime) : ?string + { + if (null === $dateTime) { + return null; + } + + return $dateTime->format(DateTime::W3C); + } +} diff --git a/src/Bundle/Example/Tests/Service/EntryManagerTest.php b/src/Bundle/Example/Tests/Service/EntryManagerTest.php new file mode 100644 index 0000000..b5fa341 --- /dev/null +++ b/src/Bundle/Example/Tests/Service/EntryManagerTest.php @@ -0,0 +1,326 @@ +getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + $this->assertSame(0, $entryManager->countAll()); + + $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $this->assertSame(1, $entryManager->countAll()); + + $entryManager->create(['name' => 'bar', 'slug' => 'bar']); + $this->assertSame(2, $entryManager->countAll()); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testList() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $entries = $entryManager->getList(null, null); + $this->assertSame([], $entries); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $entries = $entryManager->getList(null, null); + $this->assertCount(1, $entries); + $this->assertSame($foo->getId()->toString(), (string) $entries[0]->getId()); + + $bar = $entryManager->create(['name' => 'bar', 'slug' => 'bar']); + $entries = $entryManager->getList(null, null); + $this->assertCount(2, $entries); + $this->assertSame($bar->getId()->toString(), (string) $entries[0]->getId()); + $this->assertSame($foo->getId()->toString(), (string) $entries[1]->getId()); + + $entries = $entryManager->getList(1, null); + $this->assertCount(1, $entries); + $this->assertSame($bar->getId()->toString(), (string) $entries[0]->getId()); + + $entries = $entryManager->getList(null, 1); + $this->assertCount(1, $entries); + $this->assertSame($foo->getId()->toString(), (string) $entries[0]->getId()); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testFindById() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $bar = $entryManager->create(['name' => 'bar', 'slug' => 'bar']); + + $found = $entryManager->findById($foo->getId()->toString()); + $this->assertSame($foo->getId()->toString(), (string) $found->getId()); + + $found = $entryManager->findById($bar->getId()->toString()); + $this->assertSame($bar->getId()->toString(), (string) $found->getId()); + + $this->expectException(EntityNotFoundException::class); + $entryManager->findById('5b640dde-3503-444d-a234-b97b2752750b'); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testCreate() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $found = $entryManager->findById($foo->getId()->toString()); + $this->assertSame('foo', $found->getName()); + $this->assertSame('foo', $found->getSlug()); + + $bar = $entryManager->create(['name' => 'bar', 'slug' => 'bar']); + $found = $entryManager->findById($bar->getId()->toString()); + $this->assertSame('bar', $found->getName()); + $this->assertSame('bar', $found->getSlug()); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testCreateWithEmptyName() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $this->expectException(InvalidEntityException::class); + $entryManager->create(['name' => '', 'slug' => 'foo']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testCreateWithEmptySlug() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $this->expectException(InvalidEntityException::class); + $entryManager->create(['name' => 'foo', 'slug' => '']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testCreateWithNotUniqueSlug() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + + $this->expectException(InvalidEntityException::class); + $entryManager->create(['name' => 'bar', 'slug' => 'foo']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testUpdate() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $entryManager->update($foo, ['name' => 'bar', 'slug' => 'bar']); + $found = $entryManager->findById($foo->getId()->toString()); + + $this->assertSame('bar', $found->getName()); + $this->assertSame('bar', $found->getSlug()); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testUpdateWithEmptyName() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + + $this->expectException(InvalidEntityException::class); + $entryManager->update($foo, ['name' => '', 'slug' => 'bar']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testUpdateWithEmptySlug() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + + $this->expectException(InvalidEntityException::class); + $entryManager->update($foo, ['name' => 'bar', 'slug' => '']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testUpdateWithNotUniqueSlug() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $bar = $entryManager->create(['name' => 'bar', 'slug' => 'bar']); + + $this->expectException(InvalidEntityException::class); + $entryManager->update($foo, ['name' => 'baz', 'slug' => 'bar']); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testDelete() : void + { + $container = $this->getContainer(); + $doctrine = $container->get('doctrine'); + + $entityManager = $doctrine->getManager('master'); + $this->createDatabaseSchema($entityManager); + + $entryManager = $container->get('entryManager'); + // the database MUST be empty... + $this->assertSame(0, $entryManager->countAll()); + + $foo = $entryManager->create(['name' => 'foo', 'slug' => 'foo']); + $entryManager->delete($foo); + + $this->expectException(EntityNotFoundException::class); + $entryManager->findById($foo->getId()->toString()); + } +} diff --git a/src/Bundle/Example/Tests/Service/EntrySerializerTest.php b/src/Bundle/Example/Tests/Service/EntrySerializerTest.php new file mode 100644 index 0000000..cf84b74 --- /dev/null +++ b/src/Bundle/Example/Tests/Service/EntrySerializerTest.php @@ -0,0 +1,122 @@ +getContainer(); + $entrySerializer = $container->get('entrySerializer'); + + $foo = new Entry(); + $this->assertSame([ + 'id' => $foo->getId()->toString(), + 'name' => '', + 'slug' => '', + 'createdAt' => null, + 'updatedAt' => null, + ], $entrySerializer->serialize($foo)); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testSerializeNewObject() : void + { + $container = $this->getContainer(); + $entrySerializer = $container->get('entrySerializer'); + + $foo = new Entry(); + $foo->setName('foo'); + $foo->setSlug('bar'); + $foo->prePersist(); + $this->assertSame([ + 'id' => $foo->getId()->toString(), + 'name' => 'foo', + 'slug' => 'bar', + 'createdAt' => $foo->getCreatedAt()->format(DateTime::W3C), + 'updatedAt' => null, + ], $entrySerializer->serialize($foo)); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testSerializeUpdatedObject() : void + { + $container = $this->getContainer(); + $entrySerializer = $container->get('entrySerializer'); + + $foo = new Entry(); + $foo->setName('foo'); + $foo->setSlug('bar'); + $foo->prePersist(); + $foo->preUpdate(); + $this->assertSame([ + 'id' => $foo->getId()->toString(), + 'name' => 'foo', + 'slug' => 'bar', + 'createdAt' => $foo->getCreatedAt()->format(DateTime::W3C), + 'updatedAt' => $foo->getUpdatedAt()->format(DateTime::W3C), + ], $entrySerializer->serialize($foo)); + } + + /** + * @return void + * + * @runInSeparateProcess + */ + public function testSerializeList() : void + { + $container = $this->getContainer(); + $entrySerializer = $container->get('entrySerializer'); + + $foo = new Entry(); + $foo->setName('foo'); + $foo->setSlug('bar'); + + $bar = new Entry(); + $bar->setName('baz'); + $bar->setSlug('qux'); + + $this->assertSame([ + [ + 'id' => $foo->getId()->toString(), + 'name' => 'foo', + 'slug' => 'bar', + 'createdAt' => null, + 'updatedAt' => null, + ], + [ + 'id' => $bar->getId()->toString(), + 'name' => 'baz', + 'slug' => 'qux', + 'createdAt' => null, + 'updatedAt' => null, + ], + ], $entrySerializer->serializeList($foo, $bar)); + } +} diff --git a/src/Command/GenerateOpenApiDocumentationCommand.php b/src/Command/GenerateOpenApiDocumentCommand.php similarity index 58% rename from src/Command/GenerateOpenApiDocumentationCommand.php rename to src/Command/GenerateOpenApiDocumentCommand.php index c3367f3..a0fee16 100644 --- a/src/Command/GenerateOpenApiDocumentationCommand.php +++ b/src/Command/GenerateOpenApiDocumentCommand.php @@ -18,14 +18,13 @@ /** * Import constants */ -use const JSON_PRETTY_PRINT; use const JSON_UNESCAPED_SLASHES; use const JSON_UNESCAPED_UNICODE; /** - * GenerateOpenApiDocumentationCommand + * GenerateOpenApiDocumentCommand */ -final class GenerateOpenApiDocumentationCommand extends Command +final class GenerateOpenApiDocumentCommand extends Command { use ContainerAwareTrait; @@ -34,10 +33,8 @@ final class GenerateOpenApiDocumentationCommand extends Command */ protected function configure() : void { - $this->setName('app:openapi:generate-documentation'); - $this->setDescription('Generates OpenApi documentation'); - - $this->addOption('pretty', null, null, 'Use whitespace in returned data to format it'); + $this->setName('app:openapi:generate-document'); + $this->setDescription('Generates OpenApi document'); } /** @@ -45,13 +42,9 @@ protected function configure() : void */ protected function execute(InputInterface $input, OutputInterface $output) : int { - $mode = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE; - - if ($input->getOption('pretty')) { - $mode |= JSON_PRETTY_PRINT; - } + $flags = JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE; - $output->writeln(json_encode($this->container->get('openapi')->toArray(), $mode)); + $output->writeln(json_encode($this->container->get('openapi')->toArray(), $flags)); return 0; } diff --git a/src/Command/GenerateRoadRunnerSystemdUnitCommand.php b/src/Command/GenerateRoadRunnerSystemdUnitCommand.php index 93e3f51..c121ab2 100644 --- a/src/Command/GenerateRoadRunnerSystemdUnitCommand.php +++ b/src/Command/GenerateRoadRunnerSystemdUnitCommand.php @@ -61,26 +61,26 @@ protected function configure() : void */ protected function execute(InputInterface $input, OutputInterface $output) : int { - $rr = trim(`which rr`); + $rr = '/usr/local/bin/rr'; $cwd = trim(`pwd`); $user = trim(`id -u -n`); $group = trim(`id -g -n`); $questioner = $this->getHelper('question'); $replacements = []; - $format = 'The RoadRunner path [%s]: '; + $format = 'RR path [%s]: '; $question = new Question(sprintf($format, $rr), $rr); $replacements['{rr}'] = $questioner->ask($input, $output, $question); - $format = 'The directory in which the service will be started [%s]: '; + $format = 'App root [%s]: '; $question = new Question(sprintf($format, $cwd), $cwd); $replacements['{cwd}'] = $questioner->ask($input, $output, $question); - $format = 'The user on whose behalf the service will be started [%s]: '; + $format = 'User name [%s]: '; $question = new Question(sprintf($format, $user), $user); $replacements['{user}'] = $questioner->ask($input, $output, $question); - $format = 'The group on whose behalf the service will be started [%s]: '; + $format = 'Group name [%s]: '; $question = new Question(sprintf($format, $group), $group); $replacements['{group}'] = $questioner->ask($input, $output, $question); diff --git a/src/Constraint/.gitkeep b/src/Constraint/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 9aaebd5..7890632 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -32,6 +32,6 @@ final class HomeController implements RequestHandlerInterface */ public function handle(ServerRequestInterface $request) : ResponseInterface { - return $this->html($this->container->get('twig')->render('home.html.twig')); + return $this->ok(); } } diff --git a/src/Doctrine/.gitkeep b/src/Doctrine/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Exception/AbstractException.php b/src/Exception/AbstractException.php deleted file mode 100644 index d032054..0000000 --- a/src/Exception/AbstractException.php +++ /dev/null @@ -1,15 +0,0 @@ -invalidEntity = $invalidEntity; - $this->entityViolations = $entityViolations; - - parent::__construct(sprintf('Invalid the entity "%s"', get_class($invalidEntity))); - } - - /** - * Gets an invalid entity - * - * @return object - */ - public function getInvalidEntity() : object - { - return $this->invalidEntity; - } - - /** - * Gets an entity violations - * - * @return ConstraintViolationListInterface - */ - public function getEntityViolations() : ConstraintViolationListInterface - { - return $this->entityViolations; - } - /** * Throws the exception if the given entity isn't valid * @@ -75,17 +21,17 @@ public function getEntityViolations() : ConstraintViolationListInterface * @param ValidatorInterface $validator * * @return void - * * @throws self */ public static function assert(object $entity, ValidatorInterface $validator) : void { $violations = $validator->validate($entity); - if (0 === $violations->count()) { return; } - throw new self($entity, $violations); + throw new self('Invalid Entity', [ + 'violations' => $violations->getIterator()->getArrayCopy(), + ]); } } diff --git a/src/Exception/ResourceNotFoundException.php b/src/Exception/ResourceNotFoundException.php deleted file mode 100644 index c9d6cb9..0000000 --- a/src/Exception/ResourceNotFoundException.php +++ /dev/null @@ -1,36 +0,0 @@ -createSettings( - $this->container->get('cors.configuration') - )); - - if ($this->container->get('cors.debug')) { - $analyzer->setLogger($this->container->get('logger')); - } - - $cors = $analyzer->analyze($request); - - switch ($cors->getRequestType()) { - case $cors::ERR_NO_HOST_HEADER: - case $cors::ERR_ORIGIN_NOT_ALLOWED: - case $cors::ERR_METHOD_NOT_SUPPORTED: - case $cors::ERR_HEADERS_NOT_SUPPORTED: - return $this->createResponse(403); - - case $cors::TYPE_PRE_FLIGHT_REQUEST: - return $this->injectHeaders( - $this->createResponse(200), - $cors->getResponseHeaders() - ); - - case $cors::TYPE_REQUEST_OUT_OF_CORS_SCOPE: - return $handler->handle($request); - - default: - return $this->injectHeaders( - $handler->handle($request), - $cors->getResponseHeaders() - ); - } - } - - /** - * Creates CORS analyzer settings from the given parameters - * - * @param array $params - * - * @return Settings - */ - private function createSettings(array $params) : Settings - { - $settings = new Settings(); - - $settings->init( - $params['serverOriginScheme'], - $params['serverOriginHost'], - (int) $params['serverOriginPort'] - ); - - $settings->setPreFlightCacheMaxAge( - (int) $params['preFlightCacheMaxAge'] - ); - - $params['forceAddMethods'] ? - $settings->enableAddAllowedMethodsToPreFlightResponse() : - $settings->disableAddAllowedMethodsToPreFlightResponse(); - - $params['forceAddHeaders'] ? - $settings->enableAddAllowedHeadersToPreFlightResponse() : - $settings->disableAddAllowedHeadersToPreFlightResponse(); - - $params['useCredentials'] ? - $settings->setCredentialsSupported() : - $settings->setCredentialsNotSupported(); - - $params['allOriginsAllowed'] ? - $settings->enableAllOriginsAllowed() : - $settings->setAllowedOrigins($params['allowedOrigins']); - - $params['allMethodsAllowed'] ? - $settings->enableAllMethodsAllowed() : - $settings->setAllowedMethods($params['allowedMethods']); - - $params['allHeadersAllowed'] ? - $settings->enableAllHeadersAllowed() : - $settings->setAllowedHeaders($params['allowedHeaders']); - - $settings->setExposedHeaders($params['exposedHeaders']); - - $params['checkHost'] ? - $settings->enableCheckHost() : - $settings->disableCheckHost(); - - return $settings; - } - - /** - * Adds the given headers to the given response - * - * @param ResponseInterface $response - * @param array $headers - * - * @return ResponseInterface - */ - private function injectHeaders(ResponseInterface $response, array $headers) : ResponseInterface - { - foreach ($headers as $name => $value) { - $response = $response->withHeader($name, $value); - } - - return $response; - } -} diff --git a/src/Middleware/DoormanMiddleware.php b/src/Middleware/DoormanMiddleware.php new file mode 100644 index 0000000..bb347b2 --- /dev/null +++ b/src/Middleware/DoormanMiddleware.php @@ -0,0 +1,44 @@ +container->get('app.root') . '/.down'; + if (file_exists($file)) { + return $this->createResponse(503) + ->withHeaderObject(new HeaderRetryAfter(new DateTime('+5 minutes'))); + } + + return $handler->handle($request); + } +} diff --git a/src/Middleware/ErrorHandlingMiddleware.php b/src/Middleware/ErrorHandlingMiddleware.php index 59ea7ed..fe2568e 100644 --- a/src/Middleware/ErrorHandlingMiddleware.php +++ b/src/Middleware/ErrorHandlingMiddleware.php @@ -6,32 +6,18 @@ * Import classes */ use App\ContainerAwareTrait; -use App\Exception\InvalidEntityException; -use App\Exception\ResourceNotFoundException; use Arus\Http\Response\ResponseFactoryAwareTrait; +use Middlewares\Utils\HttpErrorException as InvalidPayloadException; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; use Sunrise\Http\Router\Exception\BadRequestException; use Sunrise\Http\Router\Exception\MethodNotAllowedException; -use Sunrise\Http\Router\Exception\RouteNotFoundException; +use Sunrise\Http\Router\Exception\PageNotFoundException; use Sunrise\Http\Router\Exception\UnsupportedMediaTypeException; -use Symfony\Component\Validator\ConstraintViolation; -use Symfony\Component\Validator\ConstraintViolationList; -use Whoops\Run as Whoops; -use Whoops\Handler\PrettyPageHandler; use Throwable; -/** - * Import functions - */ -use function get_class; -use function implode; -use function preg_quote; -use function preg_replace; -use function sprintf; - /** * ErrorHandlingMiddleware */ @@ -40,16 +26,6 @@ final class ErrorHandlingMiddleware implements MiddlewareInterface use ContainerAwareTrait; use ResponseFactoryAwareTrait; - /** - * Error codes - */ - public const BAD_REQUEST_ERROR_CODE = 'b187c971-810b-455a-baf3-06dc6a1591f4'; - public const METHOD_NOT_ALLOWED_ERROR_CODE = '7d8f78d7-c689-409b-8031-8401ab5836b6'; - public const ROUTE_NOT_FOUND_ERROR_CODE = '979775e6-a43b-414f-bb72-cbe0133f621e'; - public const RESOURCE_NOT_FOUND_ERROR_CODE = 'cb378ff8-a1ec-48ba-baad-2c61f47ce95e'; - public const UNSUPPORTED_MEDIA_TYPE_ERROR_CODE = '87255179-5041-4f1b-a469-b891ad5dc623'; - public const UNCAUGHT_EXCEPTION_ERROR_CODE = '594358d2-b5f1-4cfc-8c60-df43cfd720b3'; - /** * {@inheritDoc} * @@ -64,204 +40,111 @@ public function process( ) : ResponseInterface { try { return $handler->handle($request); + } catch (InvalidPayloadException $e) { + return $this->handleInvalidPayload($request, $e); } catch (BadRequestException $e) { return $this->handleBadRequest($request, $e); + } catch (PageNotFoundException $e) { + return $this->handlePageNotFound($request, $e); } catch (MethodNotAllowedException $e) { return $this->handleMethodNotAllowed($request, $e); - } catch (RouteNotFoundException $e) { - return $this->handleRouteNotFound($request, $e); - } catch (ResourceNotFoundException $e) { - return $this->handleResourceNotFound($request, $e); } catch (UnsupportedMediaTypeException $e) { return $this->handleUnsupportedMediaType($request, $e); - } catch (InvalidEntityException $e) { - return $this->handleInvalidEntity($request, $e); } catch (Throwable $e) { - return $this->handleException($request, $e); + return $this->handleUnexpectedError($request, $e); } } /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param BadRequestException $exception + * @param InvalidPayloadException $e * * @return ResponseInterface */ - private function handleBadRequest( + private function handleInvalidPayload( ServerRequestInterface $request, - BadRequestException $exception + InvalidPayloadException $e ) : ResponseInterface { - $violations = new ConstraintViolationList(); - - foreach ($exception->getViolations() as $v) { - $violations->add(new ConstraintViolation( - $v['message'], - null, - [], - null, - $v['property'], - null, - null, - self::BAD_REQUEST_ERROR_CODE, - null, - null - )); - } - - return $this->violations($violations, 400); + return $this->error('Invalid payload', 'requestBody', null, 400); } /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param MethodNotAllowedException $exception + * @param BadRequestException $e * * @return ResponseInterface */ - private function handleMethodNotAllowed( + private function handleBadRequest( ServerRequestInterface $request, - MethodNotAllowedException $exception + BadRequestException $e ) : ResponseInterface { - return $this->error( - $exception->getMessage(), - $request->getUri()->getPath(), - self::METHOD_NOT_ALLOWED_ERROR_CODE, - 405 - )->withHeader('Allow', implode(',', $exception->getAllowedMethods())); + return $this->violations($e->getViolations(), 400); } /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param RouteNotFoundException $exception + * @param PageNotFoundException $e * * @return ResponseInterface */ - private function handleRouteNotFound( + private function handlePageNotFound( ServerRequestInterface $request, - RouteNotFoundException $exception + PageNotFoundException $e ) : ResponseInterface { - return $this->error( - $exception->getMessage(), - $request->getUri()->getPath(), - self::ROUTE_NOT_FOUND_ERROR_CODE, - 404 - ); + return $this->createResponse(404); } /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param ResourceNotFoundException $exception + * @param MethodNotAllowedException $e * * @return ResponseInterface */ - private function handleResourceNotFound( + private function handleMethodNotAllowed( ServerRequestInterface $request, - ResourceNotFoundException $exception + MethodNotAllowedException $e ) : ResponseInterface { - return $this->error( - $exception->getMessage(), - $request->getUri()->getPath(), - self::RESOURCE_NOT_FOUND_ERROR_CODE, - 404 - ); + return $this->createResponse(405) + ->withHeader('Allow', $e->getJoinedAllowedMethods()); } /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param UnsupportedMediaTypeException $exception + * @param UnsupportedMediaTypeException $e * * @return ResponseInterface */ private function handleUnsupportedMediaType( ServerRequestInterface $request, - UnsupportedMediaTypeException $exception + UnsupportedMediaTypeException $e ) : ResponseInterface { - return $this->error( - $exception->getMessage(), - $request->getUri()->getPath(), - self::UNSUPPORTED_MEDIA_TYPE_ERROR_CODE, - 415 - )->withHeader('Accept', implode(',', $exception->getSupportedTypes())); + return $this->createResponse(415) + ->withHeader('Accept', $e->getJoinedSupportedTypes()); } /** - * Returns a response with the given processed exception - * - * @param ServerRequestInterface $request - * @param InvalidEntityException $exception - * - * @return ResponseInterface - */ - private function handleInvalidEntity( - ServerRequestInterface $request, - InvalidEntityException $exception - ) : ResponseInterface { - return $this->violations($exception->getEntityViolations(), 400); - } - - /** - * Returns a response with the given processed exception - * * @param ServerRequestInterface $request - * @param Throwable $exception + * @param Throwable $e * * @return ResponseInterface - * - * @link https://github.com/filp/whoops */ - private function handleException( + private function handleUnexpectedError( ServerRequestInterface $request, - Throwable $exception + Throwable $e ) : ResponseInterface { - $this->container->get('logger')->error($exception->getMessage(), [ - 'exception' => $exception, + $this->container->get('logger')->error($e->getMessage(), [ + 'exception' => $e, ]); - if (!$this->container->get('app.display_errors')) { - return $this->error( - sprintf( - 'Caught the exception %s in the file %s on line %d.', - get_class($exception), - $this->hideRoot($exception->getFile()), - $exception->getLine() - ), - $request->getUri()->getPath(), - self::UNCAUGHT_EXCEPTION_ERROR_CODE, - 500 - ); + if ($this->container->get('app.silent')) { + return $this->createResponse(500); } - $whoops = new Whoops(); - $whoops->allowQuit(false); - $whoops->sendHttpCode(false); - $whoops->writeToOutput(false); - $whoops->pushHandler(new PrettyPageHandler()); - - return $this->html($whoops->handleException($exception), 500); - } - - /** - * Hides the application root from the given path - * - * @param string $path - * - * @return string - */ - private function hideRoot(string $path) : string - { - $root = preg_quote($this->container->get('app.root'), '/'); - - $path = preg_replace('/^' . $root . '/ui', '', $path); - - return $path; + return $this->error( + $e->getMessage(), + $e->getFile() .':'. $e->getLine(), + $e->getCode(), + 500 + ); } } diff --git a/src/Middleware/RequestBodyValidationMiddleware.php b/src/Middleware/RequestBodyValidationMiddleware.php index 2a7bb93..4519788 100644 --- a/src/Middleware/RequestBodyValidationMiddleware.php +++ b/src/Middleware/RequestBodyValidationMiddleware.php @@ -5,15 +5,29 @@ /** * Import classes */ -use Sunrise\Http\Router\OpenApi\Middleware\RequestBodyValidationMiddleware as BaseRequestBodyValidationMiddleware; +use App\ContainerAwareTrait; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; +use Sunrise\Http\Router\OpenApi\Middleware\RequestBodyValidationMiddleware as BaseMiddleware; /** * RequestBodyValidationMiddleware - * - * You can cache the `fetchJsonSchema` method to reduce memory consumption. - * - * @link https://github.com/sunrise-php/http-router-openapi */ -final class RequestBodyValidationMiddleware extends BaseRequestBodyValidationMiddleware +final class RequestBodyValidationMiddleware extends BaseMiddleware implements MiddlewareInterface { + use ContainerAwareTrait; + + /** + * {@inheritDoc} + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface + { + if ('prod' === $this->container->get('app.env')) { + $this->useCache(); + } + + return parent::process($request, $handler); + } } diff --git a/src/Middleware/RequestHeaderValidationMiddleware.php b/src/Middleware/RequestHeaderValidationMiddleware.php new file mode 100644 index 0000000..5e32cb0 --- /dev/null +++ b/src/Middleware/RequestHeaderValidationMiddleware.php @@ -0,0 +1,33 @@ +container->get('app.env')) { + $this->useCache(); + } + + return parent::process($request, $handler); + } +} diff --git a/src/Middleware/RequestQueryValidationMiddleware.php b/src/Middleware/RequestQueryValidationMiddleware.php new file mode 100644 index 0000000..b1d3719 --- /dev/null +++ b/src/Middleware/RequestQueryValidationMiddleware.php @@ -0,0 +1,33 @@ +container->get('app.env')) { + $this->useCache(); + } + + return parent::process($request, $handler); + } +} diff --git a/src/Tests/.gitkeep b/src/Tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/DatabaseSchemaToolTrait.php b/tests/DatabaseSchemaToolTrait.php index 8e7e887..f9fed3b 100644 --- a/tests/DatabaseSchemaToolTrait.php +++ b/tests/DatabaseSchemaToolTrait.php @@ -24,13 +24,7 @@ trait DatabaseSchemaToolTrait private function createDatabaseSchema(EntityManagerInterface $entityManager) : void { $schema = new SchemaTool($entityManager); - - $schema->dropSchema( - $entityManager->getMetadataFactory()->getAllMetadata() - ); - - $schema->createSchema( - $entityManager->getMetadataFactory()->getAllMetadata() - ); + $schema->dropSchema($entityManager->getMetadataFactory()->getAllMetadata()); + $schema->createSchema($entityManager->getMetadataFactory()->getAllMetadata()); } }