diff --git a/.github/workflows/blackbox.yml b/.github/workflows/blackbox.yml index 91286848..931e1dd9 100644 --- a/.github/workflows/blackbox.yml +++ b/.github/workflows/blackbox.yml @@ -30,7 +30,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Install dependencies - run: composer install --prefer-dist --no-interaction --no-suggest + run: composer install --prefer-dist --no-interaction - name: Compose Blackbox environment run: docker compose up -d diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index b83c817a..c45ec12c 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -28,7 +28,7 @@ jobs: coverage: none - name: Install dependencies - run: composer install --prefer-dist --no-interaction --no-suggest + run: composer install --prefer-dist --no-interaction - name: Run PHP Code Sniffer run: ./vendor/bin/phpcs @@ -58,6 +58,6 @@ jobs: tools: "cs2pr" - name: Install dependencies - run: composer install --prefer-dist --no-interaction --no-suggest + run: composer install --prefer-dist --no-interaction - name: Run PHPStan run: "vendor/bin/phpstan analyse --autoload-file tests/bootstrap.php --error-format=checkstyle | cs2pr" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 60a9fd07..01a7da52 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -62,7 +62,7 @@ jobs: coverage: none - name: Install dependencies - run: composer update --prefer-dist --no-interaction --no-suggest + run: composer update --prefer-dist --no-interaction - name: Start Redis uses: supercharge/redis-github-action@1.1.0 diff --git a/.gitignore b/.gitignore index fc951dd5..1985f55f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /vendor/ *.iml /.idea/ -composer.lock composer.phar .phpunit.result.cache diff --git a/README.APCng.md b/README.APCng.md index b197b190..51bbb122 100644 --- a/README.APCng.md +++ b/README.APCng.md @@ -47,7 +47,7 @@ The following table compares `APC` and `APCng` processing time for a series of o | APCng 100k keys / 2500 metrics | 274.7 | 84.0 | 34.6 | 4092.4 | 52.9x | | APCng 1M keys / 2500 metrics | 187.8 | 87.7 | 40.7 | 5396.4 | 50.1x | -The suite of engine-performance tests can be automatically executed by running `docker-compose run phpunit vendor/bin/phpunit tests/Test --group Performance`. This set of tests in not part of the default unit tests which get run, since they take quite a while to complete. Any significant change to the APC or APCng code should be followed by a performance-test run to quantify the before/after impact of the change. Currently this is triggered manually, but it could be automated as part of a Github workflow. +The suite of engine-performance tests can be automatically executed by running `docker compose run phpunit vendor/bin/phpunit tests/Test --group Performance`. This set of tests in not part of the default unit tests which get run, since they take quite a while to complete. Any significant change to the APC or APCng code should be followed by a performance-test run to quantify the before/after impact of the change. Currently this is triggered manually, but it could be automated as part of a Github workflow. ## Known limitations One thing to note, the current implementation of the `Summary` observer should be avoided on busy servers. This is true for both the `APC` and `APCng` storage engines. The reason is simple: each observation (call to increment, set, etc) results in a new item being written to APCu. The default TTL for these items is 600 seconds. On a busy server that might be getting 1000 requests/second, that results in 600,000 APC cache items continually churning in and out of existence. This can put some interesting pressure on APCu, which could lead to rapid fragmentation of APCu memory. Definitely test before deploying in production. diff --git a/README.md b/README.md index 3866cfd4..608a4926 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ composer require promphp/prometheus_push_gateway_php Start a Redis instance: ``` -docker-compose up redis +docker compose up redis ``` Run the tests: @@ -157,16 +157,16 @@ composer install ## Black box testing -Just start the nginx, fpm & Redis setup with docker-compose: +Just start the nginx, fpm & Redis setup with Docker Compose: ``` -docker-compose up +docker compose up ``` Pick the adapter you want to test. ``` -docker-compose run phpunit env ADAPTER=apc vendor/bin/phpunit tests/Test/ -docker-compose run phpunit env ADAPTER=apcng vendor/bin/phpunit tests/Test/ -docker-compose run phpunit env ADAPTER=redis vendor/bin/phpunit tests/Test/ +docker compose run phpunit env ADAPTER=apc vendor/bin/phpunit tests/Test/ +docker compose run phpunit env ADAPTER=apcng vendor/bin/phpunit tests/Test/ +docker compose run phpunit env ADAPTER=redis vendor/bin/phpunit tests/Test/ ``` ## Performance testing @@ -178,6 +178,6 @@ phpunit vendor/bin/phpunit tests/Test/ --group Performance The test can also be run inside a container. ``` -docker-compose up -docker-compose run phpunit vendor/bin/phpunit tests/Test/ --group Performance +docker compose up +docker compose run phpunit vendor/bin/phpunit tests/Test/ --group Performance ``` diff --git a/composer.json b/composer.json index dec37f80..ee7e055a 100644 --- a/composer.json +++ b/composer.json @@ -20,10 +20,10 @@ }, "require-dev": { "guzzlehttp/guzzle": "^6.3|^7.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5.4", - "phpstan/phpstan-phpunit": "^1.1.0", - "phpstan/phpstan-strict-rules": "^1.1.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.4", "squizlabs/php_codesniffer": "^3.6", "symfony/polyfill-apcu": "^1.6" diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..760e060d --- /dev/null +++ b/composer.lock @@ -0,0 +1,2732 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "10af1ad047d35c906b1381a8249cb062", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-03-27T13:37:11+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-03-27T13:27:01+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.7.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-03-27T12:30:47+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-04-29T12:36:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" + }, + "time": "2025-05-31T08:24:38+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.4.3" + }, + "time": "2024-09-04T20:21:43+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.17", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053", + "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053", + "shasum": "" + }, + "require": { + "php": "^7.4|^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-05-21T20:55:28+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "6b92469f8a7995e626da3aa487099617b8dfa260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6b92469f8a7995e626da3aa487099617b8dfa260", + "reference": "6b92469f8a7995e626da3aa487099617b8dfa260", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0.4" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "nikic/php-parser": "^5", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.6" + }, + "time": "2025-03-26T12:47:06+00:00" + }, + { + "name": "phpstan/phpstan-strict-rules", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-strict-rules.git", + "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/3e139cbe67fafa3588e1dbe27ca50f31fdb6236a", + "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0.4" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Extra strict and opinionated rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.4" + }, + "time": "2025-03-18T11:42:40+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:23:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.23", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43d2cb18d0675c38bd44982a5d1d88f6d53d8d95", + "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.23" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-05-02T06:40:34+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.13.2", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "5b5e3821314f947dd040c70f7992a64eac89025c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c", + "reference": "5b5e3821314f947dd040c70f7992a64eac89025c", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-06-17T22:17:01+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "9cba05c714911d416f478a74d1758865f7373c3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/9cba05c714911d416f478a74d1758865f7373c3f", + "reference": "9cba05c714911d416f478a74d1758865f7373c3f", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.4|^8.0", + "ext-json": "*" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/phpstan/include-by-php-version.php b/phpstan/include-by-php-version.php index d84c21b0..5dc16e9c 100644 --- a/phpstan/include-by-php-version.php +++ b/phpstan/include-by-php-version.php @@ -4,10 +4,6 @@ $includes = []; -if (PHP_VERSION_ID >= 70400) { - $includes[] = __DIR__ . '/php-74.neon'; -} - if (PHP_VERSION_ID >= 80000) { $includes[] = __DIR__ . '/php-80.neon'; } diff --git a/phpstan/php-74.neon b/phpstan/php-74.neon deleted file mode 100644 index 5a413315..00000000 --- a/phpstan/php-74.neon +++ /dev/null @@ -1,6 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Strict comparison using === between non\\-empty\\-array\\ and false will always evaluate to false\\.$#" - count: 1 - path: ../src/Prometheus/Storage/RedisNg.php diff --git a/src/Prometheus/Storage/APCng.php b/src/Prometheus/Storage/APCng.php index b37cffb9..68454b11 100644 --- a/src/Prometheus/Storage/APCng.php +++ b/src/Prometheus/Storage/APCng.php @@ -438,11 +438,10 @@ private function buildPermutationTree(array $labelValues): \Generator /** @phpst if (count($labelValues) > 0) { $lastIndex = array_key_last($labelValues); $currentValue = array_pop($labelValues); - if ($currentValue != null) { - foreach ($this->buildPermutationTree($labelValues) as $prefix) { - foreach ($currentValue as $value) { - yield $prefix + [$lastIndex => $value]; - } + + foreach ($this->buildPermutationTree($labelValues) as $prefix) { + foreach ($currentValue as $value) { + yield $prefix + [$lastIndex => $value]; } } } else { diff --git a/src/Prometheus/Storage/PDO.php b/src/Prometheus/Storage/PDO.php index 80b6ec5e..9d97e2fc 100644 --- a/src/Prometheus/Storage/PDO.php +++ b/src/Prometheus/Storage/PDO.php @@ -597,7 +597,7 @@ protected function createTables(): void $this->database->query($sql); - $hash_size = $driver == 'sqlite' ? 32 : 64; + $hash_size = $driver === 'sqlite' ? 32 : 64; switch ($driver) { case 'pgsql': @@ -627,7 +627,7 @@ protected function createTables(): void $this->database->query($sql); - $timestamp_type = $driver == 'sqlite' ? 'timestamp' : 'int'; + $timestamp_type = $driver === 'sqlite' ? 'timestamp' : 'int'; $sqlIndex = null; switch ($driver) { diff --git a/src/Prometheus/Storage/Redis.php b/src/Prometheus/Storage/Redis.php index 730fac87..0ae1a971 100644 --- a/src/Prometheus/Storage/Redis.php +++ b/src/Prometheus/Storage/Redis.php @@ -429,7 +429,7 @@ private function collectHistograms(): array $allLabelValues = []; foreach (array_keys($raw) as $k) { $d = json_decode($k, true); - if ($d['b'] == 'sum') { + if ($d['b'] === 'sum') { continue; } $allLabelValues[] = $d['labelValues']; diff --git a/src/Prometheus/Storage/RedisNg.php b/src/Prometheus/Storage/RedisNg.php index a5bfc362..807ed6d0 100644 --- a/src/Prometheus/Storage/RedisNg.php +++ b/src/Prometheus/Storage/RedisNg.php @@ -428,7 +428,7 @@ private function collectHistograms(): array $allLabelValues = []; foreach (array_keys($raw) as $k) { $d = json_decode($k, true); - if ($d['b'] == 'sum') { + if ($d['b'] === 'sum') { continue; } $allLabelValues[] = $d['labelValues']; @@ -534,9 +534,6 @@ private function collectSummaries(): array $samples = []; foreach ($values as $valueKey) { $rawValue = explode(":", $valueKey); - if ($rawValue === false) { - continue; - } $encodedLabelValues = $rawValue[2]; $decodedLabelValues = $this->decodeLabelValues($encodedLabelValues); diff --git a/tests/Test/Prometheus/APC/CollectorRegistryTest.php b/tests/Test/Prometheus/APC/CollectorRegistryTest.php index 41d17ca6..8b62eb51 100644 --- a/tests/Test/Prometheus/APC/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/APC/CollectorRegistryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\APC; use Prometheus\Storage\APC; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; /** * @requires extension apcu */ -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APC/CounterTest.php b/tests/Test/Prometheus/APC/CounterTest.php index cd86ac82..86cb5684 100644 --- a/tests/Test/Prometheus/APC/CounterTest.php +++ b/tests/Test/Prometheus/APC/CounterTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APC; use Prometheus\Storage\APC; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APC/GaugeTest.php b/tests/Test/Prometheus/APC/GaugeTest.php index 0d839cfe..d27d134a 100644 --- a/tests/Test/Prometheus/APC/GaugeTest.php +++ b/tests/Test/Prometheus/APC/GaugeTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APC; use Prometheus\Storage\APC; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APC/HistogramTest.php b/tests/Test/Prometheus/APC/HistogramTest.php index d4d2eed7..b81a98bd 100644 --- a/tests/Test/Prometheus/APC/HistogramTest.php +++ b/tests/Test/Prometheus/APC/HistogramTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APC; use Prometheus\Storage\APC; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APC/SummaryTest.php b/tests/Test/Prometheus/APC/SummaryTest.php index 941efc5c..213792bd 100644 --- a/tests/Test/Prometheus/APC/SummaryTest.php +++ b/tests/Test/Prometheus/APC/SummaryTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APC; use Prometheus\Storage\APC; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APCng/CollectorRegistryTest.php b/tests/Test/Prometheus/APCng/CollectorRegistryTest.php index 3fef1e8c..1e61b91e 100644 --- a/tests/Test/Prometheus/APCng/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/APCng/CollectorRegistryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\APCng; use Prometheus\Storage\APCng; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; /** * @requires extension apcu */ -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APCng/CounterTest.php b/tests/Test/Prometheus/APCng/CounterTest.php index a190a16a..ff9b253f 100644 --- a/tests/Test/Prometheus/APCng/CounterTest.php +++ b/tests/Test/Prometheus/APCng/CounterTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APCng; use Prometheus\Storage\APCng; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APCng/GaugeTest.php b/tests/Test/Prometheus/APCng/GaugeTest.php index 43c312d9..1c53b3b7 100644 --- a/tests/Test/Prometheus/APCng/GaugeTest.php +++ b/tests/Test/Prometheus/APCng/GaugeTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APCng; use Prometheus\Storage\APCng; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APCng/HistogramTest.php b/tests/Test/Prometheus/APCng/HistogramTest.php index 7102130c..5b9b77d5 100644 --- a/tests/Test/Prometheus/APCng/HistogramTest.php +++ b/tests/Test/Prometheus/APCng/HistogramTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APCng; use Prometheus\Storage\APCng; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/APCng/SummaryTest.php b/tests/Test/Prometheus/APCng/SummaryTest.php index 0a92a5f2..73b3a80c 100644 --- a/tests/Test/Prometheus/APCng/SummaryTest.php +++ b/tests/Test/Prometheus/APCng/SummaryTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\APCng; use Prometheus\Storage\APCng; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension apcu */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/AbstractCollectorRegistryTest.php b/tests/Test/Prometheus/AbstractCollectorRegistryTestCase.php similarity index 99% rename from tests/Test/Prometheus/AbstractCollectorRegistryTest.php rename to tests/Test/Prometheus/AbstractCollectorRegistryTestCase.php index 93c14356..23eb8d82 100644 --- a/tests/Test/Prometheus/AbstractCollectorRegistryTest.php +++ b/tests/Test/Prometheus/AbstractCollectorRegistryTestCase.php @@ -11,7 +11,7 @@ use Prometheus\Exception\MetricsRegistrationException; use Prometheus\Exception\MetricNotFoundException; -abstract class AbstractCollectorRegistryTest extends TestCase +abstract class AbstractCollectorRegistryTestCase extends TestCase { /** * @var Adapter diff --git a/tests/Test/Prometheus/AbstractCounterTest.php b/tests/Test/Prometheus/AbstractCounterTestCase.php similarity index 99% rename from tests/Test/Prometheus/AbstractCounterTest.php rename to tests/Test/Prometheus/AbstractCounterTestCase.php index 880b825f..4bc3db04 100644 --- a/tests/Test/Prometheus/AbstractCounterTest.php +++ b/tests/Test/Prometheus/AbstractCounterTestCase.php @@ -14,7 +14,7 @@ /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -abstract class AbstractCounterTest extends TestCase +abstract class AbstractCounterTestCase extends TestCase { /** * @var Adapter diff --git a/tests/Test/Prometheus/AbstractGaugeTest.php b/tests/Test/Prometheus/AbstractGaugeTestCase.php similarity index 99% rename from tests/Test/Prometheus/AbstractGaugeTest.php rename to tests/Test/Prometheus/AbstractGaugeTestCase.php index 1e312729..4faeea58 100644 --- a/tests/Test/Prometheus/AbstractGaugeTest.php +++ b/tests/Test/Prometheus/AbstractGaugeTestCase.php @@ -14,7 +14,7 @@ /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -abstract class AbstractGaugeTest extends TestCase +abstract class AbstractGaugeTestCase extends TestCase { /** * @var Adapter diff --git a/tests/Test/Prometheus/AbstractHistogramTest.php b/tests/Test/Prometheus/AbstractHistogramTestCase.php similarity index 99% rename from tests/Test/Prometheus/AbstractHistogramTest.php rename to tests/Test/Prometheus/AbstractHistogramTestCase.php index b68084f1..9275919a 100644 --- a/tests/Test/Prometheus/AbstractHistogramTest.php +++ b/tests/Test/Prometheus/AbstractHistogramTestCase.php @@ -15,7 +15,7 @@ /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -abstract class AbstractHistogramTest extends TestCase +abstract class AbstractHistogramTestCase extends TestCase { use AlmostIdenticalFloatArraysAssertionTrait; diff --git a/tests/Test/Prometheus/AbstractSummaryTest.php b/tests/Test/Prometheus/AbstractSummaryTestCase.php similarity index 99% rename from tests/Test/Prometheus/AbstractSummaryTest.php rename to tests/Test/Prometheus/AbstractSummaryTestCase.php index 2cd0baa2..e66fbc00 100644 --- a/tests/Test/Prometheus/AbstractSummaryTest.php +++ b/tests/Test/Prometheus/AbstractSummaryTestCase.php @@ -15,7 +15,7 @@ /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -abstract class AbstractSummaryTest extends TestCase +abstract class AbstractSummaryTestCase extends TestCase { use AlmostIdenticalFloatArraysAssertionTrait; diff --git a/tests/Test/Prometheus/InMemory/CollectorRegistryTest.php b/tests/Test/Prometheus/InMemory/CollectorRegistryTest.php index 27377e3c..f1ed63d1 100644 --- a/tests/Test/Prometheus/InMemory/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/InMemory/CollectorRegistryTest.php @@ -5,9 +5,9 @@ namespace Test\Prometheus\InMemory; use Prometheus\Storage\InMemory; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/InMemory/CounterTest.php b/tests/Test/Prometheus/InMemory/CounterTest.php index 544950c0..e873236c 100644 --- a/tests/Test/Prometheus/InMemory/CounterTest.php +++ b/tests/Test/Prometheus/InMemory/CounterTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\InMemory; use Prometheus\Storage\InMemory; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/InMemory/GaugeTest.php b/tests/Test/Prometheus/InMemory/GaugeTest.php index 0e74ca7a..fcd19337 100644 --- a/tests/Test/Prometheus/InMemory/GaugeTest.php +++ b/tests/Test/Prometheus/InMemory/GaugeTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\InMemory; use Prometheus\Storage\InMemory; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/InMemory/HistogramTest.php b/tests/Test/Prometheus/InMemory/HistogramTest.php index 1a8057ef..53dc5d1b 100644 --- a/tests/Test/Prometheus/InMemory/HistogramTest.php +++ b/tests/Test/Prometheus/InMemory/HistogramTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\InMemory; use Prometheus\Storage\InMemory; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/InMemory/SummaryTest.php b/tests/Test/Prometheus/InMemory/SummaryTest.php index 1188b810..d3e8da98 100644 --- a/tests/Test/Prometheus/InMemory/SummaryTest.php +++ b/tests/Test/Prometheus/InMemory/SummaryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\InMemory; use Prometheus\Storage\InMemory; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/PDO/CollectorRegistryTest.php b/tests/Test/Prometheus/PDO/CollectorRegistryTest.php index 30fbc64c..bd3b1ebc 100644 --- a/tests/Test/Prometheus/PDO/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/PDO/CollectorRegistryTest.php @@ -5,9 +5,9 @@ namespace Test\Prometheus\PDO; use Prometheus\Storage\PDO; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { use PdoCredentialsTrait; diff --git a/tests/Test/Prometheus/PDO/CounterTest.php b/tests/Test/Prometheus/PDO/CounterTest.php index de15d838..1d8edb7f 100644 --- a/tests/Test/Prometheus/PDO/CounterTest.php +++ b/tests/Test/Prometheus/PDO/CounterTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\PDO; use Prometheus\Storage\PDO; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { use PdoCredentialsTrait; diff --git a/tests/Test/Prometheus/PDO/GaugeTest.php b/tests/Test/Prometheus/PDO/GaugeTest.php index 182ecea9..9c23f80d 100644 --- a/tests/Test/Prometheus/PDO/GaugeTest.php +++ b/tests/Test/Prometheus/PDO/GaugeTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\PDO; use Prometheus\Storage\PDO; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { use PdoCredentialsTrait; diff --git a/tests/Test/Prometheus/PDO/HistogramTest.php b/tests/Test/Prometheus/PDO/HistogramTest.php index 634995ac..01c96675 100644 --- a/tests/Test/Prometheus/PDO/HistogramTest.php +++ b/tests/Test/Prometheus/PDO/HistogramTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\PDO; use Prometheus\Storage\PDO; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { use PdoCredentialsTrait; diff --git a/tests/Test/Prometheus/PDO/SummaryTest.php b/tests/Test/Prometheus/PDO/SummaryTest.php index c3845921..cd5c57ed 100644 --- a/tests/Test/Prometheus/PDO/SummaryTest.php +++ b/tests/Test/Prometheus/PDO/SummaryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\PDO; use Prometheus\Storage\PDO; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { use PdoCredentialsTrait; diff --git a/tests/Test/Prometheus/Redis/CollectorRegistryTest.php b/tests/Test/Prometheus/Redis/CollectorRegistryTest.php index e0c661f2..ab101d8e 100644 --- a/tests/Test/Prometheus/Redis/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/Redis/CollectorRegistryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; /** * @requires extension redis */ -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/CounterTest.php b/tests/Test/Prometheus/Redis/CounterTest.php index df0c2b43..95341c4d 100644 --- a/tests/Test/Prometheus/Redis/CounterTest.php +++ b/tests/Test/Prometheus/Redis/CounterTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/CounterWithPrefixTest.php b/tests/Test/Prometheus/Redis/CounterWithPrefixTest.php index ab1ab55d..a72bf2dc 100644 --- a/tests/Test/Prometheus/Redis/CounterWithPrefixTest.php +++ b/tests/Test/Prometheus/Redis/CounterWithPrefixTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class CounterWithPrefixTest extends AbstractCounterTest +class CounterWithPrefixTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/GaugeTest.php b/tests/Test/Prometheus/Redis/GaugeTest.php index fa53a452..6afc2b35 100644 --- a/tests/Test/Prometheus/Redis/GaugeTest.php +++ b/tests/Test/Prometheus/Redis/GaugeTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/GaugeWithPrefixTest.php b/tests/Test/Prometheus/Redis/GaugeWithPrefixTest.php index 3606e683..c97ad714 100644 --- a/tests/Test/Prometheus/Redis/GaugeWithPrefixTest.php +++ b/tests/Test/Prometheus/Redis/GaugeWithPrefixTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class GaugeWithPrefixTest extends AbstractGaugeTest +class GaugeWithPrefixTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/HistogramTest.php b/tests/Test/Prometheus/Redis/HistogramTest.php index 0b6e61a0..eba728f9 100644 --- a/tests/Test/Prometheus/Redis/HistogramTest.php +++ b/tests/Test/Prometheus/Redis/HistogramTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/HistogramWithPrefixTest.php b/tests/Test/Prometheus/Redis/HistogramWithPrefixTest.php index 042ac63f..f6d88fde 100644 --- a/tests/Test/Prometheus/Redis/HistogramWithPrefixTest.php +++ b/tests/Test/Prometheus/Redis/HistogramWithPrefixTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class HistogramWithPrefixTest extends AbstractHistogramTest +class HistogramWithPrefixTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/SummaryTest.php b/tests/Test/Prometheus/Redis/SummaryTest.php index d6b0c596..c4b550f1 100644 --- a/tests/Test/Prometheus/Redis/SummaryTest.php +++ b/tests/Test/Prometheus/Redis/SummaryTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/Redis/SummaryWithPrefixTest.php b/tests/Test/Prometheus/Redis/SummaryWithPrefixTest.php index 3fd91fa6..2b981985 100644 --- a/tests/Test/Prometheus/Redis/SummaryWithPrefixTest.php +++ b/tests/Test/Prometheus/Redis/SummaryWithPrefixTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\Redis; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class SummaryWithPrefixTest extends AbstractSummaryTest +class SummaryWithPrefixTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/CollectorRegistryTest.php b/tests/Test/Prometheus/RedisNg/CollectorRegistryTest.php index f164731d..94dd0ee4 100644 --- a/tests/Test/Prometheus/RedisNg/CollectorRegistryTest.php +++ b/tests/Test/Prometheus/RedisNg/CollectorRegistryTest.php @@ -5,12 +5,12 @@ namespace Test\Prometheus\RedisNg; use Prometheus\Storage\Redis; -use Test\Prometheus\AbstractCollectorRegistryTest; +use Test\Prometheus\AbstractCollectorRegistryTestCase; /** * @requires extension redis */ -class CollectorRegistryTest extends AbstractCollectorRegistryTest +class CollectorRegistryTest extends AbstractCollectorRegistryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/CounterTest.php b/tests/Test/Prometheus/RedisNg/CounterTest.php index b497a8fd..9ec2c935 100644 --- a/tests/Test/Prometheus/RedisNg/CounterTest.php +++ b/tests/Test/Prometheus/RedisNg/CounterTest.php @@ -5,13 +5,13 @@ namespace Test\Prometheus\RedisNg; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class CounterTest extends AbstractCounterTest +class CounterTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/CounterWithPrefixTest.php b/tests/Test/Prometheus/RedisNg/CounterWithPrefixTest.php index a28c1222..131f15db 100644 --- a/tests/Test/Prometheus/RedisNg/CounterWithPrefixTest.php +++ b/tests/Test/Prometheus/RedisNg/CounterWithPrefixTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractCounterTest; +use Test\Prometheus\AbstractCounterTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class CounterWithPrefixTest extends AbstractCounterTest +class CounterWithPrefixTest extends AbstractCounterTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/GaugeTest.php b/tests/Test/Prometheus/RedisNg/GaugeTest.php index cc1f5ca5..37b3d0db 100644 --- a/tests/Test/Prometheus/RedisNg/GaugeTest.php +++ b/tests/Test/Prometheus/RedisNg/GaugeTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class GaugeTest extends AbstractGaugeTest +class GaugeTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/GaugeWithPrefixTest.php b/tests/Test/Prometheus/RedisNg/GaugeWithPrefixTest.php index 0b9cf5a0..0df11146 100644 --- a/tests/Test/Prometheus/RedisNg/GaugeWithPrefixTest.php +++ b/tests/Test/Prometheus/RedisNg/GaugeWithPrefixTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractGaugeTest; +use Test\Prometheus\AbstractGaugeTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class GaugeWithPrefixTest extends AbstractGaugeTest +class GaugeWithPrefixTest extends AbstractGaugeTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/HistogramTest.php b/tests/Test/Prometheus/RedisNg/HistogramTest.php index 1ea1e83a..f30c5af4 100644 --- a/tests/Test/Prometheus/RedisNg/HistogramTest.php +++ b/tests/Test/Prometheus/RedisNg/HistogramTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class HistogramTest extends AbstractHistogramTest +class HistogramTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/HistogramWithPrefixTest.php b/tests/Test/Prometheus/RedisNg/HistogramWithPrefixTest.php index 04cae294..7bfdbf9f 100644 --- a/tests/Test/Prometheus/RedisNg/HistogramWithPrefixTest.php +++ b/tests/Test/Prometheus/RedisNg/HistogramWithPrefixTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractHistogramTest; +use Test\Prometheus\AbstractHistogramTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class HistogramWithPrefixTest extends AbstractHistogramTest +class HistogramWithPrefixTest extends AbstractHistogramTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/SummaryTest.php b/tests/Test/Prometheus/RedisNg/SummaryTest.php index ec5912b4..e3448b36 100644 --- a/tests/Test/Prometheus/RedisNg/SummaryTest.php +++ b/tests/Test/Prometheus/RedisNg/SummaryTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class SummaryTest extends AbstractSummaryTest +class SummaryTest extends AbstractSummaryTestCase { public function configureAdapter(): void { diff --git a/tests/Test/Prometheus/RedisNg/SummaryWithPrefixTest.php b/tests/Test/Prometheus/RedisNg/SummaryWithPrefixTest.php index d96e45e5..7aeb41b3 100644 --- a/tests/Test/Prometheus/RedisNg/SummaryWithPrefixTest.php +++ b/tests/Test/Prometheus/RedisNg/SummaryWithPrefixTest.php @@ -6,13 +6,13 @@ use Prometheus\Storage\Redis; use Prometheus\Storage\RedisNg; -use Test\Prometheus\AbstractSummaryTest; +use Test\Prometheus\AbstractSummaryTestCase; /** * See https://prometheus.io/docs/instrumenting/exposition_formats/ * @requires extension redis */ -class SummaryWithPrefixTest extends AbstractSummaryTest +class SummaryWithPrefixTest extends AbstractSummaryTestCase { public function configureAdapter(): void {