diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2fd3a293..3636f9d4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - php-version: ['7.4', '8.0', '8.1'] + php-version: ['7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] steps: - name: Setup MySQL latest @@ -35,7 +35,7 @@ jobs: run: echo "::set-output name=date::$(date +'%Y-%m')" - name: Cache composer dependencies - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ steps.key-date.outputs.date }}-${{ hashFiles('composer.json') }} @@ -45,6 +45,7 @@ jobs: - name: Setup Database run: | + sudo systemctl start mysql n=0 until [ "$n" -ge 5 ] do diff --git a/.php-censor.yml b/.php-censor.yml index 5895258e..d111b9e0 100644 --- a/.php-censor.yml +++ b/.php-censor.yml @@ -10,10 +10,15 @@ setup: SKIP_DB_TESTS: '0' POSTGRESQL_USER: '%SECRET:postgres_testdb_user%' POSTGRESQL_PASSWORD: '%SECRET:postgres_testdb_password%' - POSTGRESQL_DBNAME: '%SECRET:postgres_testdb_name%' + POSTGRESQL_DBNAME: '%SECRET:postgres_testdb_name%_%BUILD_ID%' MYSQL_USER: '%SECRET:mysql_testdb_user%' MYSQL_PASSWORD: '%SECRET:mysql_testdb_password%' - MYSQL_DBNAME: '%SECRET:mysql_testdb_name%' + MYSQL_DBNAME: '%SECRET:mysql_testdb_name%_%BUILD_ID%' + shell: + execute_all: true + commands: + - "cd ~ && ./create_test_ci_mysql_db.sh %BUILD_ID%" + - "cd ~ && ./create_test_ci_postgres_db.sh %BUILD_ID%" test: php_unit: @@ -44,6 +49,10 @@ test: allow_failures: false complete: + shell: + commands: + - "cd ~ && ./drop_test_ci_mysql_db.sh %BUILD_ID%" + - "cd ~ && ./drop_test_ci_postgres_db.sh %BUILD_ID%" email_notify: default_mailto_address: poisoncorpsee@gmail.com telegram_notify: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9db518e7..dc1b566b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,54 @@ Changelog 2.1 ============= -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [2.1.6 (Mr. Meeseeks)](https://github.com/php-censor/php-censor/tree/2.1.6) (2025-03-15) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.1.5...2.1.6) + +### Fixed + +- Security issue with remember me key in auth. See: https://chmod744.super.site/redacted-vulnerability. +- Security issue CVE-2024-50345: CVE-2024-50345: Open redirect via browser-sanitized URLs. See: https://symfony.com/cve-2024-50345. + + +## [2.1.5 (Mr. Meeseeks)](https://github.com/php-censor/php-censor/tree/2.1.5) (2024-05-04) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.1.4...2.1.5) + +### Added + +- Support of PHP 8.2 and 8.3 in GitHub Actions. + +### Fixed + +- Security issue with remember me key in auth. See: https://chmod744.super.site/redacted-vulnerability. + + +## [2.1.4 (Mr. Meeseeks)](https://github.com/php-censor/php-censor/tree/2.1.4) (2024-01-11) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.1.3...2.1.4) + +### Fixed + +- Updated dependencies. Fixed: + - `guzzlehttp/psr7` (1.9.0) | CVE-2023-29197: Improper header validation | https://github.com/guzzle/psr7/security/advisories/GHSA-wxmh-65f7-jcvw. + + +## [2.1.3 (Mr. Meeseeks)](https://github.com/php-censor/php-censor/tree/2.1.3) (2023-01-11) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.1.2...2.1.3) + +### Fixed + +- PHP 8.1 deprecation while searching for composer binary. Pull request [#434](https://github.com/php-censor/php-censor/pull/434). + Thanks to [@StudioMaX](https://github.com/StudioMaX). +- PHP 8.1 error with return type of `php_user_filter::filter` function. + + ## [2.1.2 (Mr. Meeseeks)](https://github.com/php-censor/php-censor/tree/2.1.2) (2022-09-01) [Full Changelog](https://github.com/php-censor/php-censor/compare/2.1.1...2.1.2) diff --git a/Makefile b/Makefile index 84eb1c67..ebbb9b0b 100644 --- a/Makefile +++ b/Makefile @@ -31,8 +31,14 @@ code-style-fix: php-info install ## Fix code style psalm: php-info install ## Run Psalm check $(PHP) vendor/bin/psalm --config=psalm.xml.dist --threads=4 --show-snippet=true --show-info=true +rector: php-info install ## Run Rector check + $(PHP) vendor/bin/rector --dry-run --clear-cache + +rector-fix: php-info install ## Run Rector fix + $(PHP) vendor/bin/rector --clear-cache + run-worker: php-info install ## Run PHP Censor worker $(PHP) bin/console php-censor:worker -v -.PHONY: php-info list install install-force update test test-coverage mutation-test code-style-fix psalm run-worker +.PHONY: php-info list install install-force update test test-coverage mutation-test code-style-fix psalm rector rector-fix run-worker .DEFAULT_GOAL := list diff --git a/README.md b/README.md index 0fe4b3ad..89079768 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

**PHP Censor** is an open source, self-hosted, continuous integration server for PHP projects -([PHPCI](https://www.phptesting.org) fork). [Official twitter @php_censor](https://twitter.com/php_censor). +([PHPCI](https://github.com/dancryer/PHPCI) fork). [Official twitter @php_censor](https://twitter.com/php_censor). PHP Censor versions: @@ -21,8 +21,8 @@ PHP Censor versions: | `1.1` (Birdperson) | `1.1.6` | `release-1.1` | Old version (**UNSUPPORTED**) | `>=5.6, <8.0` | | `1.2` (Summer Smith) | `1.2.4` | `release-1.2` | Old version (**UNSUPPORTED**) | `>=5.6, <8.0` | | `1.3` (Jerry Smith) | `1.3.7` | `release-1.3` | Old version (**UNSUPPORTED**) | `>=5.6, <8.0` | -| `2.0` (Rick Sanchez) | `2.0.10` | `release-2.0` | Last stable version ([Upgrade from v1 to v2](docs/UPGRADE_2.0.md)) | `>=7.4` | -| `2.1` (Mr. Meeseeks) | `2.1.2` | `release-2.1` | Current stable version | `>=7.4` | +| `2.0` (Rick Sanchez) | `2.0.14` | `release-2.0` | Last stable version ([Upgrade from v1 to v2](docs/UPGRADE_2.0.md)) | `>=7.4` | +| `2.1` (Mr. Meeseeks) | `2.1.6` | `release-2.1` | Current stable version | `>=7.4` | | `2.2` | WIP | `master` | Feature minor version (WIP) | `>=7.4` | [![Dashboard](docs/screenshots/dashboard.png)](docs/screenshots/dashboard.png) diff --git a/composer.json b/composer.json index 74b26eb1..fee2d97b 100644 --- a/composer.json +++ b/composer.json @@ -96,7 +96,8 @@ "php-censor/phpdoc-checker": "^3.0", "friendsofphp/php-cs-fixer": "^3.3", "symfony/var-dumper": "^4.4", - "vimeo/psalm": "^4.23" + "vimeo/psalm": "^4.23", + "rector/rector": "^0.14" }, "extra": { "platform": { diff --git a/composer.lock b/composer.lock index 1679fa52..09fe3ffd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9338892db5fc6bdd5295204471d78718", + "content-hash": "b021933c25e0840d8c885e184593250d", "packages": [ { "name": "cakephp/core", - "version": "4.4.5", + "version": "4.5.9", "source": { "type": "git", "url": "https://github.com/cakephp/core.git", - "reference": "77e53e3784863c1b8006464b82ab842ee7c58e6b" + "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/core/zipball/77e53e3784863c1b8006464b82ab842ee7c58e6b", - "reference": "77e53e3784863c1b8006464b82ab842ee7c58e6b", + "url": "https://api.github.com/repos/cakephp/core/zipball/c2f4dff110d41e475d1041f2abe236f1c62d0cd0", + "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0", "shasum": "" }, "require": { "cakephp/utility": "^4.0", "php": ">=7.4.0" }, + "provide": { + "psr/container-implementation": "^1.0 || ^2.0" + }, "suggest": { "cakephp/cache": "To use Configure::store() and restore().", "cakephp/event": "To use PluginApplicationInterface or plugin applications.", @@ -61,20 +64,20 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/core" }, - "time": "2022-08-26T02:01:18+00:00" + "time": "2023-10-21T13:30:46+00:00" }, { "name": "cakephp/database", - "version": "4.4.5", + "version": "4.5.9", "source": { "type": "git", "url": "https://github.com/cakephp/database.git", - "reference": "eec6239b0734e2a4dfe212dc93bcd505c7d296ef" + "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/database/zipball/eec6239b0734e2a4dfe212dc93bcd505c7d296ef", - "reference": "eec6239b0734e2a4dfe212dc93bcd505c7d296ef", + "url": "https://api.github.com/repos/cakephp/database/zipball/317739cc32060ef19b6c19c87ac6b64848d78e27", + "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27", "shasum": "" }, "require": { @@ -83,7 +86,8 @@ "php": ">=7.4.0" }, "suggest": { - "cakephp/i18n": "If you are using locale-aware datetime formats or Chronos types." + "cakephp/i18n": "If you are using locale-aware datetime formats or Chronos types.", + "cakephp/log": "If you want to use query logging without providing a logger yourself." }, "type": "library", "autoload": { @@ -116,20 +120,20 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/database" }, - "time": "2022-08-18T21:01:25+00:00" + "time": "2023-12-07T12:23:54+00:00" }, { "name": "cakephp/datasource", - "version": "4.4.5", + "version": "4.5.9", "source": { "type": "git", "url": "https://github.com/cakephp/datasource.git", - "reference": "6fbd1f49833dedf3bd351e1a98b18133a6b9e86c" + "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/datasource/zipball/6fbd1f49833dedf3bd351e1a98b18133a6b9e86c", - "reference": "6fbd1f49833dedf3bd351e1a98b18133a6b9e86c", + "url": "https://api.github.com/repos/cakephp/datasource/zipball/073bb5f3b082b87c20309c1b25b1ac2a238d97b3", + "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3", "shasum": "" }, "require": { @@ -174,20 +178,20 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/datasource" }, - "time": "2022-08-18T20:55:21+00:00" + "time": "2024-11-19T19:41:00+00:00" }, { "name": "cakephp/utility", - "version": "4.4.5", + "version": "4.5.9", "source": { "type": "git", "url": "https://github.com/cakephp/utility.git", - "reference": "7d28a3935f746fcbbfb38e8dddaa9c9d48b251c5" + "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/utility/zipball/7d28a3935f746fcbbfb38e8dddaa9c9d48b251c5", - "reference": "7d28a3935f746fcbbfb38e8dddaa9c9d48b251c5", + "url": "https://api.github.com/repos/cakephp/utility/zipball/708929115e5b400e1b5b76d8120ca2e51e2de199", + "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199", "shasum": "" }, "require": { @@ -233,35 +237,82 @@ "issues": "https://github.com/cakephp/cakephp/issues", "source": "https://github.com/cakephp/utility" }, - "time": "2022-08-19T06:02:03+00:00" + "time": "2024-06-23T00:11:14+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" + }, + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^12", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.21" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -293,7 +344,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.1" }, "funding": [ { @@ -309,29 +360,28 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2024-02-05T11:35:39+00:00" }, { "name": "egulias/email-validator", - "version": "3.2.1", + "version": "3.2.6", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", + "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", + "doctrine/lexer": "^1.2|^2", "php": ">=7.2", "symfony/polyfill-intl-idn": "^1.15" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^8.5.8|^9.3.3", "vimeo/psalm": "^4" }, @@ -369,7 +419,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" }, "funding": [ { @@ -377,7 +427,7 @@ "type": "github" } ], - "time": "2022-06-18T20:57:19+00:00" + "time": "2023-06-01T07:04:22+00:00" }, { "name": "guzzlehttp/guzzle", @@ -496,16 +546,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", "shasum": "" }, "require": { @@ -515,11 +565,6 @@ "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -560,7 +605,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/1.5.3" }, "funding": [ { @@ -576,20 +621,20 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-05-21T12:31:43+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", "shasum": "" }, "require": { @@ -608,11 +653,6 @@ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -670,7 +710,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9.0" + "source": "https://github.com/guzzle/psr7/tree/1.9.1" }, "funding": [ { @@ -686,7 +726,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:03+00:00" + "time": "2023-04-17T16:00:37+00:00" }, { "name": "jasongrimes/paginator", @@ -792,16 +832,16 @@ }, { "name": "monolog/monolog", - "version": "2.8.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", "shasum": "" }, "require": { @@ -816,14 +856,14 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", "predis/predis": "^1.1 || ^2.0", "rollbar/rollbar": "^1.3 || ^2 || ^3", "ruflin/elastica": "^7", @@ -878,7 +918,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + "source": "https://github.com/Seldaek/monolog/tree/2.10.0" }, "funding": [ { @@ -890,20 +930,20 @@ "type": "tidelift" } ], - "time": "2022-07-24T11:55:47+00:00" + "time": "2024-11-12T12:43:37+00:00" }, { "name": "pda/pheanstalk", - "version": "v4.0.4", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/pheanstalk/pheanstalk.git", - "reference": "1a43eb97a53144a2e692bce2ea2be721cc9913a4" + "reference": "1459f2f62dddfe28902e0584708417dddd79bd70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pheanstalk/pheanstalk/zipball/1a43eb97a53144a2e692bce2ea2be721cc9913a4", - "reference": "1a43eb97a53144a2e692bce2ea2be721cc9913a4", + "url": "https://api.github.com/repos/pheanstalk/pheanstalk/zipball/1459f2f62dddfe28902e0584708417dddd79bd70", + "reference": "1459f2f62dddfe28902e0584708417dddd79bd70", "shasum": "" }, "require": { @@ -943,9 +983,9 @@ ], "support": { "issues": "https://github.com/pheanstalk/pheanstalk/issues", - "source": "https://github.com/pheanstalk/pheanstalk/tree/v4.0.4" + "source": "https://github.com/pheanstalk/pheanstalk/tree/v4.0.5" }, - "time": "2021-11-19T15:00:20+00:00" + "time": "2024-01-11T15:06:06+00:00" }, { "name": "php-censor/common", @@ -1283,25 +1323,25 @@ }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -1330,9 +1370,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/1.1" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:50:52+00:00" }, { "name": "psr/log", @@ -1481,16 +1521,16 @@ }, { "name": "robmorgan/phinx", - "version": "0.12.12", + "version": "0.12.13", "source": { "type": "git", "url": "https://github.com/cakephp/phinx.git", - "reference": "9a6ce1e7fdf0fa4e602ba5875b5bc9442ccaa115" + "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/9a6ce1e7fdf0fa4e602ba5875b5bc9442ccaa115", - "reference": "9a6ce1e7fdf0fa4e602ba5875b5bc9442ccaa115", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/6eb0f295e140ed2804d93396755f0ce9ada4ec07", + "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07", "shasum": "" }, "require": { @@ -1561,22 +1601,22 @@ ], "support": { "issues": "https://github.com/cakephp/phinx/issues", - "source": "https://github.com/cakephp/phinx/tree/0.12.12" + "source": "https://github.com/cakephp/phinx/tree/0.12.13" }, - "time": "2022-07-09T18:53:51+00:00" + "time": "2022-10-03T04:57:40+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -1621,7 +1661,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -1629,20 +1669,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sensiolabs/ansi-to-html", - "version": "v1.2.1", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/sensiolabs/ansi-to-html.git", - "reference": "94a3145aae4733ff933c8910263ef56d1ae317a9" + "reference": "7a6c16623c02bdbcbe907ab2abcf465ebb31db72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/ansi-to-html/zipball/94a3145aae4733ff933c8910263ef56d1ae317a9", - "reference": "94a3145aae4733ff933c8910263ef56d1ae317a9", + "url": "https://api.github.com/repos/sensiolabs/ansi-to-html/zipball/7a6c16623c02bdbcbe907ab2abcf465ebb31db72", + "reference": "7a6c16623c02bdbcbe907ab2abcf465ebb31db72", "shasum": "" }, "require": { @@ -1658,11 +1698,6 @@ "twig/twig": "Provides nice templating features" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, "autoload": { "psr-4": { "SensioLabs\\AnsiConverter\\": "SensioLabs/AnsiConverter" @@ -1681,9 +1716,9 @@ "description": "A library to convert a text with ANSI codes to HTML", "support": { "issues": "https://github.com/sensiolabs/ansi-to-html/issues", - "source": "https://github.com/sensiolabs/ansi-to-html/tree/v1.2.1" + "source": "https://github.com/sensiolabs/ansi-to-html/tree/v1.3.0" }, - "time": "2020-10-06T05:48:55+00:00" + "time": "2024-11-25T09:31:54+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -1763,16 +1798,16 @@ }, { "name": "symfony/browser-kit", - "version": "v5.4.11", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "081fe28a26b6bd671dea85ef3a4b5003f3c88027" + "reference": "03cce39764429e07fbab9b989a1182a24578341d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/081fe28a26b6bd671dea85ef3a4b5003f3c88027", - "reference": "081fe28a26b6bd671dea85ef3a4b5003f3c88027", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/03cce39764429e07fbab9b989a1182a24578341d", + "reference": "03cce39764429e07fbab9b989a1182a24578341d", "shasum": "" }, "require": { @@ -1815,7 +1850,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.11" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.45" }, "funding": [ { @@ -1831,20 +1866,20 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:05+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/cache", - "version": "v5.4.11", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "5a0fff46df349f0db3fe242263451fddf5277362" + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/5a0fff46df349f0db3fe242263451fddf5277362", - "reference": "5a0fff46df349f0db3fe242263451fddf5277362", + "url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", "shasum": "" }, "require": { @@ -1872,8 +1907,8 @@ "require-dev": { "cache/integration-tests": "dev-master", "doctrine/cache": "^1.6|^2.0", - "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0", "symfony/config": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", @@ -1905,14 +1940,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.11" + "source": "https://github.com/symfony/cache/tree/v5.4.46" }, "funding": [ { @@ -1928,20 +1963,20 @@ "type": "tidelift" } ], - "time": "2022-07-28T15:25:17+00:00" + "time": "2024-11-04T11:43:55+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.2", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", "shasum": "" }, "require": { @@ -1953,12 +1988,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1991,7 +2026,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" }, "funding": [ { @@ -2007,20 +2042,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/config", - "version": "v5.4.11", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "ec79e03125c1d2477e43dde8528535d90cc78379" + "reference": "977c88a02d7d3f16904a81907531b19666a08e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379", - "reference": "ec79e03125c1d2477e43dde8528535d90cc78379", + "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78", + "reference": "977c88a02d7d3f16904a81907531b19666a08e78", "shasum": "" }, "require": { @@ -2070,7 +2105,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.11" + "source": "https://github.com/symfony/config/tree/v5.4.46" }, "funding": [ { @@ -2086,20 +2121,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2024-10-30T07:58:02+00:00" }, { "name": "symfony/console", - "version": "v5.4.12", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -2164,12 +2199,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.12" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -2185,20 +2220,20 @@ "type": "tidelift" } ], - "time": "2022-08-17T13:18:05+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.11", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "c1681789f059ab756001052164726ae88512ae3d" + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/c1681789f059ab756001052164726ae88512ae3d", - "reference": "c1681789f059ab756001052164726ae88512ae3d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4f7f3c35fba88146b56d0025d20ace3f3901f097", + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097", "shasum": "" }, "require": { @@ -2235,7 +2270,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.11" + "source": "https://github.com/symfony/css-selector/tree/v5.4.45" }, "funding": [ { @@ -2251,20 +2286,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.11", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "a8b9251016e9476db73e25fa836904bc0bf74c62" + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a8b9251016e9476db73e25fa836904bc0bf74c62", - "reference": "a8b9251016e9476db73e25fa836904bc0bf74c62", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", "shasum": "" }, "require": { @@ -2324,7 +2359,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.11" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.48" }, "funding": [ { @@ -2340,20 +2375,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2024-11-20T10:51:57+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", "shasum": "" }, "require": { @@ -2361,12 +2396,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2391,7 +2426,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" }, "funding": [ { @@ -2407,20 +2442,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.12", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "291c1e92281a09152dda089f782e23dedd34bd4f" + "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291c1e92281a09152dda089f782e23dedd34bd4f", - "reference": "291c1e92281a09152dda089f782e23dedd34bd4f", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b57df76f4757a9a8dfbb57ba48d7780cc20776c6", + "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6", "shasum": "" }, "require": { @@ -2466,7 +2501,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.12" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.48" }, "funding": [ { @@ -2482,20 +2517,20 @@ "type": "tidelift" } ], - "time": "2022-08-03T13:09:21+00:00" + "time": "2024-11-13T14:36:38+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "shasum": "" }, "require": { @@ -2551,7 +2586,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" }, "funding": [ { @@ -2567,20 +2602,20 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", "shasum": "" }, "require": { @@ -2592,12 +2627,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2630,7 +2665,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.4" }, "funding": [ { @@ -2646,20 +2681,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.12", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "shasum": "" }, "require": { @@ -2668,6 +2703,9 @@ "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, + "require-dev": { + "symfony/process": "^5.4|^6.4" + }, "type": "library", "autoload": { "psr-4": { @@ -2694,7 +2732,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.12" + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" }, "funding": [ { @@ -2710,20 +2748,20 @@ "type": "tidelift" } ], - "time": "2022-08-02T13:48:16+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/finder", - "version": "v5.4.11", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -2757,7 +2795,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.11" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -2773,20 +2811,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.12", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791" + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4bfe9611b113b15d98a43da68ec9b5a00d56791", - "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341", "shasum": "" }, "require": { @@ -2796,7 +2834,7 @@ "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "predis/predis": "~1.0", + "predis/predis": "^1.0|^2.0", "symfony/cache": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", @@ -2833,7 +2871,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.12" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.48" }, "funding": [ { @@ -2849,24 +2887,24 @@ "type": "tidelift" } ], - "time": "2022-08-19T07:33:17+00:00" + "time": "2024-11-13T18:58:02+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.12", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "076043af11e58b20a68d2fd93f59cdbc6e8fdd00" + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/076043af11e58b20a68d2fd93f59cdbc6e8fdd00", - "reference": "076043af11e58b20a68d2fd93f59cdbc6e8fdd00", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f732e1fafdf0f4a2d865e91f1018aaca174aeed9", + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3", + "egulias/email-validator": "^2.1.10|^3|^4", "php": ">=7.2.5", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", @@ -2880,7 +2918,7 @@ "symfony/http-kernel": "<4.4" }, "require-dev": { - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client": "^4.4|^5.0|^6.0", "symfony/messenger": "^4.4|^5.0|^6.0" }, "type": "library", @@ -2909,7 +2947,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.4.12" + "source": "https://github.com/symfony/mailer/tree/v5.4.45" }, "funding": [ { @@ -2925,20 +2963,20 @@ "type": "tidelift" } ], - "time": "2022-08-03T05:17:26+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/mime", - "version": "v5.4.12", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", "shasum": "" }, "require": { @@ -2952,15 +2990,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", "symfony/property-access": "^4.4|^5.1|^6.0", "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" }, "type": "library", "autoload": { @@ -2992,7 +3032,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.12" + "source": "https://github.com/symfony/mime/tree/v5.4.45" }, "funding": [ { @@ -3008,24 +3048,24 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:24:03+00:00" + "time": "2024-10-23T20:18:32+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3035,12 +3075,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3074,7 +3111,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -3090,24 +3127,24 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "143f1881e655bebca1312722af8068de235ae5dc" + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", - "reference": "143f1881e655bebca1312722af8068de235ae5dc", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-iconv": "*" @@ -3117,12 +3154,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3157,7 +3191,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0" }, "funding": [ { @@ -3173,36 +3207,33 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3238,7 +3269,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -3254,38 +3285,34 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3325,7 +3352,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -3341,36 +3368,33 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3409,7 +3433,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -3425,24 +3449,24 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3452,12 +3476,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3492,7 +3513,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -3508,41 +3529,30 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "type": "library", + "type": "metapackage", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "notification-url": "https://packagist.org/downloads/", @@ -3568,7 +3578,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" }, "funding": [ { @@ -3584,33 +3594,30 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3647,7 +3654,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -3663,33 +3670,30 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3730,7 +3734,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -3746,33 +3750,30 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3809,7 +3810,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -3825,20 +3826,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.11", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", "shasum": "" }, "require": { @@ -3871,7 +3872,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" + "source": "https://github.com/symfony/process/tree/v5.4.47" }, "funding": [ { @@ -3887,20 +3888,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2024-11-06T11:36:42+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { @@ -3916,12 +3917,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3954,7 +3955,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" }, "funding": [ { @@ -3970,20 +3971,20 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/string", - "version": "v5.4.12", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058" + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058", + "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799", "shasum": "" }, "require": { @@ -4040,7 +4041,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.12" + "source": "https://github.com/symfony/string/tree/v5.4.47" }, "funding": [ { @@ -4056,20 +4057,20 @@ "type": "tidelift" } ], - "time": "2022-08-12T17:03:11+00:00" + "time": "2024-11-10T20:33:58+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.10", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340" + "reference": "862700068db0ddfd8c5b850671e029a90246ec75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340", - "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/862700068db0ddfd8c5b850671e029a90246ec75", + "reference": "862700068db0ddfd8c5b850671e029a90246ec75", "shasum": "" }, "require": { @@ -4113,7 +4114,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.10" + "source": "https://github.com/symfony/var-exporter/tree/v5.4.45" }, "funding": [ { @@ -4129,20 +4130,20 @@ "type": "tidelift" } ], - "time": "2022-05-27T12:56:18+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.12", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c" + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", - "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e", "shasum": "" }, "require": { @@ -4188,7 +4189,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.12" + "source": "https://github.com/symfony/yaml/tree/v5.4.45" }, "funding": [ { @@ -4204,20 +4205,20 @@ "type": "tidelift" } ], - "time": "2022-08-02T15:52:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "voku/anti-xss", - "version": "4.1.39", + "version": "4.1.42", "source": { "type": "git", "url": "https://github.com/voku/anti-xss.git", - "reference": "64a59ba4744e6722866ff3440d93561da9e85cd0" + "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/anti-xss/zipball/64a59ba4744e6722866ff3440d93561da9e85cd0", - "reference": "64a59ba4744e6722866ff3440d93561da9e85cd0", + "url": "https://api.github.com/repos/voku/anti-xss/zipball/bca1f8607e55a3c5077483615cd93bd8f11bd675", + "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675", "shasum": "" }, "require": { @@ -4263,7 +4264,7 @@ ], "support": { "issues": "https://github.com/voku/anti-xss/issues", - "source": "https://github.com/voku/anti-xss/tree/4.1.39" + "source": "https://github.com/voku/anti-xss/tree/4.1.42" }, "funding": [ { @@ -4287,20 +4288,20 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:58+00:00" + "time": "2023-07-03T14:40:46+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -4325,7 +4326,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -4337,7 +4338,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -4361,20 +4362,20 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "voku/portable-utf8", - "version": "6.0.9", + "version": "6.0.13", "source": { "type": "git", "url": "https://github.com/voku/portable-utf8.git", - "reference": "eb2861c34203a9c2a7c275cba7014d6816604e89" + "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-utf8/zipball/eb2861c34203a9c2a7c275cba7014d6816604e89", - "reference": "eb2861c34203a9c2a7c275cba7014d6816604e89", + "url": "https://api.github.com/repos/voku/portable-utf8/zipball/b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", + "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", "shasum": "" }, "require": { @@ -4387,7 +4388,7 @@ "voku/portable-ascii": "~2.0.0" }, "require-dev": { - "phpstan/phpstan": "1.8.*@dev", + "phpstan/phpstan": "1.9.*@dev", "phpstan/phpstan-strict-rules": "1.4.*@dev", "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0", "thecodingmachine/phpstan-strict-rules": "1.0.*@dev", @@ -4440,7 +4441,7 @@ ], "support": { "issues": "https://github.com/voku/portable-utf8/issues", - "source": "https://github.com/voku/portable-utf8/tree/6.0.9" + "source": "https://github.com/voku/portable-utf8/tree/6.0.13" }, "funding": [ { @@ -4464,22 +4465,22 @@ "type": "tidelift" } ], - "time": "2022-09-01T09:54:03+00:00" + "time": "2023-03-08T08:35:38+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -4491,8 +4492,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -4547,7 +4548,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -4555,20 +4556,20 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { @@ -4584,11 +4585,6 @@ "psalm/phar": "^3.11.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php" @@ -4612,7 +4608,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -4622,9 +4618,8 @@ "stream" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -4632,7 +4627,7 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "composer/package-versions-deprecated", @@ -4780,24 +4775,24 @@ }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -4839,9 +4834,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -4857,7 +4852,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", @@ -4964,31 +4959,34 @@ }, { "name": "doctrine/annotations", - "version": "1.13.3", + "version": "1.14.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0" + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, "type": "library", "autoload": { @@ -5031,36 +5029,36 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.3" + "source": "https://github.com/doctrine/annotations/tree/1.14.4" }, - "time": "2022-07-02T10:48:51+00:00" + "time": "2024-09-05T10:15:52+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -5087,7 +5085,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -5103,7 +5101,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -5152,16 +5150,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", + "version": "v1.5.3", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", "shasum": "" }, "require": { @@ -5202,9 +5200,9 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2024-04-30T00:40:11+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -5600,20 +5598,20 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.12", + "version": "5.3.0", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", @@ -5624,11 +5622,6 @@ "bin/validate-json" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -5663,23 +5656,23 @@ "schema" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" }, - "time": "2022-04-13T08:02:27+00:00" + "time": "2024-07-06T21:00:26+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -5687,11 +5680,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -5717,7 +5711,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -5725,20 +5719,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -5749,7 +5743,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -5774,31 +5768,31 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -5830,9 +5824,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2024-09-29T15:01:53+00:00" }, { "name": "ondram/ci-detector", @@ -5961,28 +5955,28 @@ }, { "name": "pdepend/pdepend", - "version": "2.11.0", + "version": "2.16.2", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "9141e6f8e1f044aa64aedb0e6894d12618cdcb3e" + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9141e6f8e1f044aa64aedb0e6894d12618cdcb3e", - "reference": "9141e6f8e1f044aa64aedb0e6894d12618cdcb3e", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", "shasum": "" }, "require": { "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/polyfill-mbstring": "^1.19" }, "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", "squizlabs/php_codesniffer": "^2.0.0" }, "bin": [ @@ -6004,9 +5998,15 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", + "keywords": [ + "PHP Depend", + "PHP_Depend", + "dev", + "pdepend" + ], "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.11.0" + "source": "https://github.com/pdepend/pdepend/tree/2.16.2" }, "funding": [ { @@ -6014,24 +6014,25 @@ "type": "tidelift" } ], - "time": "2022-08-29T11:21:12+00:00" + "time": "2023-12-17T18:09:59+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -6072,9 +6073,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -6129,16 +6136,16 @@ }, { "name": "php-censor/phpdoc-checker", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/php-censor/phpdoc-checker.git", - "reference": "57b22c5376431995307271d5f30861e4840f7d0c" + "reference": "3144553b7a2c2c30fdd82e0acf8d6d6f613a0fa4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-censor/phpdoc-checker/zipball/57b22c5376431995307271d5f30861e4840f7d0c", - "reference": "57b22c5376431995307271d5f30861e4840f7d0c", + "url": "https://api.github.com/repos/php-censor/phpdoc-checker/zipball/3144553b7a2c2c30fdd82e0acf8d6d6f613a0fa4", + "reference": "3144553b7a2c2c30fdd82e0acf8d6d6f613a0fa4", "shasum": "" }, "require": { @@ -6149,12 +6156,14 @@ "symfony/console": "^4.4|^5.0" }, "require-dev": { - "jakub-onderka/php-parallel-lint": "^1.0", - "phploc/phploc": "^2.0", + "friendsofphp/php-cs-fixer": "^3.4", + "infection/infection": "^0.25", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phploc/phploc": "^7.0", "phpmd/phpmd": "^2.10", - "phpunit/phpunit": "^7.5", - "sebastian/phpcpd": "^5.0", - "squizlabs/php_codesniffer": "^3.6" + "phpunit/phpunit": "^9.5", + "sebastian/phpcpd": "^6.0", + "vimeo/psalm": "^4.16" }, "bin": [ "bin/phpdoc-checker" @@ -6199,7 +6208,7 @@ "issues": "https://github.com/php-censor/phpdoc-checker/issues", "source": "https://github.com/php-censor/phpdoc-checker" }, - "time": "2022-04-15T15:00:32+00:00" + "time": "2023-10-07T03:44:58+00:00" }, { "name": "php-cs-fixer/diff", @@ -6256,16 +6265,16 @@ }, { "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.2", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + "reference": "6db563514f27e19595a19f45a4bf757b6401194e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e", + "reference": "6db563514f27e19595a19f45a4bf757b6401194e", "shasum": "" }, "require": { @@ -6303,13 +6312,17 @@ "email": "ahoj@jakubonderka.cz" } ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "description": "This tool checks the syntax of PHP files about 20x faster than serial check.", "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "keywords": [ + "lint", + "static analysis" + ], "support": { "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.4.0" }, - "time": "2022-02-21T12:50:22+00:00" + "time": "2024-03-27T12:14:49+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -6366,28 +6379,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -6411,37 +6431,45 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -6467,9 +6495,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phploc/phploc", @@ -6534,22 +6562,22 @@ }, { "name": "phpmd/phpmd", - "version": "2.12.0", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec" + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/c0b678ba71902f539c27c14332aa0ddcf14388ec", - "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", "ext-xml": "*", - "pdepend/pdepend": "^2.10.3", + "pdepend/pdepend": "^2.16.1", "php": ">=5.3.9" }, "require-dev": { @@ -6558,8 +6586,7 @@ "ext-simplexml": "*", "gregwar/rst": "^1.0", "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" + "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" }, "bin": [ "src/bin/phpmd" @@ -6596,6 +6623,7 @@ "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", "homepage": "https://phpmd.org/", "keywords": [ + "dev", "mess detection", "mess detector", "pdepend", @@ -6605,7 +6633,7 @@ "support": { "irc": "irc://irc.freenode.org/phpmd", "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.12.0" + "source": "https://github.com/phpmd/phpmd/tree/2.15.0" }, "funding": [ { @@ -6613,32 +6641,34 @@ "type": "tidelift" } ], - "time": "2022-03-24T13:33:01+00:00" + "time": "2023-12-11T08:22:20+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.15.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/a0165c648cab6a80311c74ffc708a07bb53ecc93", + "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", + "doctrine/instantiator": "^1.2 || ^2.0", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*", "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { + "friendsofphp/php-cs-fixer": "^3.40", "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" }, "type": "library", "extra": { @@ -6671,6 +6701,7 @@ "keywords": [ "Double", "Dummy", + "dev", "fake", "mock", "spy", @@ -6678,33 +6709,36 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.20.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2024-11-19T13:12:41+00:00" }, { "name": "phpspec/prophecy-phpunit", - "version": "v2.0.1", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy-phpunit.git", - "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" + "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", - "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/8819516c1b489ecee4c60db5f5432fac1ea8ac6f", + "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f", "shasum": "" }, "require": { "php": "^7.3 || ^8", - "phpspec/prophecy": "^1.3", - "phpunit/phpunit": "^9.1" + "phpspec/prophecy": "^1.18", + "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -6730,50 +6764,155 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy-phpunit/issues", - "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.3.0" + }, + "time": "2024-11-19T13:24:17+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" }, - "time": "2020-07-09T08:33:42+00:00" + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + }, + "time": "2025-02-19T13:28:12+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.12.21", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "14276fdef70575106a3392a4ed553c06a984df28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/14276fdef70575106a3392a4ed553c06a984df28", + "reference": "14276fdef70575106a3392a4ed553c06a984df28", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-03-09T09:24:50+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "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" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -6801,7 +6940,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -6809,7 +6949,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7054,50 +7194,50 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.24", + "version": "9.6.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.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": "^3.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -7105,7 +7245,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -7136,7 +7276,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" }, "funding": [ { @@ -7146,37 +7287,104 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2024-12-05T13:48:26+00:00" + }, + { + "name": "rector/rector", + "version": "0.14.8", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "46ee9a173a2b2645ca92a75ffc17460139fa226e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/46ee9a173a2b2645ca92a75ffc17460139fa226e", + "reference": "46ee9a173a2b2645ca92a75ffc17460139fa226e", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.9.0" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-php-parser": "*", + "rector/rector-phpoffice": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.14-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.14.8" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2022-11-14T14:09:49+00:00" }, { "name": "sanmai/later", - "version": "0.1.2", + "version": "0.1.4", "source": { "type": "git", "url": "https://github.com/sanmai/later.git", - "reference": "9b659fecef2030193fd02402955bc39629d5606f" + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/later/zipball/9b659fecef2030193fd02402955bc39629d5606f", - "reference": "9b659fecef2030193fd02402955bc39629d5606f", + "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.13", - "infection/infection": ">=0.10.5", + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.35.1", + "infection/infection": ">=0.27.6", "phan/phan": ">=2", "php-coveralls/php-coveralls": "^2.0", - "phpstan/phpstan": ">=0.10", - "phpunit/phpunit": ">=7.4", + "phpstan/phpstan": ">=1.4.5", + "phpunit/phpunit": ">=9.5 <10", "vimeo/psalm": ">=2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, "autoload": { "files": [ "src/functions.php" @@ -7198,7 +7406,7 @@ "description": "Later: deferred wrapper object", "support": { "issues": "https://github.com/sanmai/later/issues", - "source": "https://github.com/sanmai/later/tree/0.1.2" + "source": "https://github.com/sanmai/later/tree/0.1.4" }, "funding": [ { @@ -7206,34 +7414,34 @@ "type": "github" } ], - "time": "2021-01-02T10:26:44+00:00" + "time": "2023-10-24T00:25:28+00:00" }, { "name": "sanmai/pipeline", - "version": "v6.1", + "version": "6.12", "source": { "type": "git", "url": "https://github.com/sanmai/pipeline.git", - "reference": "3a88f2617237e18d5cd2aa38ca3d4b22770306c2" + "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/pipeline/zipball/3a88f2617237e18d5cd2aa38ca3d4b22770306c2", - "reference": "3a88f2617237e18d5cd2aa38ca3d4b22770306c2", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/ad7dbc3f773eeafb90d5459522fbd8f188532e25", + "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/php-cs-fixer": "^3.17", "infection/infection": ">=0.10.5", - "league/pipeline": "^1.0 || ^0.3", + "league/pipeline": "^0.3 || ^1.0", "phan/phan": ">=1.1", "php-coveralls/php-coveralls": "^2.4.1", "phpstan/phpstan": ">=0.10", - "phpunit/phpunit": "^7.4 || ^8.1 || ^9.4", + "phpunit/phpunit": ">=9.4", "vimeo/psalm": ">=2" }, "type": "library", @@ -7263,7 +7471,7 @@ "description": "General-purpose collections pipeline", "support": { "issues": "https://github.com/sanmai/pipeline/issues", - "source": "https://github.com/sanmai/pipeline/tree/v6.1" + "source": "https://github.com/sanmai/pipeline/tree/6.12" }, "funding": [ { @@ -7271,20 +7479,20 @@ "type": "github" } ], - "time": "2022-01-30T08:15:59+00:00" + "time": "2024-10-17T02:22:57+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -7319,7 +7527,7 @@ "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" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -7327,7 +7535,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -7442,16 +7650,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -7504,7 +7712,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -7512,24 +7720,24 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -7561,7 +7769,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -7569,20 +7777,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -7624,7 +7832,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -7632,20 +7840,20 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -7701,7 +7909,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -7709,20 +7917,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -7765,7 +7973,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -7773,24 +7981,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -7822,7 +8030,7 @@ "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" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -7830,7 +8038,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -8003,20 +8211,21 @@ "type": "github" } ], + "abandoned": true, "time": "2020-12-07T05:39:23+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -8055,10 +8264,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -8066,20 +8275,20 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -8091,7 +8300,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -8112,8 +8321,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -8121,20 +8329,20 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb44e1cc6e557418387ad815780360057e40753e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", - "reference": "fb44e1cc6e557418387ad815780360057e40753e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -8146,7 +8354,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -8169,7 +8377,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -8177,7 +8385,7 @@ "type": "github" } ], - "time": "2022-08-29T06:55:37+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -8234,23 +8442,23 @@ }, { "name": "seld/jsonlint", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "4211420d25eba80712bff236a98960ef68b866b7" + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", - "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.5", + "phpstan/phpstan": "^1.11", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ @@ -8270,7 +8478,7 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "JSON Linter", @@ -8282,7 +8490,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { @@ -8294,20 +8502,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T13:37:23+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "version": "3.11.3", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", "shasum": "" }, "require": { @@ -8317,11 +8525,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -8336,34 +8544,62 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-01-23T17:04:15+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.11", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "shasum": "" }, "require": { @@ -8403,7 +8639,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" }, "funding": [ { @@ -8419,20 +8655,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.5", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", "shasum": "" }, "require": { @@ -8465,7 +8701,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" }, "funding": [ { @@ -8481,20 +8717,20 @@ "type": "tidelift" } ], - "time": "2022-02-18T16:06:09+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.44", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f19951007dae942cc79b979c1fe26bfdfbeb54ed" + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f19951007dae942cc79b979c1fe26bfdfbeb54ed", - "reference": "f19951007dae942cc79b979c1fe26bfdfbeb54ed", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", "shasum": "" }, "require": { @@ -8554,7 +8790,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.44" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" }, "funding": [ { @@ -8570,7 +8806,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2022-10-03T15:15:11+00:00" }, { "name": "thecodingmachine/safe", @@ -8713,16 +8949,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -8751,7 +8987,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -8759,20 +8995,20 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", - "version": "4.26.0", + "version": "4.30.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac" + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/6998fabb2bf528b65777bf9941920888d23c03ac", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69", "shasum": "" }, "require": { @@ -8811,6 +9047,7 @@ "phpdocumentor/reflection-docblock": "^5", "phpmyadmin/sql-parser": "5.1.0||dev-master", "phpspec/prophecy": ">=1.9.0", + "phpstan/phpdoc-parser": "1.2.* || 1.6.4", "phpunit/phpunit": "^9.0", "psalm/plugin-phpunit": "^0.16", "slevomat/coding-standard": "^7.0", @@ -8832,10 +9069,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev", - "dev-3.x": "3.x-dev", + "dev-1.x": "1.x-dev", "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "4.x-dev" } }, "autoload": { @@ -8864,9 +9101,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.26.0" + "source": "https://github.com/vimeo/psalm/tree/4.30.0" }, - "time": "2022-07-31T13:10:26+00:00" + "time": "2022-11-06T20:37:08+00:00" }, { "name": "webmozart/assert", @@ -8980,7 +9217,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { @@ -8994,6 +9231,6 @@ "ext-curl": "*", "ext-bcmath": "*" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } diff --git a/docs/CHANGELOG_0.x.md b/docs/CHANGELOG_0.x.md index f9ce08cc..5b57c35a 100644 --- a/docs/CHANGELOG_0.x.md +++ b/docs/CHANGELOG_0.x.md @@ -941,7 +941,7 @@ requests as comments on Github (`php-censor.github.comments.commit` and `php-cen ## [0.1.0](https://github.com/php-censor/php-censor/tree/0.1.0) (2017-01-04) -Initial release. Changes from [PHPCI](https://www.phptesting.org/) v1.7.1: +Initial release. Changes from [PHPCI](https://github.com/dancryer/PHPCI) v1.7.1: ### Added diff --git a/docs/CHANGELOG_2.0.md b/docs/CHANGELOG_2.0.md index ebf010d1..069f1291 100644 --- a/docs/CHANGELOG_2.0.md +++ b/docs/CHANGELOG_2.0.md @@ -1,10 +1,53 @@ Changelog 2.0 ============= -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [2.0.14 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.14) (2025-03-15) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.0.13...2.0.14) + +### Fixed + +- Security issue CVE-2024-51736: Command execution hijack on Windows with Process class. See: https://symfony.com/cve-2024-51736. + + +## [2.0.13 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.13) (2024-05-04) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.0.12...2.0.13) + +### Added + +- GitHub Actions pipeline (backport from v2.1) + support of PHP 8.2 and 8.3. + +### Fixed + +- Security issue with remember me key in auth. See: https://chmod744.super.site/redacted-vulnerability. + + +## [2.0.12 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.12) (2024-01-11) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.0.11...2.0.12) + +### Fixed + +- Updated dependencies. Fixed: + - `guzzlehttp/psr7` (1.9.0) | CVE-2023-29197: Improper header validation | https://github.com/guzzle/psr7/security/advisories/GHSA-wxmh-65f7-jcvw. + + +## [2.0.11 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.11) (2023-01-11) + +[Full Changelog](https://github.com/php-censor/php-censor/compare/2.0.10...2.0.11) + +### Fixed + +- PHP 8.1 deprecation while searching for composer binary. Pull request [#434](https://github.com/php-censor/php-censor/pull/434). + Thanks to [@StudioMaX](https://github.com/StudioMaX). +- PHP 8.1 error with return type of `php_user_filter::filter` function. + + ## [2.0.10 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.10) (2022-06-26) [Full Changelog](https://github.com/php-censor/php-censor/compare/2.0.9...2.0.10) @@ -24,9 +67,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ### Fixed - Updated dependencies. Fixed: - - `guzzlehttp/guzzle` (6.5.6) | CVE-2022-31042: Failure to strip the Cookie header on change in host or HTTP downgrade | https://github.com/guzzle/guzzle/security/advisories/GHSA-f2wf-25xc-69c9 + - `guzzlehttp/guzzle` (6.5.6) | CVE-2022-31042: Failure to strip the Cookie header on change in host or HTTP downgrade | https://github.com/guzzle/guzzle/security/advisories/GHSA-f2wf-25xc-69c9 - - `guzzlehttp/guzzle` (6.5.6) | CVE-2022-31043: Fix failure to strip Authorization header on HTTP downgrade | https://github.com/guzzle/guzzle/security/advisories/GHSA-w248-ffj2-4v5q + - `guzzlehttp/guzzle` (6.5.6) | CVE-2022-31043: Fix failure to strip Authorization header on HTTP downgrade | https://github.com/guzzle/guzzle/security/advisories/GHSA-w248-ffj2-4v5q ### Changed @@ -40,9 +83,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ### Fixed - Updated dependencies. Fixed: - - `guzzlehttp/guzzle` (6.5.5) | CVE-2022-29248: Cross-domain cookie leakage | https://github.com/guzzle/guzzle/security/advisories/GHSA-cwmx-hcrq-mhc3. + - `guzzlehttp/guzzle` (6.5.5) | CVE-2022-29248: Cross-domain cookie leakage | https://github.com/guzzle/guzzle/security/advisories/GHSA-cwmx-hcrq-mhc3. - - `guzzlehttp/psr7` (1.8.3) | CVE-2022-24775: Inproper parsing of HTTP headers | https://github.com/guzzle/psr7/security/advisories/GHSA-q7rv-6hp3-vh96. + - `guzzlehttp/psr7` (1.8.3) | CVE-2022-24775: Inproper parsing of HTTP headers | https://github.com/guzzle/psr7/security/advisories/GHSA-q7rv-6hp3-vh96. ## [2.0.7 (Rick Sanchez)](https://github.com/php-censor/php-censor/tree/2.0.7) (2022-01-19) @@ -92,9 +135,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ### Fixed -- **[PhpStan]** Option `directories` and `directory`. -Issue [#408](https://github.com/php-censor/php-censor/issues/#408). Pull request -[#409](https://github.com/php-censor/php-censor/pull/409). Thanks to [@StudioMaX](https://github.com/StudioMaX). +- **[PhpStan]** Option `directories` and `directory`. + Issue [#408](https://github.com/php-censor/php-censor/issues/#408). Pull request + [#409](https://github.com/php-censor/php-censor/pull/409). Thanks to [@StudioMaX](https://github.com/StudioMaX). - **[SecurityChecker]** Option `allowed_warnings`. - Security issue with old Chart.js version (Chart.js upgraded from version `1.1.1` to `3.3.0`). @@ -117,17 +160,17 @@ Issue [#408](https://github.com/php-censor/php-censor/issues/#408). Pull request - SSH keys generating (Removed unwanted symbols). Issue [#403](https://github.com/php-censor/php-censor/issues/#403). - Environments (Case when you may get environment from another project). Issue -[#405](https://github.com/php-censor/php-censor/issues/#405). + [#405](https://github.com/php-censor/php-censor/issues/#405). - Localizations for "Notify" plugins. -- Deprecations from PHP 8.0. Pull request [#404](https://github.com/php-censor/php-censor/pull/404). Thanks to -[@ismaail](https://github.com/ismaail). +- Deprecations from PHP 8.0. Pull request [#404](https://github.com/php-censor/php-censor/pull/404). Thanks to + [@ismaail](https://github.com/ismaail). ### Changed - **[SecurityChecker]** Reimplement the plugin because package `sensiolabs/security-checker` was archived/abandoned -(See [README](https://github.com/sensiolabs/security-checker#sensiolabs-security-checker)). Now plugin uses `symfony` -binary (Symfony CLI) or `fabpot/local-php-security-checker` tool for working. See -[documentation](https://github.com/php-censor/php-censor/blob/release-1.3/docs/en/plugins/security_checker.md). + (See [README](https://github.com/sensiolabs/security-checker#sensiolabs-security-checker)). Now plugin uses `symfony` + binary (Symfony CLI) or `fabpot/local-php-security-checker` tool for working. See + [documentation](https://github.com/php-censor/php-censor/blob/release-1.3/docs/en/plugins/security_checker.md). ### Removed @@ -155,7 +198,7 @@ binary (Symfony CLI) or `fabpot/local-php-security-checker` tool for working. Se [Full Changelog](https://github.com/php-censor/php-censor/compare/1.3.0...2.0.0) -### [How to upgrade from v1 to v2](/docs/UPGRADE_2.0.md) +### [How tp upgrade from v1 to v2](/docs/UPGRADE_2.0.md) ### Changed @@ -168,11 +211,11 @@ binary (Symfony CLI) or `fabpot/local-php-security-checker` tool for working. Se - Project configs `phpci.yml` and `.phpci.yml` (use `.php-censor.yml` instead). - `PHPCI_*` interpolation and env variables (Use `PHP_CENSOR_*` instead). - Global application config section `b8.database` (Use `php-censor.database` instead). - - Options `authToken`, `api_key`, `api_token`, `token` for several plugins: `CampfireNotify`, -`HipchatNotify`, `FlowdockNotify`, `TelegramNotify`, `SensiolabInsight`, `BitbucketNotify` (Use `auth_token` instead). - - Plugin names: `campfire`, `telegram`, `xmpp`, `email`, `irc`, `phpstan` (Use: `campfire_notify`, `telegram_notify`, -`xmpp_notify`, `email_notify`, `irc_notify`, `php_stan` instead). - - [Codeception] Option `path` (Use option `output_path` instead). + - Options `authToken`, `api_key`, `api_token`, `token` for several plugins: `CampfireNotify`, + `HipchatNotify`, `FlowdockNotify`, `TelegramNotify`, `SensiolabInsight`, `BitbucketNotify` (Use `auth_token` instead). + - Plugin names: `campfire`, `telegram`, `xmpp`, `email`, `irc`, `phpstan` (Use: `campfire_notify`, `telegram_notify`, + `xmpp_notify`, `email_notify`, `irc_notify`, `php_stan` instead). + - [Codeception] Option `path` (Use option `output_path` instead). - [Codeception] Option `executable` (Use the options `binary_path` and `binary_name` instead). - [Grunt] Option `grunt` (Use options `binary_path` and `binary_name` instead). - [Gulp] Option `gulp` (Use options `binary_path` and `binary_name` instead). diff --git a/docs/en/plugins/telegram_notify.md b/docs/en/plugins/telegram_notify.md index 105ec471..a8932773 100644 --- a/docs/en/plugins/telegram_notify.md +++ b/docs/en/plugins/telegram_notify.md @@ -24,6 +24,7 @@ complete: recipients: - "" - "-" + - "-/" - "@" send_log: true ``` diff --git a/psalm.xml.dist b/psalm.xml.dist index 4e9226bd..9664617d 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -1,10 +1,11 @@ diff --git a/rector.php b/rector.php new file mode 100644 index 00000000..a5d4ab02 --- /dev/null +++ b/rector.php @@ -0,0 +1,23 @@ +paths([ + __DIR__ . '/src' + ]); + + // register a single rule + $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class); + + $rectorConfig->sets([ + SetList::PHP_74, + //SetList::CODE_QUALITY, + //SetList::TYPE_DECLARATION_STRICT, + //SetList::DEAD_CODE, + ]); +}; diff --git a/src/Application.php b/src/Application.php index 06671d40..a02659c5 100644 --- a/src/Application.php +++ b/src/Application.php @@ -60,7 +60,7 @@ public function __construct( */ public function init(): void { - $request =& $this->request; + $request = & $this->request; $route = '/:controller/:action'; $opts = ['controller' => 'Home', 'action' => 'index']; diff --git a/src/Command/AddSecretCommand.php b/src/Command/AddSecretCommand.php new file mode 100644 index 00000000..754b3fa7 --- /dev/null +++ b/src/Command/AddSecretCommand.php @@ -0,0 +1,95 @@ + + */ +class AddSecretCommand extends Command +{ + private SecretStore $secretStore; + + public function __construct( + ConfigurationInterface $configuration, + DatabaseManager $databaseManager, + StoreRegistry $storeRegistry, + LoggerInterface $logger, + SecretStore $secretStore, + ?string $name = null + ) { + parent::__construct($configuration, $databaseManager, $storeRegistry, $logger, $name); + + $this->secretStore = $secretStore; + } + + /** + * Configure. + */ + protected function configure(): void + { + $this + ->setName('php-censor:add-secret') + + ->addArgument('secret-name', InputArgument::REQUIRED, 'Secret name') + ->addArgument('secret-value', InputArgument::REQUIRED, 'Secret value') + + ->addOption('force', 'f', InputOption::VALUE_NONE, 'Force to update existing values') + + ->setDescription('Update secret'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $secretName = (string)$input->getArgument('secret-name'); + $secretValue = (string)$input->getArgument('secret-value'); + $force = (bool)$input->getOption('force'); + + $secrets = $this->secretStore->getByNames([$secretName]); + if ($secrets && !$force) { + $output->writeln( + \sprintf('Secret with name "%s" already exists! Use flag "-f|--force" if you want update secret.', $secretName) + ); + + return 1; + } + + if (!\preg_match(\sprintf('#%s#', Secret::SECRET_NAME_PATTERN), $secretName)) { + $output->writeln( + \sprintf('Secret name "%s" is invalid! Use only letters, numbers and "-" or "_".', $secretName) + ); + + return 2; + } + + $secret = new Secret($this->storeRegistry); + $secret->setCreateDate(new \DateTime()); + $secret->setUserId(null); + $secret->setName($secretName); + + if ($secrets && $force) { + $secret = $secrets[$secretName]; + } + + $secret->setValue($secretValue); + + $this->secretStore->save($secret); + + return 0; + } +} diff --git a/src/Command/CheckLocalizationCommand.php b/src/Command/CheckLocalizationsCommand.php similarity index 82% rename from src/Command/CheckLocalizationCommand.php rename to src/Command/CheckLocalizationsCommand.php index 10f81be1..e655fa2e 100644 --- a/src/Command/CheckLocalizationCommand.php +++ b/src/Command/CheckLocalizationsCommand.php @@ -14,7 +14,7 @@ * * @author Dmitry Khomutov */ -class CheckLocalizationCommand extends Command +class CheckLocalizationsCommand extends Command { protected string $basePath = __DIR__ . '/../Languages'; @@ -25,27 +25,25 @@ protected function configure(): void $this ->setName('php-censor:check-localizations') - ->addOption('same', 0, InputOption::VALUE_OPTIONAL, 'Same than English version (0 = no, 1 = yes)') - ->addOption('langs', [], InputOption::VALUE_OPTIONAL, 'List of languages separated by commas. By default, all languages') + ->addOption('same', 's', InputOption::VALUE_NONE, 'Same than English version') + ->addOption('languages', 'l', InputOption::VALUE_OPTIONAL, 'List of languages separated by commas. By default, all languages', '') - ->setDescription('Check localizations.'); + ->setDescription('Check localizations'); } protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln("\nCheck localizations!"); - $sameThanEnglish = (null !== $input->getOption('same')) - ? $input->getOption('same') - : false; + $sameThanEnglish = (bool)$input->getOption('same'); - $languagesList = (null !== $input->getOption('langs')) - ? \explode(',', $input->getOption('langs')) + $languages = $input->getOption('languages') + ? \explode(',', $input->getOption('languages')) : []; // Get English version - $english = $this->getTranslations($this->basePath.'/lang.en.php'); - $othersLanguages = $this->getLanguages($languagesList); + $english = $this->getTranslations($this->basePath . '/lang.en.php'); + $othersLanguages = $this->getLanguages($languages); $diffs = $this->compareTranslations($english, $othersLanguages); foreach ($diffs as $language => $value) { diff --git a/src/Command/CreateBuildCommand.php b/src/Command/CreateBuildCommand.php index fcebb607..b7422cf0 100644 --- a/src/Command/CreateBuildCommand.php +++ b/src/Command/CreateBuildCommand.php @@ -54,11 +54,12 @@ protected function configure(): void $this ->setName('php-censor:create-build') - ->addArgument('projectId', InputArgument::REQUIRED, 'A project ID') + ->addArgument('project-id', InputArgument::REQUIRED, 'A project ID') ->addOption('commit', null, InputOption::VALUE_OPTIONAL, 'Commit ID to build') ->addOption('branch', null, InputOption::VALUE_OPTIONAL, 'Branch to build') ->addOption('email', null, InputOption::VALUE_OPTIONAL, 'Committer email') ->addOption('message', null, InputOption::VALUE_OPTIONAL, 'Commit message') + ->addOption('environment', null, InputOption::VALUE_OPTIONAL, 'Build environment') ->setDescription('Create a build for a project'); } @@ -70,10 +71,10 @@ protected function configure(): void */ public function execute(InputInterface $input, OutputInterface $output): int { - $projectId = (int)$input->getArgument('projectId'); + $projectId = (int)$input->getArgument('project-id'); $commitId = $input->getOption('commit'); $branch = $input->getOption('branch'); - $environment = $input->hasOption('environment') ? $input->getOption('environment') : null; + $environment = $input->getOption('environment'); $ciEmail = $input->getOption('email'); $ciMessage = $input->getOption('message'); diff --git a/src/Command/InstallCommand.php b/src/Command/InstallCommand.php index 051420e6..f6bc9b36 100644 --- a/src/Command/InstallCommand.php +++ b/src/Command/InstallCommand.php @@ -89,9 +89,8 @@ protected function configure(): void ->addOption( 'config-from-file', null, - InputOption::VALUE_OPTIONAL, - 'Take config from file and ignore options', - false + InputOption::VALUE_NONE, + 'Take config from file and ignore options' ) ->setDescription('Install PHP Censor'); @@ -228,12 +227,12 @@ private function getConfigInformation(InputInterface $input, OutputInterface $ou /** @var $helper QuestionHelper */ $helper = $this->getHelperSet()->get('question'); - $urlValidator = function ($answer) { - if (!\filter_var($answer, FILTER_VALIDATE_URL)) { - throw new InvalidArgumentException('Must be a valid URL.'); + $urlValidator = function ($domain) { + if (!\filter_var($domain, FILTER_VALIDATE_URL)) { + throw new InvalidArgumentException("${domain} is not a valid URL!"); } - return \rtrim($answer, '/'); + return \rtrim($domain, '/'); }; if ($url = $input->getOption('url')) { diff --git a/src/Command/WorkerCommand.php b/src/Command/WorkerCommand.php index f98be5d1..7d70be3b 100644 --- a/src/Command/WorkerCommand.php +++ b/src/Command/WorkerCommand.php @@ -5,7 +5,6 @@ namespace PHPCensor\Command; use Exception; -use Monolog\Logger; use Pheanstalk\Contract\PheanstalkInterface; use PHPCensor\BuildFactory; use PHPCensor\Common\Application\ConfigurationInterface; @@ -53,7 +52,6 @@ public function __construct( protected function configure(): void { - $whenHints = 'soon=when next job done (default), done=when current jobs done, idle=when waiting for jobs'; $this ->setName('php-censor:worker') ->addOption( @@ -66,7 +64,8 @@ protected function configure(): void 'stop-worker', 's', InputOption::VALUE_OPTIONAL, - "Gracefully stop one worker ($whenHints)" + "Gracefully stop one worker ('soon' = when next job done, 'done' = when current jobs done, 'idle' = when waiting for jobs)", + '' ) ->setDescription('Runs the PHP Censor build worker.'); } @@ -126,7 +125,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 0; } - $canPeriodicalWork = $input->hasOption('periodical-work') && $input->getOption('periodical-work'); + $periodicalWork = (bool)$input->getOption('periodical-work'); $worker = new BuildWorker( $this->configuration, $this->databaseManager, @@ -137,7 +136,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $config['host'], (int)$this->configuration->get('php-censor.queue.port', PheanstalkInterface::DEFAULT_PORT), $config['name'], - $canPeriodicalWork + $periodicalWork ); $worker->startWorker(); diff --git a/src/Console/Application.php b/src/Console/Application.php index ee1dbf32..d4d6098a 100644 --- a/src/Console/Application.php +++ b/src/Console/Application.php @@ -15,7 +15,8 @@ use Phinx\Console\Command\Rollback; use Phinx\Console\Command\Status; use PHPCensor\BuildFactory; -use PHPCensor\Command\CheckLocalizationCommand; +use PHPCensor\Command\AddSecretCommand; +use PHPCensor\Command\CheckLocalizationsCommand; use PHPCensor\Command\CreateAdminCommand; use PHPCensor\Command\CreateBuildCommand; use PHPCensor\Command\InstallCommand; @@ -30,6 +31,7 @@ use PHPCensor\Service\BuildService; use PHPCensor\Store\BuildStore; use PHPCensor\Store\ProjectStore; +use PHPCensor\Store\SecretStore; use PHPCensor\Store\UserStore; use PHPCensor\StoreRegistry; use Symfony\Component\Console\Application as BaseApplication; @@ -179,6 +181,9 @@ public function __construct( /** @var BuildStore $buildStore */ $buildStore = $this->storeRegistry->get('Build'); + /** @var SecretStore $secretStore */ + $secretStore = $this->storeRegistry->get('Secret'); + $buildFactory = new BuildFactory( $this->configuration, $this->storeRegistry @@ -200,7 +205,8 @@ public function __construct( $this->add(new RemoveOldBuildsCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger, $projectStore, $buildService)); $this->add(new WorkerCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger, $buildService, $buildFactory)); $this->add(new RebuildQueueCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger)); - $this->add(new CheckLocalizationCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger)); + $this->add(new CheckLocalizationsCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger)); + $this->add(new AddSecretCommand($this->configuration, $this->databaseManager, $this->storeRegistry, $logger, $secretStore)); } public function getHelp(): string diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index ccf00ad7..ff2342e3 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -656,7 +656,6 @@ protected function projectForm($values, $type = 'add') /** * Get the validator to use to check project references. - * @param $values * @return callable */ protected function getReferenceValidator($values) diff --git a/src/Controller/SecretController.php b/src/Controller/SecretController.php index 0f3b42d9..3ed942c6 100644 --- a/src/Controller/SecretController.php +++ b/src/Controller/SecretController.php @@ -100,7 +100,7 @@ public function edit(?int $secretId = null) $field ->setClass('form-control') ->setContainerClass('form-group') - ->setPattern('^[-_\w\d]+$') + ->setPattern(Secret::SECRET_NAME_PATTERN) ->setValue($secret->getName()); $form->addField($field); diff --git a/src/Controller/SessionController.php b/src/Controller/SessionController.php index d5502442..29035b76 100644 --- a/src/Controller/SessionController.php +++ b/src/Controller/SessionController.php @@ -133,7 +133,7 @@ public function login() $key = $user->getProviderKey(); $isLoginFailure = !isset($providers[$key]) || !$providers[$key]->verifyPassword($user, $password); } else { - // Ask each providers to provision the user + // Ask each provider to provision the user foreach ($providers as $provider) { $user = $provider->provisionUser($email); if ($user && $provider->verifyPassword($user, $password)) { @@ -150,7 +150,7 @@ public function login() $response = new RedirectResponse($this->getLoginRedirect()); if ($rememberMe) { - $rememberKey = \md5((string)\microtime(true)); + $rememberKey = \md5(\random_bytes(64)); $user->setRememberKey($rememberKey); $this->userStore->save($user); diff --git a/src/Helper/Bitbucket.php b/src/Helper/Bitbucket.php index f11af884..2f8467ed 100644 --- a/src/Helper/Bitbucket.php +++ b/src/Helper/Bitbucket.php @@ -69,11 +69,6 @@ public function createPullRequestComment($repo, $pullId, $commitId, $file, $line /** * Create a comment on a Bitbucket commit. * - * @param $repo - * @param $commitId - * @param $file - * @param $line - * @param $comment * @return null */ public function createCommitComment($repo, $commitId, $file, $line, $comment) diff --git a/src/Helper/CommandExecutor.php b/src/Helper/CommandExecutor.php index a815568c..b240a27e 100644 --- a/src/Helper/CommandExecutor.php +++ b/src/Helper/CommandExecutor.php @@ -29,7 +29,7 @@ class CommandExecutor implements CommandExecutorInterface /** * @var array */ - protected $lastOutput; + protected $lastOutput = []; /** * @var string @@ -57,19 +57,15 @@ class CommandExecutor implements CommandExecutorInterface /** * Commands with no proper exit mechanism - * - * @var array */ - private static $noExitCommands = [ + private static array $noExitCommands = [ 'codecept', ]; /** * Environment variables that should not be inherited - * - * @var array */ - private static $blacklistEnvVars = [ + private static array $blacklistEnvVars = [ 'PHP_SELF', 'SCRIPT_NAME', 'SCRIPT_FILENAME', @@ -86,7 +82,6 @@ public function __construct(BuildLogger $logger, $rootDir, $verbose = false) { $this->logger = $logger; $this->verbose = $verbose; - $this->lastOutput = []; $this->rootDir = $rootDir; } @@ -136,9 +131,7 @@ public function executeCommand($args = []) \exec("ps auxww | grep '{$withNoExit}' | grep -v grep", $response); $response = \array_filter( $response, - function ($a) { - return \strpos($a, $this->buildPath) !== false; - } + fn ($a) => \strpos($a, $this->buildPath) !== false ); } while (!empty($response)); $process->stop(); @@ -302,7 +295,7 @@ public function findBinary($binary, $priorityPath = 'local', $binaryPath = '', $ return $existedBinary; } - if ($existedBinary = $this->findBinaryLocal($composerBin, $bin)) { + if (null !== $composerBin && $existedBinary = $this->findBinaryLocal($composerBin, $bin)) { return $existedBinary; } @@ -318,7 +311,7 @@ public function findBinary($binary, $priorityPath = 'local', $binaryPath = '', $ return $existedBinary; } - if ($existedBinary = $this->findBinaryLocal($composerBin, $bin)) { + if (null !== $composerBin && $existedBinary = $this->findBinaryLocal($composerBin, $bin)) { return $existedBinary; } @@ -334,7 +327,7 @@ public function findBinary($binary, $priorityPath = 'local', $binaryPath = '', $ return $existedBinary; } - if ($existedBinary = $this->findBinaryLocal($composerBin, $bin)) { + if (null !== $composerBin && $existedBinary = $this->findBinaryLocal($composerBin, $bin)) { return $existedBinary; } @@ -346,7 +339,7 @@ public function findBinary($binary, $priorityPath = 'local', $binaryPath = '', $ return $existedBinary; } } else { - if ($existedBinary = $this->findBinaryLocal($composerBin, $bin)) { + if (null !== $composerBin && $existedBinary = $this->findBinaryLocal($composerBin, $bin)) { return $existedBinary; } diff --git a/src/Helper/Email.php b/src/Helper/Email.php index e255fd39..2c102248 100644 --- a/src/Helper/Email.php +++ b/src/Helper/Email.php @@ -116,7 +116,6 @@ public function getFrom() /** * Send the email. * - * @param Builder $builder * * @return int */ diff --git a/src/Helper/Github.php b/src/Helper/Github.php index 2d819229..e163e1be 100644 --- a/src/Helper/Github.php +++ b/src/Helper/Github.php @@ -24,12 +24,6 @@ public function __construct(ConfigurationInterface $configuration) /** * Create a comment on a specific file (and commit) in a Github Pull Request. - * @param $repo - * @param $pullId - * @param $commitId - * @param $file - * @param $line - * @param $comment * @return null */ public function createPullRequestComment($repo, $pullId, $commitId, $file, $line, $comment) @@ -61,11 +55,6 @@ public function createPullRequestComment($repo, $pullId, $commitId, $file, $line /** * Create a comment on a Github commit. - * @param $repo - * @param $commitId - * @param $file - * @param $line - * @param $comment * @return null */ public function createCommitComment($repo, $commitId, $file, $line, $comment) diff --git a/src/Helper/Lang.php b/src/Helper/Lang.php index 772a4570..6dde2631 100644 --- a/src/Helper/Lang.php +++ b/src/Helper/Lang.php @@ -74,7 +74,6 @@ public static function getLanguage() /** * Try and load a language, and if successful, set it for use throughout the system. * - * @param $language * * @return bool */ diff --git a/src/Helper/MailerFactory.php b/src/Helper/MailerFactory.php index 2cde0ab9..fdff20a4 100644 --- a/src/Helper/MailerFactory.php +++ b/src/Helper/MailerFactory.php @@ -65,7 +65,6 @@ public function getSwiftMailerFromConfig() /** * Return a specific configuration value by key. * - * @param $configName * * @return string|null */ diff --git a/src/Helper/Xml.php b/src/Helper/Xml.php index 819a42f1..307a3d38 100644 --- a/src/Helper/Xml.php +++ b/src/Helper/Xml.php @@ -17,7 +17,6 @@ class Xml { /** - * @param $filePath * * @return SimpleXMLElement|null */ diff --git a/src/Helper/Xml/Utf8CleanFilter.php b/src/Helper/Xml/Utf8CleanFilter.php index 9c2a7acc..e3daafea 100644 --- a/src/Helper/Xml/Utf8CleanFilter.php +++ b/src/Helper/Xml/Utf8CleanFilter.php @@ -20,9 +20,8 @@ class Utf8CleanFilter extends php_user_filter * @param int $consumed * @param bool $closing * - * @return int */ - public function filter($in, $out, &$consumed, $closing) + public function filter($in, $out, &$consumed, $closing): int { while ($bucket = \stream_bucket_make_writeable($in)) { $bucket->data = \preg_replace(self::PATTERN, '', $bucket->data); diff --git a/src/Logging/BuildDBLogHandler.php b/src/Logging/BuildDBLogHandler.php index 4b33ab3c..a0cfbd9a 100644 --- a/src/Logging/BuildDBLogHandler.php +++ b/src/Logging/BuildDBLogHandler.php @@ -79,7 +79,7 @@ private function sanitize(string $message): string ROOT_DIR, ], [ '/', - '/', + '//', '/', '/', ], $message); diff --git a/src/Migrations/20200505070903_initial_migration_v2.php b/src/Migrations/20200505070903_initial_migration_v2.php index 0cf4062e..19240c44 100644 --- a/src/Migrations/20200505070903_initial_migration_v2.php +++ b/src/Migrations/20200505070903_initial_migration_v2.php @@ -221,7 +221,7 @@ public function up() 'build_id', 'builds', 'id', - ['delete'=> 'CASCADE', 'update' => 'CASCADE'] + ['delete' => 'CASCADE', 'update' => 'CASCADE'] ) ->save(); diff --git a/src/Model/Build/GitBuild.php b/src/Model/Build/GitBuild.php index f0490bd7..65528935 100644 --- a/src/Model/Build/GitBuild.php +++ b/src/Model/Build/GitBuild.php @@ -102,8 +102,8 @@ protected function cloneByHttp(Builder $builder, $cloneTo) $cmd .= ' --depth ' . \intval($buildSettings['clone_depth']) . ' '; } - $cmd .= ' -b "%s" "%s" "%s"'; - $success = $builder->executeCommand($cmd, $this->getBranch(), $this->getCloneUrl(), $cloneTo); + $cmd .= ' -b %s "%s" "%s"'; + $success = $builder->executeCommand($cmd, \escapeshellarg($this->getBranch()), $this->getCloneUrl(), $cloneTo); if ($success) { $success = $this->postCloneSetup($builder, $cloneTo); @@ -132,10 +132,10 @@ protected function cloneBySsh(Builder $builder, $cloneTo) $cmd .= ' --depth ' . \intval($buildSettings['clone_depth']) . ' '; } - $cmd .= ' -b "%s" "%s" "%s"'; + $cmd .= ' -b %s "%s" "%s"'; $cmd = 'export GIT_SSH="' . $gitSshWrapper . '" && ' . $cmd; - $success = $builder->executeCommand($cmd, $this->getBranch(), $this->getCloneUrl(), $cloneTo); + $success = $builder->executeCommand($cmd, \escapeshellarg($this->getBranch()), $this->getCloneUrl(), $cloneTo); if ($success) { $extra = [ @@ -156,7 +156,6 @@ protected function cloneBySsh(Builder $builder, $cloneTo) * Handle any post-clone tasks, like switching branches. * * @param string $cloneTo - * @param array $extra * * @return bool */ @@ -168,7 +167,7 @@ protected function postCloneSetup(Builder $builder, $cloneTo, array $extra = nul if (empty($this->getEnvironmentId()) && !empty($commitId)) { $cmd = $chdir . ' && git checkout %s --quiet'; - $success = $builder->executeCommand($cmd, $cloneTo, $commitId); + $success = $builder->executeCommand($cmd, $cloneTo, \escapeshellarg($commitId)); } // Always update the commit hash with the actual HEAD hash @@ -177,11 +176,11 @@ protected function postCloneSetup(Builder $builder, $cloneTo, array $extra = nul $this->setCommitId($commitId); - if ($builder->executeCommand($chdir . ' && git log -1 --pretty=format:%%s %s', $cloneTo, $commitId)) { + if ($builder->executeCommand($chdir . ' && git log -1 --pretty=format:%%s %s', $cloneTo, \escapeshellarg($commitId))) { $this->setCommitMessage(\trim($builder->getLastOutput())); } - if ($builder->executeCommand($chdir . ' && git log -1 --pretty=format:%%ae %s', $cloneTo, $commitId)) { + if ($builder->executeCommand($chdir . ' && git log -1 --pretty=format:%%ae %s', $cloneTo, \escapeshellarg($commitId))) { $this->setCommitterEmail(\trim($builder->getLastOutput())); } } diff --git a/src/Model/Build/HgBuild.php b/src/Model/Build/HgBuild.php index 73b14174..046dc824 100644 --- a/src/Model/Build/HgBuild.php +++ b/src/Model/Build/HgBuild.php @@ -78,7 +78,7 @@ public function createWorkingCopy(Builder $builder, $buildPath) */ protected function cloneByHttp(Builder $builder, $cloneTo) { - return $builder->executeCommand('hg clone %s "%s" -r %s', $this->getCloneUrl(), $cloneTo, $this->getBranch()); + return $builder->executeCommand('hg clone %s "%s" -r %s', $this->getCloneUrl(), $cloneTo, \escapeshellarg($this->getBranch())); } /** @@ -94,7 +94,7 @@ protected function cloneBySsh(Builder $builder, $cloneTo) // Do the hg clone: $cmd = 'hg clone --ssh "ssh -i ' . $keyFile . '" %s "%s" -r %s'; - $success = $builder->executeCommand($cmd, $this->getCloneUrl(), $cloneTo, $this->getBranch()); + $success = $builder->executeCommand($cmd, $this->getCloneUrl(), $cloneTo, \escapeshellarg($this->getBranch())); if ($success) { $success = $this->postCloneSetup($builder, $cloneTo); @@ -110,7 +110,6 @@ protected function cloneBySsh(Builder $builder, $cloneTo) * Handle post-clone tasks (switching branch, etc.) * * @param string $cloneTo - * @param array $extra * * @return bool */ @@ -122,7 +121,7 @@ protected function postCloneSetup(Builder $builder, $cloneTo, array $extra = nul // Allow switching to a specific branch: if (!empty($commitId)) { $cmd = 'cd "%s" && hg checkout %s'; - $success = $builder->executeCommand($cmd, $cloneTo, $this->getBranch()); + $success = $builder->executeCommand($cmd, $cloneTo, \escapeshellarg($this->getBranch())); } return $success; diff --git a/src/Model/Build/SvnBuild.php b/src/Model/Build/SvnBuild.php index fffa7ccb..a1ab3498 100644 --- a/src/Model/Build/SvnBuild.php +++ b/src/Model/Build/SvnBuild.php @@ -36,8 +36,8 @@ protected function getCloneUrl() // (-> "branches/branch-1") } elseif (false === \strpos($branch, '/')) { $url .= 'branches/' . $branch; - // For default branch with non-standard branch directory like "/branch/branch-1" or "branch/branch-1" - // (-> "branch/branch-1") + // For default branch with non-standard branch directory like "/branch/branch-1" or "branch/branch-1" + // (-> "branch/branch-1") } else { $url .= $branch; } @@ -111,7 +111,7 @@ protected function cloneByHttp(Builder $builder, $cloneTo) if (!empty($this->getCommitId())) { $cmd .= ' -r %s %s "%s"'; - $success = $builder->executeCommand($cmd, $this->getCommitId(), $this->getCloneUrl(), $cloneTo); + $success = $builder->executeCommand($cmd, \escapeshellarg($this->getCommitId()), $this->getCloneUrl(), $cloneTo); } else { $cmd .= ' %s "%s"'; $success = $builder->executeCommand($cmd, $this->getCloneUrl(), $cloneTo); diff --git a/src/Model/Secret.php b/src/Model/Secret.php index 211626a4..e0e241d4 100644 --- a/src/Model/Secret.php +++ b/src/Model/Secret.php @@ -14,4 +14,5 @@ */ class Secret extends BaseSecret { + public const SECRET_NAME_PATTERN = '^[-_\w\d]+$'; } diff --git a/src/Plugin/Behat.php b/src/Plugin/Behat.php index 710a2802..bfff90a4 100644 --- a/src/Plugin/Behat.php +++ b/src/Plugin/Behat.php @@ -21,7 +21,7 @@ class Behat extends Plugin /** * @var string */ - protected $features; + protected $features = ''; /** * @return string @@ -40,8 +40,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) $this->executable = $this->findBinary(['behat', 'behat.phar']); - $this->features = ''; - if (!empty($options['features'])) { $this->features = $options['features']; } diff --git a/src/Plugin/BitbucketNotify.php b/src/Plugin/BitbucketNotify.php index ba56850f..862d53c6 100644 --- a/src/Plugin/BitbucketNotify.php +++ b/src/Plugin/BitbucketNotify.php @@ -269,7 +269,7 @@ protected function prepareResult($targetBranch) return []; } - $plugins = \array_unique(\array_merge(\array_keys($targetBranchBuildStats), \array_keys($currentBranchBuildStats))); + $plugins = \array_unique([...\array_keys($targetBranchBuildStats), ...\array_keys($currentBranchBuildStats)]); \sort($plugins); $result = []; @@ -355,7 +355,6 @@ protected function reportGenerator(array $stats) } /** - * @param $branchName * @return int * @throws Exception */ diff --git a/src/Plugin/CampfireNotify.php b/src/Plugin/CampfireNotify.php index 7645ee25..60d5b450 100644 --- a/src/Plugin/CampfireNotify.php +++ b/src/Plugin/CampfireNotify.php @@ -21,7 +21,7 @@ class CampfireNotify extends Plugin protected $url; protected $authToken; protected $userAgent; - protected $cookie; + protected $cookie = 'php-censor-cookie'; protected $verbose = false; protected $room; protected $message; @@ -44,7 +44,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) $this->message = $options['message']; $version = $this->builder->interpolate('%SYSTEM_VERSION%'); $this->userAgent = 'PHP Censor/' . $version; - $this->cookie = "php-censor-cookie"; if (isset($options['verbose']) && $options['verbose']) { $this->verbose = true; @@ -87,7 +86,6 @@ public function execute() /** * Join a Campfire room. - * @param $roomId */ public function joinRoom($roomId) { @@ -96,7 +94,6 @@ public function joinRoom($roomId) /** * Leave a Campfire room. - * @param $roomId */ public function leaveRoom($roomId) { @@ -105,8 +102,6 @@ public function leaveRoom($roomId) /** * Send a message to a campfire room. - * @param $message - * @param $roomId * @param bool $isPaste * @return bool|mixed */ @@ -125,7 +120,6 @@ public function speak($message, $roomId, $isPaste = false) /** * Make a request to Campfire. - * @param $page * @param null $data * @return bool|mixed */ diff --git a/src/Plugin/Codeception.php b/src/Plugin/Codeception.php index 601bed5f..8af65569 100644 --- a/src/Plugin/Codeception.php +++ b/src/Plugin/Codeception.php @@ -87,7 +87,6 @@ public static function canExecuteOnStage($stage, Build $build) /** * Try and find the codeception YML config file. * - * @param $buildPath * * @return string|null */ diff --git a/src/Plugin/Composer.php b/src/Plugin/Composer.php index 74363ef8..97852ece 100644 --- a/src/Plugin/Composer.php +++ b/src/Plugin/Composer.php @@ -19,11 +19,11 @@ */ class Composer extends Plugin implements ZeroConfigPluginInterface { - protected $action; - protected $preferDist; - protected $noDev; - protected $ignorePlatformReqs; - protected $preferSource; + protected $action = 'install'; + protected $preferDist = false; + protected $noDev = false; + protected $ignorePlatformReqs = false; + protected $preferSource = false; /** * @return string @@ -40,12 +40,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->action = 'install'; - $this->preferDist = false; - $this->preferSource = false; - $this->noDev = false; - $this->ignorePlatformReqs = false; - $this->executable = $this->findBinary(['composer', 'composer.phar']); if (\array_key_exists('action', $options)) { diff --git a/src/Plugin/Deployer.php b/src/Plugin/Deployer.php index 71bcb377..742ad89f 100644 --- a/src/Plugin/Deployer.php +++ b/src/Plugin/Deployer.php @@ -19,7 +19,7 @@ class Deployer extends Plugin { protected $webhookUrl; - protected $reason; + protected $reason = 'PHP Censor Build #%BUILD_ID% - %COMMIT_MESSAGE%'; protected $updateOnly; /** @@ -37,7 +37,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->reason = 'PHP Censor Build #%BUILD_ID% - %COMMIT_MESSAGE%'; if (isset($options['webhook_url'])) { $this->webhookUrl = $options['webhook_url']; } diff --git a/src/Plugin/DeployerOrg.php b/src/Plugin/DeployerOrg.php index f4e36077..c8e3b4b9 100644 --- a/src/Plugin/DeployerOrg.php +++ b/src/Plugin/DeployerOrg.php @@ -103,7 +103,7 @@ protected function validateConfig() protected function getVerbosityOption($verbosity) { $logLevelList = [ - 'verbose' =>'v', + 'verbose' => 'v', 'very verbose' => 'vv', 'debug' => 'vvv', 'quiet' => 'q' diff --git a/src/Plugin/Git.php b/src/Plugin/Git.php index 9741ef5e..e7d63f3c 100644 --- a/src/Plugin/Git.php +++ b/src/Plugin/Git.php @@ -63,7 +63,6 @@ public function execute() /** * Determine which action to run, and run it. * - * @param $action * * @return bool */ @@ -89,7 +88,6 @@ protected function runAction($action, array $options = []) /** * Handle a merge action. - * @param $options * @return bool */ protected function runMergeAction($options) @@ -104,7 +102,6 @@ protected function runMergeAction($options) /** * Handle a tag action. - * @param $options * @return bool */ protected function runTagAction($options) @@ -127,7 +124,6 @@ protected function runTagAction($options) /** * Handle a pull action. - * @param $options * @return bool */ protected function runPullAction($options) @@ -148,7 +144,6 @@ protected function runPullAction($options) /** * Handle a push action. - * @param $options * @return bool */ protected function runPushAction($options) diff --git a/src/Plugin/Grunt.php b/src/Plugin/Grunt.php index 7069c06a..0d49bac7 100644 --- a/src/Plugin/Grunt.php +++ b/src/Plugin/Grunt.php @@ -17,8 +17,8 @@ */ class Grunt extends Plugin { - protected $task; - protected $gruntfile; + protected $task = null; + protected $gruntfile = 'Gruntfile.js'; /** * @return string @@ -35,10 +35,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->task = null; - - $this->gruntfile = 'Gruntfile.js'; - if (isset($options['task'])) { $this->task = $options['task']; } diff --git a/src/Plugin/Gulp.php b/src/Plugin/Gulp.php index 1a33053e..6aff9411 100644 --- a/src/Plugin/Gulp.php +++ b/src/Plugin/Gulp.php @@ -17,8 +17,8 @@ */ class Gulp extends Plugin { - protected $task; - protected $gulpfile; + protected $task = null; + protected $gulpfile = 'gulpfile.js'; /** * @return string @@ -35,12 +35,8 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->task = null; - $this->executable = $this->findBinary('gulp'); - $this->gulpfile = 'gulpfile.js'; - if (isset($options['task'])) { $this->task = $options['task']; } diff --git a/src/Plugin/Lint.php b/src/Plugin/Lint.php index 6524dd7a..9a7eb92b 100644 --- a/src/Plugin/Lint.php +++ b/src/Plugin/Lint.php @@ -79,9 +79,6 @@ public function execute() /** * Lint an item (file or directory) by calling the appropriate method. - * @param $php - * @param $item - * @param $itemPath * @return bool */ protected function lintItem($php, $item, $itemPath) @@ -101,8 +98,6 @@ protected function lintItem($php, $item, $itemPath) /** * Run php -l against a directory of files. - * @param $php - * @param $path * @return bool */ protected function lintDirectory($php, $path) @@ -131,8 +126,6 @@ protected function lintDirectory($php, $path) /** * Run php -l against a specific file. - * @param $php - * @param $path * @return bool */ protected function lintFile($php, $path) diff --git a/src/Plugin/Mage.php b/src/Plugin/Mage.php index 32668d43..c276703b 100644 --- a/src/Plugin/Mage.php +++ b/src/Plugin/Mage.php @@ -83,9 +83,7 @@ protected function getMageLog() throw new RuntimeException('Log dir read fail'); } - $list = \array_filter($list, function ($name) { - return \preg_match('/^log-\d+-\d+\.log$/', $name); - }); + $list = \array_filter($list, fn ($name) => \preg_match('/^log-\d+-\d+\.log$/', $name)); if (empty($list)) { throw new RuntimeException('Log dir filter fail'); } diff --git a/src/Plugin/Mage3.php b/src/Plugin/Mage3.php index df3f3c72..c60ab9f4 100644 --- a/src/Plugin/Mage3.php +++ b/src/Plugin/Mage3.php @@ -88,9 +88,7 @@ protected function getMageLog() throw new RuntimeException('Log dir read fail'); } - $list = \array_filter($list, function ($name) { - return \preg_match('/^\d+_\d+\.log$/', $name); - }); + $list = \array_filter($list, fn ($name) => \preg_match('/^\d+_\d+\.log$/', $name)); if (empty($list)) { throw new RuntimeException('Log dir filter fail'); } diff --git a/src/Plugin/Option/PhpUnitOptions.php b/src/Plugin/Option/PhpUnitOptions.php index 38c29b25..4bbe70e4 100644 --- a/src/Plugin/Option/PhpUnitOptions.php +++ b/src/Plugin/Option/PhpUnitOptions.php @@ -33,7 +33,6 @@ public function __construct(ConfigurationInterface $configuration, array $option /** * Remove a command argument * - * @param $argumentName * * @return $this */ @@ -185,7 +184,6 @@ public function getDirectories() /** * Get an option if defined * - * @param $optionName * * @return string|string[]|null */ @@ -241,7 +239,6 @@ public function getConfigFiles($altPath = null) /** * Get options for a given argument * - * @param $argumentName * * @return string[] All the options for given argument */ diff --git a/src/Plugin/Pdepend.php b/src/Plugin/Pdepend.php index 941dbe32..74964c0b 100644 --- a/src/Plugin/Pdepend.php +++ b/src/Plugin/Pdepend.php @@ -34,17 +34,17 @@ class Pdepend extends Plugin /** * @var string File where the summary.xml is stored */ - protected $summary; + protected $summary = 'summary.xml'; /** * @var string File where the chart.svg is stored */ - protected $chart; + protected $chart = 'chart.svg'; /** * @var string File where the pyramid.svg is stored */ - protected $pyramid; + protected $pyramid = 'pyramid.svg'; /** * @var string @@ -71,10 +71,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->summary = 'summary.xml'; - $this->pyramid = 'pyramid.svg'; - $this->chart = 'chart.svg'; - $this->executable = $this->findBinary(['pdepend', 'pdepend.phar']); $this->buildDirectory = $build->getBuildDirectory(); diff --git a/src/Plugin/PhpCodeSniffer.php b/src/Plugin/PhpCodeSniffer.php index c195065a..082e221c 100644 --- a/src/Plugin/PhpCodeSniffer.php +++ b/src/Plugin/PhpCodeSniffer.php @@ -25,32 +25,32 @@ class PhpCodeSniffer extends Plugin implements ZeroConfigPluginInterface /** * @var array */ - protected $suffixes; + protected $suffixes = ['php']; /** * @var string */ - protected $standard; + protected $standard = 'PSR2'; /** * @var string */ - protected $tabWidth; + protected $tabWidth = ''; /** * @var string */ - protected $encoding; + protected $encoding = ''; /** * @var int */ - protected $allowedErrors; + protected $allowedErrors = 0; /** * @var int */ - protected $allowedWarnings; + protected $allowedWarnings = 0; /** * @var int @@ -82,13 +82,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->suffixes = ['php']; - $this->standard = 'PSR2'; - $this->tabWidth = ''; - $this->encoding = ''; - $this->allowedWarnings = 0; - $this->allowedErrors = 0; - $this->executable = $this->findBinary(['phpcs', 'phpcs.phar']); if (isset($options['zero_config']) && $options['zero_config']) { @@ -236,7 +229,6 @@ protected function getFlags() /** * Process the PHPCS output report. - * @param $output * @return array * @throws Exception */ diff --git a/src/Plugin/PhpCpd.php b/src/Plugin/PhpCpd.php index 48a9abc3..8ea65208 100644 --- a/src/Plugin/PhpCpd.php +++ b/src/Plugin/PhpCpd.php @@ -102,7 +102,6 @@ public function execute() /** * Process the PHPCPD XML report. * - * @param $xmlString * * @return int * diff --git a/src/Plugin/PhpDocblockChecker.php b/src/Plugin/PhpDocblockChecker.php index 24ca38bf..516a75d2 100644 --- a/src/Plugin/PhpDocblockChecker.php +++ b/src/Plugin/PhpDocblockChecker.php @@ -26,7 +26,7 @@ class PhpDocblockChecker extends Plugin implements ZeroConfigPluginInterface /** * @var int */ - protected $allowedWarnings; + protected $allowedWarnings = 0; /** * @return string @@ -43,8 +43,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->allowedWarnings = 0; - if (isset($options['zero_config']) && $options['zero_config']) { $this->allowedWarnings = -1; } diff --git a/src/Plugin/PhpLoc.php b/src/Plugin/PhpLoc.php index 00026008..0529cc3b 100644 --- a/src/Plugin/PhpLoc.php +++ b/src/Plugin/PhpLoc.php @@ -5,6 +5,7 @@ use PHPCensor; use PHPCensor\Builder; use PHPCensor\Model\Build; +use PHPCensor\Model\User; use PHPCensor\Plugin; use PHPCensor\ZeroConfigPluginInterface; @@ -56,9 +57,7 @@ public function execute() { $ignore = ''; if (\is_array($this->ignore)) { - $map = function ($item) { - return \sprintf(' --exclude="%s"', $item); - }; + $map = fn ($item) => \sprintf(' --exclude="%s"', $item); $ignore = \array_map($map, $this->ignore); $ignore = \implode('', $ignore); diff --git a/src/Plugin/PhpMessDetector.php b/src/Plugin/PhpMessDetector.php index b6a22ea2..afa99af9 100644 --- a/src/Plugin/PhpMessDetector.php +++ b/src/Plugin/PhpMessDetector.php @@ -24,15 +24,15 @@ class PhpMessDetector extends Plugin implements ZeroConfigPluginInterface /** * @var array */ - protected $suffixes; + protected $suffixes = ['php']; /** * Array of PHPMD rules. Can be one of the builtins (codesize, unusedcode, naming, design, controversial) * or a filename (detected by checking for a / in it), either absolute or relative to the project root. * @var array */ - protected $rules; - protected $allowedWarnings; + protected $rules = ['codesize', 'unusedcode', 'naming']; + protected $allowedWarnings = 0; /** * @return string @@ -49,10 +49,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->suffixes = ['php']; - $this->rules = ['codesize', 'unusedcode', 'naming']; - $this->allowedWarnings = 0; - if (isset($options['zero_config']) && $options['zero_config']) { $this->allowedWarnings = -1; } @@ -101,8 +97,6 @@ public function execute() /** * Override a default setting. - * @param $options - * @param $key */ protected function overrideSetting($options, $key) { @@ -114,7 +108,6 @@ protected function overrideSetting($options, $key) /** * Process PHPMD's XML output report. * - * @param $xmlString * * @return int * @@ -177,7 +170,6 @@ protected function tryAndProcessRules() /** * Execute PHP Mess Detector. - * @param $binaryPath */ protected function executePhpMd($binaryPath) { diff --git a/src/Plugin/PhpParallelLint.php b/src/Plugin/PhpParallelLint.php index 1d39b669..4ec480d7 100644 --- a/src/Plugin/PhpParallelLint.php +++ b/src/Plugin/PhpParallelLint.php @@ -21,12 +21,12 @@ class PhpParallelLint extends Plugin implements ZeroConfigPluginInterface /** * @var string - comma separated list of file extensions */ - protected $extensions; + protected $extensions = 'php'; /** * @var bool - enable short tags */ - protected $shortTag; + protected $shortTag = false; /** * @return string @@ -47,9 +47,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->extensions = 'php'; - $this->shortTag = false; - $this->executable = $this->findBinary(['parallel-lint', 'parallel-lint.phar']); if (isset($options['shorttags'])) { diff --git a/src/Plugin/PhpTalLint.php b/src/Plugin/PhpTalLint.php index 0d24ff3e..61e549fd 100644 --- a/src/Plugin/PhpTalLint.php +++ b/src/Plugin/PhpTalLint.php @@ -103,8 +103,6 @@ public function execute() /** * Lint an item (file or directory) by calling the appropriate method. - * @param $item - * @param $itemPath * @return bool */ protected function lintItem($item, $itemPath) @@ -124,7 +122,6 @@ protected function lintItem($item, $itemPath) /** * Run phptal lint against a directory of files. - * @param $path * @return bool */ protected function lintDirectory($path) @@ -153,7 +150,6 @@ protected function lintDirectory($path) /** * Run phptal lint against a specific file. - * @param $path * @return bool */ protected function lintFile($path) diff --git a/src/Plugin/SecurityChecker.php b/src/Plugin/SecurityChecker.php index 2f7bf71b..53bfeebe 100644 --- a/src/Plugin/SecurityChecker.php +++ b/src/Plugin/SecurityChecker.php @@ -23,7 +23,7 @@ class SecurityChecker extends Plugin implements ZeroConfigPluginInterface /** * @var int */ - protected $allowedWarnings; + protected $allowedWarnings = 0; /** * @var string @@ -53,8 +53,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->allowedWarnings = 0; - if (isset($options['zero_config']) && $options['zero_config']) { $this->allowedWarnings = -1; } diff --git a/src/Plugin/SensiolabsInsight.php b/src/Plugin/SensiolabsInsight.php index 6477bacd..4bd7790c 100644 --- a/src/Plugin/SensiolabsInsight.php +++ b/src/Plugin/SensiolabsInsight.php @@ -38,7 +38,7 @@ class SensiolabsInsight extends Plugin /** * @var int */ - protected $allowedWarnings; + protected $allowedWarnings = 0; /** * @return string @@ -54,8 +54,6 @@ public static function pluginName() public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - - $this->allowedWarnings = 0; if (\array_key_exists('allowed_warnings', $options)) { $this->allowedWarnings = (int)$options['allowed_warnings']; } @@ -95,7 +93,6 @@ public function execute() /** * Process PHPMD's XML output report. * - * @param $xmlString * * @return int * @@ -137,7 +134,6 @@ protected function processReport($xmlString) /** * Execute Sensiolabs Insight. - * @param $binaryPath */ protected function executeSensiolabsInsight($binaryPath) { diff --git a/src/Plugin/TechnicalDebt.php b/src/Plugin/TechnicalDebt.php index 347e7799..8c19f77e 100644 --- a/src/Plugin/TechnicalDebt.php +++ b/src/Plugin/TechnicalDebt.php @@ -25,17 +25,17 @@ class TechnicalDebt extends Plugin implements ZeroConfigPluginInterface /** * @var array */ - protected $suffixes; + protected $suffixes = ['php']; /** * @var int */ - protected $allowedErrors; + protected $allowedErrors = 0; /** * @var array - terms to search for */ - protected $searches; + protected $searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME']; /** * @var array - lines of . and X to visualize errors @@ -117,10 +117,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->suffixes = ['php']; - $this->allowedErrors = 0; - $this->searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME']; - if (!empty($options['suffixes']) && \is_array($options['suffixes'])) { $this->suffixes = $options['suffixes']; } diff --git a/src/Plugin/TelegramNotify.php b/src/Plugin/TelegramNotify.php index e149bf1e..dbbb0bb5 100644 --- a/src/Plugin/TelegramNotify.php +++ b/src/Plugin/TelegramNotify.php @@ -85,11 +85,19 @@ public function execute() $url = '/bot' . $this->authToken . '/sendMessage'; foreach ($this->recipients as $chatId) { + $chatId = $this->builder->interpolate($chatId, true); + [$chatId, $topicId] = $this->splitChatIdAndTopicId($chatId); + $params = [ - 'chat_id' => $this->builder->interpolate($chatId, true), + 'chat_id' => $chatId, 'text' => $message, 'parse_mode' => 'Markdown', ]; + + if ($topicId !== null) { + $params['message_thread_id'] = $topicId; + } + $client->post(('https://api.telegram.org' . $url), [ 'headers' => [ 'Content-Type' => 'application/json', @@ -103,6 +111,11 @@ public function execute() 'text' => $this->buildMsg, 'parse_mode' => 'Markdown', ]; + + if ($topicId !== null) { + $params['message_thread_id'] = $topicId; + } + $client->post(('https://api.telegram.org' . $url), [ 'headers' => [ 'Content-Type' => 'application/json', @@ -142,4 +155,18 @@ private function buildMessage() return $this->builder->interpolate(\str_replace(['%ICON_BUILD%'], [$buildIcon], $this->message)); } + + /** + * Split chat group id to chat id and topic id + * + * @param int|string $chatId + * @return array{string, string|null} + */ + protected function splitChatIdAndTopicId($chatId) + { + $parts = \explode('/', \trim((string) $chatId) . '/'); + $topicId = $parts[1] !== '' ? $parts[1] : null; + + return [$parts[0], $topicId]; + } } diff --git a/src/Plugin/Util/BitbucketNotifyPluginResult.php b/src/Plugin/Util/BitbucketNotifyPluginResult.php index a7dda97b..8157dcdb 100644 --- a/src/Plugin/Util/BitbucketNotifyPluginResult.php +++ b/src/Plugin/Util/BitbucketNotifyPluginResult.php @@ -22,14 +22,13 @@ class BitbucketNotifyPluginResult protected $right; /** @var string $outputFormat */ - protected $outputFormat; + protected $outputFormat = self::DEFAULT_PLUGIN_OUTPUT_FORMAT; public function __construct($plugin, $left, $right) { $this->plugin = $plugin; $this->left = $left; $this->right = $right; - $this->outputFormat = self::DEFAULT_PLUGIN_OUTPUT_FORMAT; } public function getPlugin() diff --git a/src/Plugin/Util/Executor.php b/src/Plugin/Util/Executor.php index 55ea9b66..e4ff1b2b 100644 --- a/src/Plugin/Util/Executor.php +++ b/src/Plugin/Util/Executor.php @@ -141,13 +141,13 @@ protected function getBranchSpecificPlugins($config, $stage, $pluginsToExecute) break; - // Run branch-specific plugins before standard plugins: + // Run branch-specific plugins before standard plugins: case 'before': \array_unshift($pluginsToExecute, $plugins); break; - // Run branch-specific plugins after standard plugins: + // Run branch-specific plugins after standard plugins: case 'after': default: \array_push($pluginsToExecute, $plugins); @@ -160,8 +160,6 @@ protected function getBranchSpecificPlugins($config, $stage, $pluginsToExecute) /** * Execute the list of plugins found for a given testing stage. - * @param $plugins - * @param $stage * @return bool * @throws Exception */ @@ -191,6 +189,7 @@ protected function doExecutePlugins($plugins, $stage) if ($stage === Build::STAGE_SETUP) { $this->logger->logFailure('PLUGIN: FAILED'); + // If we're in the "setup" stage, execution should not continue after // a plugin has failed: diff --git a/src/Plugin/Util/PhpUnitResult.php b/src/Plugin/Util/PhpUnitResult.php index ac10f74b..e90788cb 100644 --- a/src/Plugin/Util/PhpUnitResult.php +++ b/src/Plugin/Util/PhpUnitResult.php @@ -42,17 +42,17 @@ public function __construct($outputFile, $buildPath = '') */ abstract public function parse(); - abstract protected function getSeverity($testcase); + abstract protected function getSeverity($testCase); - abstract protected function buildMessage($testcase); + abstract protected function buildMessage($testCase); - abstract protected function buildTrace($testcase); + abstract protected function buildTrace($testCase); - abstract protected function getFileAndLine($testcase); + abstract protected function getFileAndLine($testCase); - protected function getOutput($testcase) + protected function getOutput($testCase) { - return $testcase['output']; + return $testCase['output']; } protected function parseTestcase($testcase) diff --git a/src/Plugin/Util/PhpUnitResultJson.php b/src/Plugin/Util/PhpUnitResultJson.php index b9051e1c..da47d408 100644 --- a/src/Plugin/Util/PhpUnitResultJson.php +++ b/src/Plugin/Util/PhpUnitResultJson.php @@ -72,21 +72,21 @@ public function parse() /** * Build the severity of the event * - * @param $event + * @param $testCase * * @return string The severity flags * @throws Exception */ - protected function getSeverity($event) + protected function getSeverity($testCase) { - $status = $event['status']; + $status = $testCase['status']; switch ($status) { case 'fail': $severity = self::SEVERITY_FAIL; break; case 'error': - if (\strpos($event['message'], 'Skipped') === 0 || \strpos($event['message'], 'Incomplete') === 0) { + if (\strpos($testCase['message'], 'Skipped') === 0 || \strpos($testCase['message'], 'Incomplete') === 0) { $severity = self::SEVERITY_SKIPPED; } else { $severity = self::SEVERITY_ERROR; @@ -108,16 +108,16 @@ protected function getSeverity($event) /** * Build the message string for an event * - * @param array $event + * @param array $testCase * * @return string */ - protected function buildMessage($event) + protected function buildMessage($testCase) { - $message = $event['test']; + $message = $testCase['test']; - if ($event['message']) { - $message .= PHP_EOL . $event ['message']; + if ($testCase['message']) { + $message .= PHP_EOL . $testCase ['message']; } return $message; @@ -126,16 +126,16 @@ protected function buildMessage($event) /** * Build a string base trace of the failure * - * @param array $event + * @param array $testCase * * @return string[] */ - protected function buildTrace($event) + protected function buildTrace($testCase) { $formattedTrace = []; - if (!empty($event['trace'])) { - foreach ($event['trace'] as $step) { + if (!empty($testCase['trace'])) { + foreach ($testCase['trace'] as $step) { $line = \str_replace($this->buildPath, '', $step['file']) . ':' . $step['line']; $formattedTrace[] = $line; } @@ -147,20 +147,20 @@ protected function buildTrace($event) /** * Saves additional info for a failing test * - * @param array $event + * @param array $testCase * * @return array */ - protected function getFileAndLine($event) + protected function getFileAndLine($testCase) { - if (empty($event['trace'])) { + if (empty($testCase['trace'])) { return [ 'file' => '', 'line' => '', ]; } - $firstTrace = \end($event['trace']); - \reset($event['trace']); + $firstTrace = \end($testCase['trace']); + \reset($testCase['trace']); return [ 'file' => \str_replace($this->buildPath, '', $firstTrace['file']), diff --git a/src/Plugin/Util/PhpUnitResultJunit.php b/src/Plugin/Util/PhpUnitResultJunit.php index 1cbac12a..003ad587 100644 --- a/src/Plugin/Util/PhpUnitResultJunit.php +++ b/src/Plugin/Util/PhpUnitResultJunit.php @@ -167,9 +167,9 @@ private function internalProblem($description) throw new RuntimeException($description); } - protected function getFileAndLine($testcase) + protected function getFileAndLine($testCase) { - $attributes = $testcase->attributes(); + $attributes = $testCase->attributes(); return [ 'file' => \str_replace($this->buildPath, '', $attributes['file']), diff --git a/src/Plugin/WebhookNotify.php b/src/Plugin/WebhookNotify.php index 3a19d5da..eb0e7a0f 100644 --- a/src/Plugin/WebhookNotify.php +++ b/src/Plugin/WebhookNotify.php @@ -25,7 +25,7 @@ class WebhookNotify extends Plugin /** * @var string The URL to send the webhook to. */ - private $url; + private string $url; /** * @return string diff --git a/src/Plugin/XmppNotify.php b/src/Plugin/XmppNotify.php index 49df480f..1601728e 100644 --- a/src/Plugin/XmppNotify.php +++ b/src/Plugin/XmppNotify.php @@ -20,37 +20,37 @@ class XmppNotify extends Plugin /** * @var string, username of sender account xmpp */ - protected $username; + protected $username = ''; /** * @var string, alias server of sender account xmpp */ - protected $server; + protected $server = ''; /** * @var string, password of sender account xmpp */ - protected $password; + protected $password = ''; /** * @var string, alias for sender */ - protected $alias; + protected $alias = ''; /** * @var string, use tls */ - protected $tls; + protected $tls = false; /** * @var array, list of recipients xmpp accounts */ - protected $recipients; + protected $recipients = []; /** * @var string, mask to format date */ - protected $dateFormat; + protected $dateFormat = '%c'; /** * @return string @@ -67,14 +67,6 @@ public function __construct(Builder $builder, Build $build, array $options = []) { parent::__construct($builder, $build, $options); - $this->username = ''; - $this->password = ''; - $this->server = ''; - $this->alias = ''; - $this->recipients = []; - $this->tls = false; - $this->dateFormat = '%c'; - $this->executable = $this->findBinary('sendxmpp'); /* @@ -182,7 +174,6 @@ public function execute() } /** - * @param $messageFile * @return int */ protected function buildMessage($messageFile) diff --git a/src/Store/BuildErrorStore.php b/src/Store/BuildErrorStore.php index d71f15e2..b40894fa 100644 --- a/src/Store/BuildErrorStore.php +++ b/src/Store/BuildErrorStore.php @@ -8,6 +8,7 @@ use PDO; use PHPCensor\Exception\HttpException; use PHPCensor\Model\BuildError; +use PHPCensor\Model\BuildMeta; use PHPCensor\Store; /** @@ -73,9 +74,7 @@ public function getByBuildId(int $buildId, ?int $limit = null, int $offset = 0, if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new BuildError($this->storeRegistry, $item); - }; + $map = fn ($item) => new BuildError($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -152,10 +151,7 @@ public function getKnownPlugins(int $buildId, ?int $severity = null, ?string $is if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return $item['plugin']; - }; + $map = fn ($item) => $item['plugin']; return \array_map($map, $res); } else { @@ -185,10 +181,7 @@ public function getKnownSeverities(int $buildId, ?string $plugin = null, ?string if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return (int)$item['severity']; - }; + $map = fn ($item) => (int)$item['severity']; return \array_map($map, $res); } else { diff --git a/src/Store/BuildMetaStore.php b/src/Store/BuildMetaStore.php index 0a240eeb..ff358c70 100644 --- a/src/Store/BuildMetaStore.php +++ b/src/Store/BuildMetaStore.php @@ -6,6 +6,8 @@ use PDO; use PHPCensor\Exception\HttpException; +use PHPCensor\Model\Build; +use PHPCensor\Model\BuildError; use PHPCensor\Model\BuildMeta; use PHPCensor\Store; @@ -68,9 +70,7 @@ public function getByBuildId(int $buildId, int $limit = 1000, string $useConnect if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new BuildMeta($this->storeRegistry, $item); - }; + $map = fn ($item) => new BuildMeta($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -96,10 +96,7 @@ public function getErrorsForUpgrade(int $limit): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return new BuildMeta($this->storeRegistry, $item); - }; + $map = fn ($item) => new BuildMeta($this->storeRegistry, $item); return \array_map($map, $res); } else { diff --git a/src/Store/BuildStore.php b/src/Store/BuildStore.php index 929f39e4..98fd7b81 100644 --- a/src/Store/BuildStore.php +++ b/src/Store/BuildStore.php @@ -44,9 +44,7 @@ public function getByProjectId(int $projectId, int $limit = 1000, string $useCon if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -76,9 +74,7 @@ public function getByStatus(int $status, int $limit = 1000, string $useConnectio if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -99,10 +95,7 @@ public function getBuilds(int $limit = 5, int $offset = 0): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); return \array_map($map, $res); } else { @@ -151,10 +144,7 @@ public function getLatestBuilds(?int $projectId = null, int $limit = 5): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); return \array_map($map, $res); } else { @@ -253,9 +243,7 @@ public function getAllProjectsLatestBuilds(int $limitByProject = 5, int $limitAl } foreach ($projects as $idx => $project) { - $projects[$idx] = \array_filter($project, function ($val) { - return ($val['latest'][0]->getStatus() !== Build::STATUS_SUCCESS); - }); + $projects[$idx] = \array_filter($project, fn ($val) => $val['latest'][0]->getStatus() !== Build::STATUS_SUCCESS); } $projects = \array_filter($projects); @@ -279,10 +267,7 @@ public function getByProjectAndCommit(int $projectId, string $commitId): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); $rtn = \array_map($map, $res); @@ -424,10 +409,7 @@ public function getOldByProject(int $projectId, int $keep = 100): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - - $map = function ($item) { - return new Build($this->storeRegistry, $item); - }; + $map = fn ($item) => new Build($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); diff --git a/src/Store/EnvironmentStore.php b/src/Store/EnvironmentStore.php index a0ffe27a..01c6192b 100644 --- a/src/Store/EnvironmentStore.php +++ b/src/Store/EnvironmentStore.php @@ -7,6 +7,7 @@ use Exception; use PDO; use PHPCensor\Exception\HttpException; +use PHPCensor\Model\Build; use PHPCensor\Model\Environment; use PHPCensor\Store; @@ -66,9 +67,7 @@ public function getByProjectId(int $projectId, string $useConnection = 'read'): if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Environment($this->storeRegistry, $item); - }; + $map = fn ($item) => new Environment($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); diff --git a/src/Store/ProjectStore.php b/src/Store/ProjectStore.php index 84e199bf..f9151207 100644 --- a/src/Store/ProjectStore.php +++ b/src/Store/ProjectStore.php @@ -7,6 +7,7 @@ use Exception; use PDO; use PHPCensor\Exception\HttpException; +use PHPCensor\Model\Environment; use PHPCensor\Model\Project; use PHPCensor\Store; @@ -70,9 +71,7 @@ public function getByTitle(string $title, int $limit = 1000, string $useConnecti if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Project($this->storeRegistry, $item); - }; + $map = fn ($item) => new Project($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -97,9 +96,7 @@ public function getKnownBranches(int $projectId): array if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return $item['branch']; - }; + $map = fn ($item) => $item['branch']; return \array_map($map, $res); } else { @@ -122,9 +119,7 @@ public function getAll(string $useConnection = 'read', bool $archived = false): if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Project($this->storeRegistry, $item); - }; + $map = fn ($item) => new Project($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); @@ -158,9 +153,7 @@ public function getByGroupId(int $groupId, bool $archived = false, int $limit = if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new Project($this->storeRegistry, $item); - }; + $map = fn ($item) => new Project($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); diff --git a/src/Store/UserStore.php b/src/Store/UserStore.php index 74980b6b..fb0ad4a3 100644 --- a/src/Store/UserStore.php +++ b/src/Store/UserStore.php @@ -114,9 +114,7 @@ public function getByName(string $name, int $limit = 1000, string $useConnection if ($stmt->execute()) { $res = $stmt->fetchAll(PDO::FETCH_ASSOC); - $map = function ($item) { - return new User($this->storeRegistry, $item); - }; + $map = fn ($item) => new User($this->storeRegistry, $item); $rtn = \array_map($map, $res); $count = \count($rtn); diff --git a/src/Worker/BuildWorker.php b/src/Worker/BuildWorker.php index 21f22a0e..21c11b91 100644 --- a/src/Worker/BuildWorker.php +++ b/src/Worker/BuildWorker.php @@ -63,7 +63,7 @@ class BuildWorker private Pheanstalk $pheanstalk; - private int $lastPeriodical; + private int $lastPeriodical = 0; public function __construct( ConfigurationInterface $configuration, @@ -87,7 +87,6 @@ public function __construct( $this->queueTube = $queueTube; $this->pheanstalk = Pheanstalk::create($queueHost, $queuePort); - $this->lastPeriodical = 0; $this->canPeriodicalWork = $canPeriodicalWork; } diff --git a/tests/src/Command/CreateBuildCommandTest.php b/tests/src/Command/CreateBuildCommandTest.php index b4dac954..81b2ec72 100644 --- a/tests/src/Command/CreateBuildCommandTest.php +++ b/tests/src/Command/CreateBuildCommandTest.php @@ -85,9 +85,9 @@ public function testExecute(): void { $commandTester = $this->getCommandTester(); - $commandTester->execute(['projectId' => 1]); - $commandTester->execute(['projectId' => 1, '--commit' => '92c8c6e']); - $commandTester->execute(['projectId' => 1, '--branch' => 'master']); + $commandTester->execute(['project-id' => 1]); + $commandTester->execute(['project-id' => 1, '--commit' => '92c8c6e']); + $commandTester->execute(['project-id' => 1, '--branch' => 'master']); self::assertTrue(true); } @@ -97,6 +97,6 @@ public function testExecuteWithUnknownProjectId(): void self::expectException(InvalidArgumentException::class); $commandTester = $this->getCommandTester(); - $commandTester->execute(['projectId' => 2]); + $commandTester->execute(['project-id' => 2]); } } diff --git a/tests/src/Plugin/TelegramNotifyTest.php b/tests/src/Plugin/TelegramNotifyTest.php new file mode 100644 index 00000000..80e66063 --- /dev/null +++ b/tests/src/Plugin/TelegramNotifyTest.php @@ -0,0 +1,42 @@ +getMethod('splitChatIdAndTopicId'); + $method->setAccessible(true); + $instance = $reflection->newInstanceWithoutConstructor(); + + $result = $method->invoke($instance, $chatId); + self::assertSame($expectedThreadId, $result); + } + + public function chatIdProvider(): array + { + return [ + 'without message thread id' => ['-12345', ['-12345', null]], + 'with message thread id' => ['12345/67890', ['12345', '67890']], + 'empty thread id' => ['12345/', ['12345', null]], + 'not group chat' => ['12345', ['12345', null]], + 'empty input' => ['', ['', null]], + 'only slash' => ['/', ['', null]], + 'double slash' => ['//', ['', null]], + 'group id digits only' => [12345, ['12345', null]], + 'group id digits only (negative)' => [-12345, ['-12345', null]], + 'zero topic id' => ['-12345/0', ['-12345', '0']], + 'spaces' => [' -12345/0 ', ['-12345', '0']], + ]; + } +}