From bd822ce7ea7e061567ed7482abe01e8c64b5521f Mon Sep 17 00:00:00 2001 From: Cees-Jan Kiewiet Date: Tue, 9 Apr 2024 13:52:05 +0200 Subject: [PATCH] Switch to eventsaus hydrator --- composer.json | 2 +- composer.lock | 2450 ++++++++++++++++++------------ etc/qa/phpunit.xml | 22 +- src/Attribute/Clause.php | 2 +- src/Attribute/InnerJoin.php | 4 +- src/Attribute/LeftJoin.php | 4 +- src/Client.php | 12 +- src/Configuration.php | 12 +- src/Entity/Join.php | 46 +- src/EntityInspector.php | 14 +- src/Hydrator.php | 88 +- src/InspectedEntityInterface.php | 5 +- src/Query/Where/Expression.php | 11 +- src/Query/Where/Field.php | 9 +- src/Repository.php | 18 +- tests/HydratorTest.php | 70 +- tests/RepositoryTest.php | 81 +- tests/Stub/BlogPostStub.php | 130 +- tests/Stub/CommentStub.php | 45 +- tests/Stub/UserStub.php | 27 +- 20 files changed, 1712 insertions(+), 1340 deletions(-) diff --git a/composer.json b/composer.json index a4815cc..14ff3c6 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "robmorgan/phinx": "^0.12.11", "symfony/yaml": "^5.4", "vlucas/phpdotenv": "^5.4", - "wyrihaximus/async-test-utilities": "^7.2" + "wyrihaximus/async-test-utilities": "^8.0.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 5103505..726e837 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b0e4380c260781edb515dd2a75f903d0", + "content-hash": "24b5609e8b15e1712ccc5ea19220f35b", "packages": [ { "name": "brick/math", @@ -1795,16 +1795,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -1816,8 +1816,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -1872,7 +1872,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -1880,7 +1880,7 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", @@ -1961,16 +1961,16 @@ }, { "name": "azjezz/psl", - "version": "2.9.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/azjezz/psl.git", - "reference": "a8685b297644f3898c986e89b15309d31b1f47bf" + "reference": "1ade4f1a99fe07a8e06f8dee596609aa07585422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/azjezz/psl/zipball/a8685b297644f3898c986e89b15309d31b1f47bf", - "reference": "a8685b297644f3898c986e89b15309d31b1f47bf", + "url": "https://api.github.com/repos/azjezz/psl/zipball/1ade4f1a99fe07a8e06f8dee596609aa07585422", + "reference": "1ade4f1a99fe07a8e06f8dee596609aa07585422", "shasum": "" }, "require": { @@ -2023,7 +2023,7 @@ "description": "PHP Standard Library", "support": { "issues": "https://github.com/azjezz/psl/issues", - "source": "https://github.com/azjezz/psl/tree/2.9.0" + "source": "https://github.com/azjezz/psl/tree/2.9.1" }, "funding": [ { @@ -2031,7 +2031,7 @@ "type": "github" } ], - "time": "2023-12-29T10:23:32+00:00" + "time": "2024-04-05T05:18:37+00:00" }, { "name": "beberlei/assert", @@ -2100,6 +2100,53 @@ }, "time": "2021-12-16T21:41:27+00:00" }, + { + "name": "brandembassy/mockery-tools", + "version": "4.1.3", + "source": { + "type": "git", + "url": "https://github.com/BrandEmbassy/mockery-tools.git", + "reference": "de93d61feb9ccc20f91206469f8bc58bf8c8ebd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/BrandEmbassy/mockery-tools/zipball/de93d61feb9ccc20f91206469f8bc58bf8c8ebd4", + "reference": "de93d61feb9ccc20f91206469f8bc58bf8c8ebd4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/guzzle": "^6.3 || ^7.0", + "marc-mabe/php-enum": "^3.0 || ^4.0", + "mockery/mockery": "^1.6.7", + "nette/di": "^2.4 || ^3.0", + "nette/utils": "^2.4 || ^3.0", + "php": "^8.1", + "phpunit/phpunit": "^9.6 || ^10.5", + "ramsey/uuid": "^3.0 || ^4.0", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1" + }, + "require-dev": { + "brandembassy/coding-standard": "^11.1", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "autoload": { + "psr-4": { + "BrandEmbassy\\MockeryTools\\": "src/MockeryTools" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "proprietary" + ], + "support": { + "issues": "https://github.com/BrandEmbassy/mockery-tools/issues", + "source": "https://github.com/BrandEmbassy/mockery-tools/tree/4.1.3" + }, + "time": "2024-02-28T13:26:35+00:00" + }, { "name": "cakephp/core", "version": "4.5.4", @@ -3107,16 +3154,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -3127,7 +3174,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -3151,9 +3198,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -3169,7 +3216,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -3342,76 +3389,6 @@ }, "time": "2023-04-24T17:43:28+00:00" }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, { "name": "ergebnis/composer-normalize", "version": "2.42.0", @@ -3893,6 +3870,73 @@ }, "time": "2024-02-07T17:49:28+00:00" }, + { + "name": "ergebnis/phpunit-slow-test-detector", + "version": "2.14.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/phpunit-slow-test-detector.git", + "reference": "9138b0ebffdd2c579eb4b0567ef3bef8c714fdc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/phpunit-slow-test-detector/zipball/9138b0ebffdd2c579eb4b0567ef3bef8c714fdc2", + "reference": "9138b0ebffdd2c579eb4b0567ef3bef8c714fdc2", + "shasum": "" + }, + "require": { + "php": "~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "phpunit/phpunit": "^6.5.0 || ^7.5.0 || ^8.5.19 || ^9.0.0 || ^10.0.0 || ^11.0.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.42.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.25.1", + "fakerphp/faker": "~1.20.0", + "psalm/plugin-phpunit": "~0.19.0", + "psr/container": "~1.0.0", + "rector/rector": "^1.0.4", + "vimeo/psalm": "^5.23.1" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\PHPUnit\\SlowTestDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Mรถller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides facilities for detecting slow tests in phpunit/phpunit.", + "homepage": "https://github.com/ergebnis/phpunit-slow-test-detector", + "keywords": [ + "detector", + "extension", + "phpunit", + "slow", + "test" + ], + "support": { + "issues": "https://github.com/ergebnis/phpunit-slow-test-detector/issues", + "security": "https://github.com/ergebnis/phpunit-slow-test-detector/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/phpunit-slow-test-detector" + }, + "time": "2024-04-08T06:35:34+00:00" + }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", @@ -4513,6 +4557,57 @@ ], "time": "2023-12-03T20:05:35+00:00" }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, { "name": "icanhazstring/composer-unused", "version": "0.8.11", @@ -4921,111 +5016,6 @@ ], "time": "2024-02-20T00:08:52+00:00" }, - { - "name": "jakobbuis/simple-slow-test-reporter", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/jakobbuis/simple-slow-test-reporter.git", - "reference": "7111cb24f4670ca455f5578710022311f78ef1c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jakobbuis/simple-slow-test-reporter/zipball/7111cb24f4670ca455f5578710022311f78ef1c4", - "reference": "7111cb24f4670ca455f5578710022311f78ef1c4", - "shasum": "" - }, - "require": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "SSTR\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakob Buis", - "email": "jakob@jakobbuis.nl" - } - ], - "description": "Reports slow tests in your PHPUnit testsuite", - "support": { - "issues": "https://github.com/jakobbuis/simple-slow-test-reporter/issues", - "source": "https://github.com/jakobbuis/simple-slow-test-reporter/tree/v1.0.0" - }, - "time": "2020-12-26T16:20:53+00:00" - }, - { - "name": "jangregor/phpstan-prophecy", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/Jan0707/phpstan-prophecy.git", - "reference": "2bc7ca9460395690c6bf7332bdfb2f25d5cae8e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jan0707/phpstan-prophecy/zipball/2bc7ca9460395690c6bf7332bdfb2f25d5cae8e0", - "reference": "2bc7ca9460395690c6bf7332bdfb2f25d5cae8e0", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^1.0.0" - }, - "conflict": { - "phpspec/prophecy": "<1.7.0,>=2.0.0", - "phpunit/phpunit": "<6.0.0,>=10.0.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.1.1", - "ergebnis/license": "^1.0.0", - "ergebnis/php-cs-fixer-config": "~2.2.0", - "phpspec/prophecy": "^1.7.0", - "phpunit/phpunit": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "JanGregor\\Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Gregor Emge-Triebel", - "email": "jan@jangregor.me" - } - ], - "description": "Provides a phpstan/phpstan extension for phpspec/prophecy", - "support": { - "issues": "https://github.com/Jan0707/phpstan-prophecy/issues", - "source": "https://github.com/Jan0707/phpstan-prophecy/tree/1.0.0" - }, - "funding": [ - { - "url": "https://github.com/localheinz", - "type": "github" - } - ], - "time": "2021-11-08T16:37:47+00:00" - }, { "name": "justinrainbow/json-schema", "version": "v5.2.13", @@ -5158,22 +5148,22 @@ }, { "name": "maglnet/composer-require-checker", - "version": "4.10.0", + "version": "4.11.0", "source": { "type": "git", "url": "https://github.com/maglnet/ComposerRequireChecker.git", - "reference": "36a4625dfabba4da1f053a93d3f13caf5eead543" + "reference": "c6c555e799bee50810fd84933ca1f0b276379ccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/36a4625dfabba4da1f053a93d3f13caf5eead543", - "reference": "36a4625dfabba4da1f053a93d3f13caf5eead543", + "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/c6c555e799bee50810fd84933ca1f0b276379ccf", + "reference": "c6c555e799bee50810fd84933ca1f0b276379ccf", "shasum": "" }, "require": { "composer-runtime-api": "^2.0.0", "ext-phar": "*", - "nikic/php-parser": "^4.18.0", + "nikic/php-parser": "^4.19.1", "php": "~8.2.0 || ~8.3.0", "symfony/console": "^6.4.1 || ^7.0.1", "webmozart/assert": "^1.11.0", @@ -5183,12 +5173,12 @@ "doctrine/coding-standard": "^12.0.0", "ext-zend-opcache": "*", "phing/phing": "^2.17.4", - "phpstan/phpstan": "^1.10.60", - "phpunit/phpunit": "^10.5.11", - "psalm/plugin-phpunit": "^0.18.4", - "roave/infection-static-analysis-plugin": "^1.34.0", + "phpstan/phpstan": "^1.10.66", + "phpunit/phpunit": "^10.5.16", + "psalm/plugin-phpunit": "^0.19.0", + "roave/infection-static-analysis-plugin": "^1.35.0", "spatie/temporary-directory": "^2.2.1", - "vimeo/psalm": "^5.22.2" + "vimeo/psalm": "^5.23.1" }, "bin": [ "bin/composer-require-checker" @@ -5233,39 +5223,195 @@ ], "support": { "issues": "https://github.com/maglnet/ComposerRequireChecker/issues", - "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.10.0" + "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.11.0" }, - "time": "2024-03-08T14:34:41+00:00" + "time": "2024-04-01T20:24:52+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.11.1", + "name": "marc-mabe/php-enum", + "version": "v4.7.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "url": "https://github.com/marc-mabe/php-enum.git", + "reference": "3da42cc1daceaf98c858e56f59d1ccd52b011fdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/3da42cc1daceaf98c858e56f59d1ccd52b011fdc", + "reference": "3da42cc1daceaf98c858e56f59d1ccd52b011fdc", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "ext-reflection": "*", + "php": "^7.1 | ^8.0" }, "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "phpbench/phpbench": "^0.16.10 || ^1.0.4", + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.6-dev", + "dev-3.x": "3.2-dev" + } + }, "autoload": { - "files": [ + "psr-4": { + "MabeEnum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Marc Bennewitz", + "email": "dev@mabe.berlin", + "homepage": "https://mabe.berlin/", + "role": "Lead" + } + ], + "description": "Simple and fast implementation of enumerations with native PHP", + "homepage": "https://github.com/marc-mabe/php-enum", + "keywords": [ + "enum", + "enum-map", + "enum-set", + "enumeration", + "enumerator", + "enummap", + "enumset", + "map", + "set", + "type", + "type-hint", + "typehint" + ], + "support": { + "issues": "https://github.com/marc-mabe/php-enum/issues", + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.0" + }, + "time": "2022-04-19T02:21:46+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.11", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "81a161d0b135df89951abd52296adf97deb0723d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pรกdraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-03-21T18:34:15+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "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", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ "src/DeepCopy/deep_copy.php" ], "psr-4": { @@ -5329,23 +5475,514 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0" + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" + }, + "time": "2024-01-31T06:18:54+00:00" + }, + { + "name": "nette/di", + "version": "v3.1.10", + "source": { + "type": "git", + "url": "https://github.com/nette/di.git", + "reference": "2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/di/zipball/2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284", + "reference": "2645ec3eaa17fa2ab87c5eb4eaacb1fe6dd28284", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/neon": "^3.3 || ^4.0", + "nette/php-generator": "^3.5.4 || ^4.0", + "nette/robot-loader": "^3.2 || ~4.0.0", + "nette/schema": "^1.2.5", + "nette/utils": "^3.2.5 || ~4.0.0", + "php": "7.2 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿ’Ž Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP features.", + "homepage": "https://nette.org", + "keywords": [ + "compiled", + "di", + "dic", + "factory", + "ioc", + "nette", + "static" + ], + "support": { + "issues": "https://github.com/nette/di/issues", + "source": "https://github.com/nette/di/tree/v3.1.10" + }, + "time": "2024-02-06T01:19:44+00:00" + }, + { + "name": "nette/finder", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "991aefb42860abeab8e003970c3809a9d83cb932" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/991aefb42860abeab8e003970c3809a9d83cb932", + "reference": "991aefb42860abeab8e003970c3809a9d83cb932", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ^3.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿ” Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "support": { + "issues": "https://github.com/nette/finder/issues", + "source": "https://github.com/nette/finder/tree/v2.6.0" + }, + "time": "2022-10-13T01:31:15+00:00" + }, + { + "name": "nette/neon", + "version": "v3.4.1", + "source": { + "type": "git", + "url": "https://github.com/nette/neon.git", + "reference": "457bfbf0560f600b30d9df4233af382a478bb44d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/neon/zipball/457bfbf0560f600b30d9df4233af382a478bb44d", + "reference": "457bfbf0560f600b30d9df4233af382a478bb44d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "8.0 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.7" + }, + "bin": [ + "bin/neon-lint" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿธ Nette NEON: encodes and decodes NEON file format.", + "homepage": "https://ne-on.org", + "keywords": [ + "export", + "import", + "neon", + "nette", + "yaml" + ], + "support": { + "issues": "https://github.com/nette/neon/issues", + "source": "https://github.com/nette/neon/tree/v3.4.1" + }, + "time": "2023-09-27T08:59:11+00:00" + }, + { + "name": "nette/php-generator", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "b135071d8da108445e4df2fc6a75522b23c0237d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/b135071d8da108445e4df2fc6a75522b23c0237d", + "reference": "b135071d8da108445e4df2fc6a75522b23c0237d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2.9 || ^4.0", + "php": "8.0 - 8.3" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "nikic/php-parser": "^4.18 || ^5.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.8" + }, + "suggest": { + "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿ˜ Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "support": { + "issues": "https://github.com/nette/php-generator/issues", + "source": "https://github.com/nette/php-generator/tree/v4.1.4" + }, + "time": "2024-03-07T23:06:26+00:00" + }, + { + "name": "nette/robot-loader", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/nette/robot-loader.git", + "reference": "970c8f82be98ec54180c88a468cd2b057855d993" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/970c8f82be98ec54180c88a468cd2b057855d993", + "reference": "970c8f82be98ec54180c88a468cd2b057855d993", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/finder": "^2.5 || ^3.0", + "nette/utils": "^3.0", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿ€ Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", + "homepage": "https://nette.org", + "keywords": [ + "autoload", + "class", + "interface", + "nette", + "trait" + ], + "support": { + "issues": "https://github.com/nette/robot-loader/issues", + "source": "https://github.com/nette/robot-loader/tree/v3.4.2" + }, + "time": "2022-12-14T15:41:06+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "๐Ÿ“ Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.5" + }, + "time": "2023-10-05T20:37:59+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.10", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.4" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Map nested JSON structures onto PHP classes", + "description": "๐Ÿ›  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.10" }, - "time": "2024-01-31T06:18:54+00:00" + "time": "2023-07-30T15:38:18+00:00" }, { "name": "nikolaposa/version", @@ -5732,25 +6369,25 @@ }, { "name": "orklah/psalm-insane-comparison", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/orklah/psalm-insane-comparison.git", - "reference": "f0e44bf31678d189c8ee4556598d0ad6e3f853c9" + "reference": "d9e608e787e5ae1c994ae07095eea26029d6d0bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orklah/psalm-insane-comparison/zipball/f0e44bf31678d189c8ee4556598d0ad6e3f853c9", - "reference": "f0e44bf31678d189c8ee4556598d0ad6e3f853c9", + "url": "https://api.github.com/repos/orklah/psalm-insane-comparison/zipball/d9e608e787e5ae1c994ae07095eea26029d6d0bd", + "reference": "d9e608e787e5ae1c994ae07095eea26029d6d0bd", "shasum": "" }, "require": { "ext-simplexml": "*", - "php": "^7.3|^8.0" + "php": "^7.3|^8.0", + "vimeo/psalm": "^4|^5|dev-master" }, "require-dev": { - "nikic/php-parser": "^4.0", - "vimeo/psalm": "^4.0|^5" + "nikic/php-parser": "^4.0|^5" }, "type": "psalm-plugin", "extra": { @@ -5780,66 +6417,9 @@ "description": "Detects possible insane comparison (\"string\" == 0) to help migrate to PHP8", "support": { "issues": "https://github.com/orklah/psalm-insane-comparison/issues", - "source": "https://github.com/orklah/psalm-insane-comparison/tree/v2.2.0" - }, - "time": "2023-01-06T09:06:11+00:00" - }, - { - "name": "pepakriz/phpstan-exception-rules", - "version": "v0.12.0", - "source": { - "type": "git", - "url": "https://github.com/pepakriz/phpstan-exception-rules.git", - "reference": "c5f3fe501e5a6c57c33fb678ad9278131bc1b9bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pepakriz/phpstan-exception-rules/zipball/c5f3fe501e5a6c57c33fb678ad9278131bc1b9bd", - "reference": "c5f3fe501e5a6c57c33fb678ad9278131bc1b9bd", - "shasum": "" + "source": "https://github.com/orklah/psalm-insane-comparison/tree/v2.3.0" }, - "require": { - "nikic/php-parser": "^4.13", - "php": ">=7.1", - "phpstan/phpstan": "^1.0" - }, - "require-dev": { - "nette/utils": "^3.0", - "php-parallel-lint/php-console-highlighter": "^0.4.0", - "php-parallel-lint/php-parallel-lint": "^1.2.0", - "phpstan/phpstan-nette": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^7.5.6 || ^9.4.2", - "slevomat/coding-standard": "^6.4.1", - "squizlabs/php_codesniffer": "~3.5.2" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Pepakriz\\PHPStanExceptionRules\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Exception rules for PHPStan", - "support": { - "issues": "https://github.com/pepakriz/phpstan-exception-rules/issues", - "source": "https://github.com/pepakriz/phpstan-exception-rules/tree/v0.12.0" - }, - "time": "2021-11-07T19:03:56+00:00" + "time": "2024-03-20T21:49:45+00:00" }, { "name": "phar-io/manifest", @@ -6145,16 +6725,16 @@ }, { "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.2", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + "reference": "6db563514f27e19595a19f45a4bf757b6401194e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e", + "reference": "6db563514f27e19595a19f45a4bf757b6401194e", "shasum": "" }, "require": { @@ -6192,13 +6772,17 @@ "email": "ahoj@jakubonderka.cz" } ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "description": "This tool checks the syntax of PHP files about 20x faster than serial check.", "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "keywords": [ + "lint", + "static analysis" + ], "support": { "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.4.0" }, - "time": "2022-02-21T12:50:22+00:00" + "time": "2024-03-27T12:14:49+00:00" }, { "name": "php-standard-library/psalm-plugin", @@ -6497,139 +7081,18 @@ ], "time": "2023-11-12T21:59:55+00:00" }, - { - "name": "phpspec/prophecy", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87", - "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2 || ^2.0", - "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0", - "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "dev", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.19.0" - }, - "time": "2024-02-29T11:52:51+00:00" - }, - { - "name": "phpspec/prophecy-phpunit", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy-phpunit.git", - "reference": "16e1247e139434bce0bac09848bc5c8d882940fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/16e1247e139434bce0bac09848bc5c8d882940fc", - "reference": "16e1247e139434bce0bac09848bc5c8d882940fc", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8", - "phpspec/prophecy": "^1.18", - "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\PhpUnit\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - } - ], - "description": "Integrating the Prophecy mocking library in PHPUnit test cases", - "homepage": "http://phpspec.net", - "keywords": [ - "phpunit", - "prophecy" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy-phpunit/issues", - "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.2.0" - }, - "time": "2024-03-01T08:33:58+00:00" - }, { "name": "phpstan/phpdoc-parser", - "version": "1.26.0", + "version": "1.28.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", - "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", "shasum": "" }, "require": { @@ -6661,22 +7124,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" }, - "time": "2024-02-23T16:05:55+00:00" + "time": "2024-04-03T18:51:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.63", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ad12836d9ca227301f5fb9960979574ed8628339" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad12836d9ca227301f5fb9960979574ed8628339", - "reference": "ad12836d9ca227301f5fb9960979574ed8628339", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -6725,7 +7188,7 @@ "type": "tidelift" } ], - "time": "2024-03-18T16:53:53+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -6825,58 +7288,6 @@ }, "time": "2024-01-10T13:50:05+00:00" }, - { - "name": "phpstan/phpstan-php-parser", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-php-parser.git", - "reference": "1c7670dd92da864b5d019f22d9f512a6ae18b78e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-php-parser/zipball/1c7670dd92da864b5d019f22d9f512a6ae18b78e", - "reference": "1c7670dd92da864b5d019f22d9f512a6ae18b78e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^1.3" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP-Parser extensions for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-php-parser/issues", - "source": "https://github.com/phpstan/phpstan-php-parser/tree/1.1.0" - }, - "abandoned": true, - "time": "2021-12-16T19:43:32+00:00" - }, { "name": "phpstan/phpstan-phpunit", "version": "1.3.16", @@ -6931,21 +7342,21 @@ }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542" + "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/7a50e9662ee9f3942e4aaaf3d603653f60282542", - "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/568210bd301f94a0d4b1e5a0808c374c1b9cf11b", + "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.34" + "phpstan/phpstan": "^1.10.60" }, "require-dev": { "nikic/php-parser": "^4.13.0", @@ -6974,22 +7385,22 @@ "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/1.5.2" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.3" }, - "time": "2023-10-30T14:35:06+00:00" + "time": "2024-04-06T07:43:25+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { @@ -6997,18 +7408,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -7017,7 +7428,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -7046,7 +7457,7 @@ "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.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -7054,32 +7465,32 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7106,7 +7517,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -7114,28 +7526,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -7143,7 +7555,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7169,7 +7581,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -7177,32 +7589,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7228,7 +7640,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -7236,32 +7649,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7287,7 +7700,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -7295,24 +7708,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.17", + "version": "10.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd" + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd", - "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -7322,27 +7734,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "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" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -7350,7 +7761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -7363,63 +7774,120 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "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/10.5.17" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-05T04:39:01+00:00" + }, + { + "name": "psalm/plugin-mockery", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-mockery.git", + "reference": "876247d15f91df08240d00dac69c5135b6689283" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-mockery/zipball/876247d15f91df08240d00dac69c5135b6689283", + "reference": "876247d15f91df08240d00dac69c5135b6689283", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.10", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "mockery/mockery": "^1.0", + "php": "~7.4 || ~8.0 || ~8.1 || ~8.2", + "vimeo/psalm": "dev-master || ^5.0@rc || ^5.0" + }, + "require-dev": { + "codeception/codeception": "^4.1.9", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.3.1", + "weirdan/codeception-psalm-module": "^0.13.1" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\MockeryPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\MockeryPlugin\\": [ + "." + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Matt Brown", + "email": "github@muglug.com" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "Psalm plugin for Mockery", "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.17" + "issues": "https://github.com/psalm/psalm-plugin-mockery/issues", + "source": "https://github.com/psalm/psalm-plugin-mockery/tree/1.1.0" }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-02-23T13:14:51+00:00" + "time": "2022-11-25T07:16:18+00:00" }, { "name": "psalm/plugin-phpunit", - "version": "0.18.4", + "version": "0.19.0", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-phpunit.git", - "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc" + "reference": "e344eaaa27871e79c6cb97b9efe52a735f9d1966" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", - "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e344eaaa27871e79c6cb97b9efe52a735f9d1966", + "reference": "e344eaaa27871e79c6cb97b9efe52a735f9d1966", "shasum": "" }, "require": { "composer/package-versions-deprecated": "^1.10", "composer/semver": "^1.4 || ^2.0 || ^3.0", "ext-simplexml": "*", - "php": "^7.1 || ^8.0", - "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0" + "php": "^7.4 || ^8.0", + "vimeo/psalm": "dev-master || ^5@beta || ^5.0" }, "conflict": { "phpunit/phpunit": "<7.5" @@ -7456,9 +7924,9 @@ "description": "Psalm plugin for PHPUnit", "support": { "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", - "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4" + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.19.0" }, - "time": "2022-12-03T07:47:07+00:00" + "time": "2024-03-15T10:43:15+00:00" }, { "name": "psr/container", @@ -8301,28 +8769,28 @@ }, { "name": "sebastian/cli-parser", - "version": "1.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -8345,7 +8813,8 @@ "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" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -8353,32 +8822,32 @@ "type": "github" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -8401,7 +8870,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -8409,32 +8878,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -8456,7 +8925,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -8464,34 +8933,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8530,7 +9001,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -8538,33 +9010,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -8587,7 +9059,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -8595,33 +9068,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -8653,7 +9126,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -8661,27 +9135,27 @@ "type": "github" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -8689,7 +9163,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -8708,7 +9182,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -8716,7 +9190,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -8724,34 +9199,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -8793,7 +9268,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -8801,38 +9277,35 @@ "type": "github" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.7", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8851,13 +9324,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://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" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -8865,33 +9339,33 @@ "type": "github" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -8914,7 +9388,8 @@ "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" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -8922,34 +9397,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8971,7 +9446,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -8979,32 +9454,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9026,7 +9501,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -9034,32 +9509,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9089,61 +9564,7 @@ "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" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -9151,32 +9572,32 @@ "type": "github" } ], - "time": "2024-03-14T16:00:52+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9199,7 +9620,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -9207,29 +9628,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9252,7 +9673,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -9260,7 +9681,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "seld/jsonlint", @@ -9563,18 +9984,95 @@ ], "time": "2024-02-07T10:39:02+00:00" }, + { + "name": "spatie/phpunit-snapshot-assertions", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/phpunit-snapshot-assertions.git", + "reference": "fe84650c4cfb8f51ecf5146f4089369fafea2c94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/phpunit-snapshot-assertions/zipball/fe84650c4cfb8f51ecf5146f4089369fafea2c94", + "reference": "fe84650c4cfb8f51ecf5146f4089369fafea2c94", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "php": "^8.1", + "phpunit/phpunit": "^10.0|^11.0", + "symfony/property-access": "^5.2|^6.2|^7.0", + "symfony/serializer": "^5.2|^6.2|^7.0", + "symfony/yaml": "^5.2|^6.2|^7.0" + }, + "require-dev": { + "spatie/pixelmatch-php": "dev-main", + "spatie/ray": "^1.37" + }, + "suggest": { + "spatie/pixelmatch-php": "Required to use the image snapshot assertions" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-v5": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Snapshots\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Snapshot testing with PHPUnit", + "homepage": "https://github.com/spatie/phpunit-snapshot-assertions", + "keywords": [ + "assert", + "phpunit", + "phpunit-snapshot-assertions", + "snapshot", + "spatie", + "testing" + ], + "support": { + "issues": "https://github.com/spatie/phpunit-snapshot-assertions/issues", + "source": "https://github.com/spatie/phpunit-snapshot-assertions/tree/5.1.5" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + } + ], + "time": "2024-02-20T10:04:25+00:00" + }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.0", + "version": "3.9.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b" + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/d63cee4890a8afaf86a22e51ad4d97c91dd4579b", - "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", "shasum": "" }, "require": { @@ -9641,20 +10139,20 @@ "type": "open_collective" } ], - "time": "2024-02-16T15:06:51+00:00" + "time": "2024-03-31T21:03:09+00:00" }, { "name": "symfony/config", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047" + "reference": "18ac9da3106222dde9fc9e09ec016e5de9d2658f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6ea4affc27f2086c9d16b92ab5429ce1e3c38047", - "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047", + "url": "https://api.github.com/repos/symfony/config/zipball/18ac9da3106222dde9fc9e09ec016e5de9d2658f", + "reference": "18ac9da3106222dde9fc9e09ec016e5de9d2658f", "shasum": "" }, "require": { @@ -9700,7 +10198,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.4" + "source": "https://github.com/symfony/config/tree/v6.4.6" }, "funding": [ { @@ -9716,20 +10214,20 @@ "type": "tidelift" } ], - "time": "2024-02-26T07:52:26+00:00" + "time": "2024-03-27T19:47:45+00:00" }, { "name": "symfony/console", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", + "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", "shasum": "" }, "require": { @@ -9794,7 +10292,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.4" + "source": "https://github.com/symfony/console/tree/v6.4.6" }, "funding": [ { @@ -9810,20 +10308,20 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-29T19:07:53+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6236e5e843cb763e9d0f74245678b994afea5363" + "reference": "31417777509923b22de5c6fb6b3ffcdebde37cb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6236e5e843cb763e9d0f74245678b994afea5363", - "reference": "6236e5e843cb763e9d0f74245678b994afea5363", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/31417777509923b22de5c6fb6b3ffcdebde37cb5", + "reference": "31417777509923b22de5c6fb6b3ffcdebde37cb5", "shasum": "" }, "require": { @@ -9875,7 +10373,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.4" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.6" }, "funding": [ { @@ -9891,7 +10389,7 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/deprecation-contracts", @@ -9962,16 +10460,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.0.3", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" + "reference": "408105dff4c104454100730bdfd1a9cdd993f04d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d", + "reference": "408105dff4c104454100730bdfd1a9cdd993f04d", "shasum": "" }, "require": { @@ -10005,7 +10503,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.3" + "source": "https://github.com/symfony/filesystem/tree/v7.0.6" }, "funding": [ { @@ -10021,7 +10519,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-03-21T19:37:36+00:00" }, { "name": "symfony/finder", @@ -10777,16 +11275,16 @@ }, { "name": "symfony/property-access", - "version": "v7.0.4", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "44e3746d4de8d0961a44ee332c74dd0918266127" + "reference": "1c268ba954ccc5e78cf035b391abb67759e24423" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/44e3746d4de8d0961a44ee332c74dd0918266127", - "reference": "44e3746d4de8d0961a44ee332c74dd0918266127", + "url": "https://api.github.com/repos/symfony/property-access/zipball/1c268ba954ccc5e78cf035b391abb67759e24423", + "reference": "1c268ba954ccc5e78cf035b391abb67759e24423", "shasum": "" }, "require": { @@ -10833,7 +11331,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.0.4" + "source": "https://github.com/symfony/property-access/tree/v7.0.6" }, "funding": [ { @@ -10849,20 +11347,20 @@ "type": "tidelift" } ], - "time": "2024-02-16T13:44:10+00:00" + "time": "2024-03-19T11:57:22+00:00" }, { "name": "symfony/property-info", - "version": "v7.0.3", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "e160f92ea827243abf2dbf36b8460b1377194406" + "reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/e160f92ea827243abf2dbf36b8460b1377194406", - "reference": "e160f92ea827243abf2dbf36b8460b1377194406", + "url": "https://api.github.com/repos/symfony/property-info/zipball/b8844ddce7d53f78b57ec9be59da80fceddf3167", + "reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167", "shasum": "" }, "require": { @@ -10916,7 +11414,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.0.3" + "source": "https://github.com/symfony/property-info/tree/v7.0.6" }, "funding": [ { @@ -10932,20 +11430,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-03-28T09:20:36+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "88da7f8fe03c5f4c2a69da907f1de03fab2e6872" + "reference": "3697adf91f83516c86b4912c08c28084711ed560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/88da7f8fe03c5f4c2a69da907f1de03fab2e6872", - "reference": "88da7f8fe03c5f4c2a69da907f1de03fab2e6872", + "url": "https://api.github.com/repos/symfony/serializer/zipball/3697adf91f83516c86b4912c08c28084711ed560", + "reference": "3697adf91f83516c86b4912c08c28084711ed560", "shasum": "" }, "require": { @@ -11014,7 +11512,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.4" + "source": "https://github.com/symfony/serializer/tree/v6.4.6" }, "funding": [ { @@ -11030,20 +11528,20 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { @@ -11096,7 +11594,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -11112,7 +11610,7 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/stopwatch", @@ -11264,16 +11762,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.4.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "06450585bf65e978026bda220cdebca3f867fde7" + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", - "reference": "06450585bf65e978026bda220cdebca3f867fde7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", "shasum": "" }, "require": { @@ -11322,7 +11820,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" }, "funding": [ { @@ -11338,20 +11836,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/validator", - "version": "v6.4.4", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47" + "reference": "ca1d78e8677e966e307a63799677b64b194d735d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/1cf92edc9a94d16275efef949fa6748d11cc8f47", - "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47", + "url": "https://api.github.com/repos/symfony/validator/zipball/ca1d78e8677e966e307a63799677b64b194d735d", + "reference": "ca1d78e8677e966e307a63799677b64b194d735d", "shasum": "" }, "require": { @@ -11418,7 +11916,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.4" + "source": "https://github.com/symfony/validator/tree/v6.4.6" }, "funding": [ { @@ -11434,26 +11932,28 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-03-27T22:00:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.4", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41" + "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", - "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c74c568d2a15a1d407cf40d61ea82bc2d521e27b", + "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", @@ -11492,7 +11992,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.4" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.6" }, "funding": [ { @@ -11508,7 +12008,7 @@ "type": "tidelift" } ], - "time": "2024-02-26T10:35:24+00:00" + "time": "2024-03-20T21:25:22+00:00" }, { "name": "symfony/yaml", @@ -12050,40 +12550,35 @@ }, { "name": "wyrihaximus/async-test-utilities", - "version": "7.3.0", + "version": "8.0.1", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-async-test-utilities.git", - "reference": "8c7acb8bdb045c72b85ec267532aa1dbc59950dd" + "reference": "4b7171adc07d60fa3b35a479e5c1ed4929c4f884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/8c7acb8bdb045c72b85ec267532aa1dbc59950dd", - "reference": "8c7acb8bdb045c72b85ec267532aa1dbc59950dd", + "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/4b7171adc07d60fa3b35a479e5c1ed4929c4f884", + "reference": "4b7171adc07d60fa3b35a479e5c1ed4929c4f884", "shasum": "" }, "require": { "php": "^8.2", - "phpunit/phpunit": "^9.6.17", + "phpunit/phpunit": "^10.5.17", "react/async": "^4.2.0", "react/event-loop": "^1.5.0", "react/promise": "^3.1", "wyrihaximus/phpstan-react": "^1", - "wyrihaximus/test-utilities": "^5.5.4 || ^6" + "wyrihaximus/react-phpunit-run-tests-in-fiber": "^2.0.0", + "wyrihaximus/test-utilities": "^6.0.3" }, "conflict": { "composer/compoer": "<2.6.0" }, "require-dev": { - "react/promise-timer": "^1.10.0", - "wyrihaximus/iterator-or-array-to-array": "^1.2" + "react/promise-timer": "^1.10.0" }, "type": "library", - "extra": { - "unused": [ - "wyrihaximus/phpstan-react" - ] - }, "autoload": { "psr-4": { "WyriHaximus\\AsyncTestUtilities\\": "src/" @@ -12102,7 +12597,7 @@ "description": "Test utilities for api-clients packages", "support": { "issues": "https://github.com/WyriHaximus/php-async-test-utilities/issues", - "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/7.3.0" + "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/8.0.1" }, "funding": [ { @@ -12110,7 +12605,7 @@ "type": "github" } ], - "time": "2024-02-29T21:53:30+00:00" + "time": "2024-04-08T20:51:22+00:00" }, { "name": "wyrihaximus/coding-standard", @@ -12198,28 +12693,25 @@ }, { "name": "wyrihaximus/phpstan-rules-wrapper", - "version": "3.3.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper.git", - "reference": "8e65ee7749a3e10100f0abec58b7e53ee540c43d" + "reference": "e4b43719286e4f5ecd83771293a1a41ffcdeb111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/8e65ee7749a3e10100f0abec58b7e53ee540c43d", - "reference": "8e65ee7749a3e10100f0abec58b7e53ee540c43d", + "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/e4b43719286e4f5ecd83771293a1a41ffcdeb111", + "reference": "e4b43719286e4f5ecd83771293a1a41ffcdeb111", "shasum": "" }, "require": { - "ergebnis/phpstan-rules": "^2.1.0", - "jangregor/phpstan-prophecy": "^1.0", - "pepakriz/phpstan-exception-rules": "^0.12.0", + "ergebnis/phpstan-rules": "^2.2.0", "php": "^8.2", "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-php-parser": "^1.1", - "phpstan/phpstan-phpunit": "^1.3.14", - "phpstan/phpstan-strict-rules": "^1.5.1", + "phpstan/phpstan-mockery": "^1.1.2", + "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-strict-rules": "^1.5.3", "thecodingmachine/phpstan-safe-rule": "^1.2", "thecodingmachine/phpstan-strict-rules": "^1.0" }, @@ -12237,7 +12729,64 @@ "description": "๐ŸŒฏ PHPStan rules wrapper", "support": { "issues": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/issues", - "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/3.3.0" + "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + } + ], + "time": "2024-04-08T19:27:48+00:00" + }, + { + "name": "wyrihaximus/react-phpunit-run-tests-in-fiber", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber.git", + "reference": "38db5c326d191f5791ec2920beb5401a7d7259c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/zipball/38db5c326d191f5791ec2920beb5401a7d7259c7", + "reference": "38db5c326d191f5791ec2920beb5401a7d7259c7", + "shasum": "" + }, + "require": { + "php": "^8.2", + "phpunit/phpunit": "^10.5", + "react/async": "^4.2.0", + "react/event-loop": "^1.5.0", + "react/promise": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<10" + }, + "require-dev": { + "react/promise-timer": "^1.10.0", + "wyrihaximus/test-utilities": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "WyriHaximus\\React\\PHPUnit\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com" + } + ], + "description": "Trait to run all tests in a fiber", + "support": { + "issues": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/issues", + "source": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/tree/2.0.0" }, "funding": [ { @@ -12245,75 +12794,54 @@ "type": "github" } ], - "time": "2023-09-26T09:07:47+00:00" + "time": "2024-04-01T13:35:24+00:00" }, { "name": "wyrihaximus/test-utilities", - "version": "5.6.0", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-test-utilities.git", - "reference": "5b6d2484119f72625307b096b8297c933cc765d6" + "reference": "012eebc008cfcf1b697ac06529c1ad47181070ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/5b6d2484119f72625307b096b8297c933cc765d6", - "reference": "5b6d2484119f72625307b096b8297c933cc765d6", + "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/012eebc008cfcf1b697ac06529c1ad47181070ba", + "reference": "012eebc008cfcf1b697ac06529c1ad47181070ba", "shasum": "" }, "require": { - "ergebnis/composer-normalize": "^2.33.0", - "icanhazstring/composer-unused": "^0.8.10", + "brandembassy/mockery-tools": "^4.1.3", + "ergebnis/composer-normalize": "^2.42.0", + "ergebnis/phpunit-slow-test-detector": "^2.14.0", + "icanhazstring/composer-unused": "^0.8.11", "infection/infection": "^0.27.0", - "jakobbuis/simple-slow-test-reporter": "^1.0", - "maglnet/composer-require-checker": "^4.6.0", - "nunomaduro/collision": "^7.1.0", - "orklah/psalm-insane-comparison": "^2.2.0", + "maglnet/composer-require-checker": "^4.11.0", + "mockery/mockery": "^1.6.11", + "nunomaduro/collision": "^7.10.0", + "orklah/psalm-insane-comparison": "^2.3.0", "php": "^8.2", - "php-coveralls/php-coveralls": "^2.6.0", + "php-coveralls/php-coveralls": "^2.7.0", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", + "php-parallel-lint/php-parallel-lint": "^1.4.0", "php-standard-library/psalm-plugin": "^1.1.5 || ^2.2.1", - "phpspec/prophecy": "^1.17", - "phpspec/prophecy-phpunit": "^2.0.2", - "phpstan/phpstan": "^1.10.26", - "phpunit/phpunit": "^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "roave/backward-compatibility-check": "^8.3.0", - "roave/infection-static-analysis-plugin": "^1.32.0", - "squizlabs/php_codesniffer": "^3.7.2", + "phpstan/phpstan": "^1.10.66", + "phpunit/phpunit": "^10.5.17", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.19.0", + "roave/backward-compatibility-check": "^8.6.0", + "roave/infection-static-analysis-plugin": "^1.33.0", + "squizlabs/php_codesniffer": "^3.9.1", "thecodingmachine/safe": "^2.5.0", - "vimeo/psalm": "^5.13.1", + "vimeo/psalm": "^5.23.1", "wyrihaximus/coding-standard": "^2.14.0", - "wyrihaximus/phpstan-rules-wrapper": "^3.0.0" + "wyrihaximus/phpstan-rules-wrapper": "^6.0.0" }, "conflict": { + "composer/compoer": "<2.6.0", "symfony/dependency-injection": "<5.0.0" }, "type": "library", - "extra": { - "unused": [ - "ergebnis/composer-normalize", - "icanhazstring/composer-unused", - "infection/infection", - "jakobbuis/simple-slow-test-reporter", - "maglnet/composer-require-checker", - "nunomaduro/collision", - "orklah/psalm-insane-comparison", - "php-coveralls/php-coveralls", - "php-parallel-lint/php-console-highlighter", - "php-parallel-lint/php-parallel-lint", - "php-standard-library/psalm-plugin", - "phpstan/phpstan", - "psalm/plugin-phpunit", - "roave/backward-compatibility-check", - "roave/infection-static-analysis-plugin", - "squizlabs/php_codesniffer", - "vimeo/psalm", - "wyrihaximus/coding-standard", - "wyrihaximus/phpstan-rules-wrapper" - ] - }, "autoload": { "psr-4": { "WyriHaximus\\TestUtilities\\": "src/" @@ -12332,7 +12860,7 @@ "description": "๐Ÿ› ๏ธ Test utilities for api-clients packages", "support": { "issues": "https://github.com/WyriHaximus/php-test-utilities/issues", - "source": "https://github.com/WyriHaximus/php-test-utilities/tree/5.6.0" + "source": "https://github.com/WyriHaximus/php-test-utilities/tree/6.0.3" }, "funding": [ { @@ -12340,7 +12868,7 @@ "type": "github" } ], - "time": "2023-07-26T21:51:43+00:00" + "time": "2024-04-08T20:16:04+00:00" } ], "aliases": [], diff --git a/etc/qa/phpunit.xml b/etc/qa/phpunit.xml index 426c660..84e23a8 100644 --- a/etc/qa/phpunit.xml +++ b/etc/qa/phpunit.xml @@ -1,13 +1,13 @@ - - - - ../../tests/ - - - - - ../../src/ - - + + + + ../../tests/ + + + + + ../../src/ + + diff --git a/src/Attribute/Clause.php b/src/Attribute/Clause.php index ae7e86d..dc3ce46 100644 --- a/src/Attribute/Clause.php +++ b/src/Attribute/Clause.php @@ -6,7 +6,7 @@ final readonly class Clause { - public function __construct( + public function __construct( /** @phpstan-ignore-line */ public string $localKey, public string $foreignKey, public string|null $localCast = null, diff --git a/src/Attribute/InnerJoin.php b/src/Attribute/InnerJoin.php index 685a56d..35977b0 100644 --- a/src/Attribute/InnerJoin.php +++ b/src/Attribute/InnerJoin.php @@ -9,8 +9,10 @@ #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] final readonly class InnerJoin implements JoinInterface { + public string $type; + /** @param array $clause */ - public function __construct( + public function __construct( /** @phpstan-ignore-line */ public string $entity, public array $clause, public string $property, diff --git a/src/Attribute/LeftJoin.php b/src/Attribute/LeftJoin.php index 06b3d04..ff143f2 100644 --- a/src/Attribute/LeftJoin.php +++ b/src/Attribute/LeftJoin.php @@ -9,8 +9,10 @@ #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] final readonly class LeftJoin implements JoinInterface { + public string $type; + /** @param array $clause */ - public function __construct( + public function __construct( /** @phpstan-ignore-line */ public string $entity, public array $clause, public string $property, diff --git a/src/Client.php b/src/Client.php index 8f66ba8..e5abcd7 100644 --- a/src/Client.php +++ b/src/Client.php @@ -14,12 +14,15 @@ final class Client implements ClientInterface { private EntityInspector $entityInspector; + /** @var array */ private array $repositories = []; private Connection $connection; private QueryFactory $queryFactory; + private Hydrator $hydrator; + public static function create(AdapterInterface $adapter, Configuration $configuration, MiddlewareInterface ...$middleware): self { return new self($adapter, $configuration, ...$middleware); @@ -31,6 +34,7 @@ private function __construct(private AdapterInterface $adapter, Configuration $c $this->queryFactory = new QueryFactory($adapter->engine()); $this->connection = new Connection($this->adapter, new MiddlewareRunner(...$middleware)); + $this->hydrator = new Hydrator(); } /** @@ -43,7 +47,13 @@ private function __construct(private AdapterInterface $adapter, Configuration $c public function repository(string $entity): RepositoryInterface { if (! array_key_exists($entity, $this->repositories)) { - $this->repositories[$entity] = new Repository($this->entityInspector->entity($entity), $this, $this->queryFactory, $this->connection); + $this->repositories[$entity] = new Repository( + $this->entityInspector->entity($entity), + $this, + $this->queryFactory, + $this->connection, + $this->hydrator, + ); } return $this->repositories[$entity]; diff --git a/src/Configuration.php b/src/Configuration.php index c33e054..9267715 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -4,14 +4,10 @@ namespace WyriHaximus\React\SimpleORM; -final class Configuration +final readonly class Configuration { - public function __construct(private string $tablePrefix = '') - { - } - - public function tablePrefix(): string - { - return $this->tablePrefix; + public function __construct( /** @phpstan-ignore-line */ + public string $tablePrefix = '', + ) { } } diff --git a/src/Entity/Join.php b/src/Entity/Join.php index 40d3a67..81d0e48 100644 --- a/src/Entity/Join.php +++ b/src/Entity/Join.php @@ -7,39 +7,23 @@ use WyriHaximus\React\SimpleORM\Attribute\Clause; use WyriHaximus\React\SimpleORM\InspectedEntityInterface; -final class Join +final readonly class Join { /** @var array */ - private array $clause; - - public function __construct(private InspectedEntityInterface $entity, private string $type, private string $property, private bool $lazy, Clause ...$clause) - { + public array $clause; + + /** + * @param InspectedEntityInterface $entity + * + * @template T + */ + public function __construct( + public InspectedEntityInterface $entity, + public string $type, + public string $property, + public bool $lazy, + Clause ...$clause, + ) { $this->clause = $clause; } - - public function entity(): InspectedEntityInterface - { - return $this->entity; - } - - public function type(): string - { - return $this->type; - } - - public function property(): string - { - return $this->property; - } - - public function lazy(): bool - { - return $this->lazy; - } - - /** @return Clause[] */ - public function clause(): array - { - return $this->clause; - } } diff --git a/src/EntityInspector.php b/src/EntityInspector.php index cdb3e5a..bada443 100644 --- a/src/EntityInspector.php +++ b/src/EntityInspector.php @@ -23,10 +23,18 @@ final class EntityInspector /** @var InspectedEntityInterface[] */ private array $entities = []; - public function __construct(private Configuration $configuration) - { + public function __construct( + private Configuration $configuration, + ) { } + /** + * @param class-string $entity + * + * @return InspectedEntityInterface + * + * @template T + */ public function entity(string $entity): InspectedEntityInterface { if (! array_key_exists($entity, $this->entities)) { @@ -42,7 +50,7 @@ public function entity(string $entity): InspectedEntityInterface $joins = [...$this->joins($class)]; $this->entities[$entity] = new InspectedEntity( $entity, - $this->configuration->tablePrefix() . $tableAttribute->table, + $this->configuration->tablePrefix . $tableAttribute->table, [...$this->fields($class, $joins)], $joins, ); diff --git a/src/Hydrator.php b/src/Hydrator.php index a2dcb21..9c869be 100644 --- a/src/Hydrator.php +++ b/src/Hydrator.php @@ -4,93 +4,39 @@ namespace WyriHaximus\React\SimpleORM; -use GeneratedHydrator\Configuration; -use Safe\DateTimeImmutable; -use WyriHaximus\React\SimpleORM\Entity\Field; -use Zend\Hydrator\HydratorInterface; +use EventSauce\ObjectHydrator\ObjectMapperUsingReflection; -use function array_key_exists; use function is_array; -final class Hydrator +final readonly class Hydrator { - /** @var array */ - private array $hydrators = []; + private ObjectMapperUsingReflection $fallbackMapper; - /** - * @param mixed[] $data - * - * @psalm-suppress MoreSpecificReturnType - */ - public function hydrate(InspectedEntityInterface $inspectedEntity, array $data): EntityInterface + public function __construct() { - $class = $inspectedEntity->class(); - if (! array_key_exists($class, $this->hydrators)) { - /** - * @psalm-suppress MissingClosureReturnType - * @psalm-suppress InvalidPropertyAssignmentValue - * @psalm-suppress PropertyTypeCoercion - */ - $this->hydrators[$inspectedEntity->class()] = (static function (string $class): object { - /** - * @phpstan-ignore-next-line - * @psalm-suppress ArgumentTypeCoercion - */ - $hydratorClass = (new Configuration($class))->createFactory()->getHydratorClass(); - - /** @psalm-suppress InvalidStringClass */ - return new $hydratorClass(); - })($class); - } - - foreach ($data as $key => $value) { - if (! array_key_exists($key, $inspectedEntity->fields())) { - continue; - } - - $data[$key] = $this->castValueToCorrectType($inspectedEntity->fields()[$key], $value); - } + $this->fallbackMapper = new ObjectMapperUsingReflection(); + } + /** @param array $data */ + public function hydrate(InspectedEntityInterface $inspectedEntity, array $data): EntityInterface + { foreach ($inspectedEntity->joins() as $join) { - if (! is_array($data[$join->property()])) { + if (! is_array($data[$join->property])) { continue; } - $data[$join->property()] = $this->hydrate( - $join->entity(), - $data[$join->property()], + $data[$join->property] = $this->hydrate( + $join->entity, + $data[$join->property], ); } - /** - * @psalm-suppress PossiblyNullReference - * @psalm-suppress InvalidMethodCall - * @psalm-suppress InvalidStringClass - * @psalm-suppress LessSpecificReturnStatement - * @phpstan-ignore-next-line - */ - return $this->hydrators[$class]->hydrate($data, new $class()); - } - - /** @return mixed[] */ - public function extract(InspectedEntityInterface $inspectedEntity, EntityInterface $entity): array - { - $class = $inspectedEntity->class(); - $hydrator = $this->hydrators[$class]; - - return $hydrator->extract($entity); + return $this->fallbackMapper->hydrateObject($inspectedEntity->class(), $data); } - private function castValueToCorrectType(Field $field, mixed $value): mixed + /** @return array */ + public function extract(EntityInterface $entity): array { - if ($field->type() === 'int') { - return (int) $value; - } - - if ($field->type() === DateTimeImmutable::class) { - return new DateTimeImmutable($value); - } - - return $value; + return $this->fallbackMapper->serializeObject($entity); } } diff --git a/src/InspectedEntityInterface.php b/src/InspectedEntityInterface.php index 23f6d72..4ced0e5 100644 --- a/src/InspectedEntityInterface.php +++ b/src/InspectedEntityInterface.php @@ -7,15 +7,16 @@ use WyriHaximus\React\SimpleORM\Entity\Field; use WyriHaximus\React\SimpleORM\Entity\Join; +/** @template T */ interface InspectedEntityInterface { public function class(): string; public function table(): string; - /** @return Field[] */ + /** @return array */ public function fields(): array; - /** @return Join[] */ + /** @return array */ public function joins(): array; } diff --git a/src/Query/Where/Expression.php b/src/Query/Where/Expression.php index ec9235f..d48f031 100644 --- a/src/Query/Where/Expression.php +++ b/src/Query/Where/Expression.php @@ -9,11 +9,14 @@ use Latitude\QueryBuilder\ExpressionInterface; use WyriHaximus\React\SimpleORM\Query\WhereInterface; -final class Expression implements WhereInterface +final readonly class Expression implements WhereInterface { - /** @param mixed[] $criteriaArguments */ - public function __construct(private ExpressionInterface $expression, private string $criteria, private array $criteriaArguments = []) - { + /** @param array $criteriaArguments */ + public function __construct( + private ExpressionInterface $expression, + private string $criteria, + private array $criteriaArguments = [], /** @phpstan-ignore-line */ + ) { } public function expression(): ExpressionInterface diff --git a/src/Query/Where/Field.php b/src/Query/Where/Field.php index a0c62ea..8289ff8 100644 --- a/src/Query/Where/Field.php +++ b/src/Query/Where/Field.php @@ -8,11 +8,14 @@ use Latitude\QueryBuilder\CriteriaInterface; use WyriHaximus\React\SimpleORM\Query\WhereInterface; -final class Field implements WhereInterface +final readonly class Field implements WhereInterface { /** @param mixed[] $criteriaArguments */ - public function __construct(private string $field, private string $criteria, private array $criteriaArguments = []) - { + public function __construct( + private string $field, + private string $criteria, + private array $criteriaArguments = [], /** @phpstan-ignore-line */ + ) { } public function field(): string diff --git a/src/Repository.php b/src/Repository.php index 673c324..94325f9 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -53,8 +53,6 @@ final class Repository implements RepositoryInterface private const SINGLE = 1; private const STREAM_PER_PAGE = 100; - private Hydrator $hydrator; - /** @var ExpressionInterface[] */ private array $fields = []; @@ -66,8 +64,8 @@ public function __construct( private ClientInterface $client, private QueryFactory $queryFactory, private Connection $connection, + private Hydrator $hydrator, ) { - $this->hydrator = new Hydrator(); } /** @return PromiseInterface */ @@ -177,7 +175,7 @@ public function create(array $fields): PromiseInterface /** @return PromiseInterface */ public function update(EntityInterface $entity): PromiseInterface { - $fields = $this->hydrator->extract($this->entity, $entity); + $fields = $this->hydrator->extract($entity); $fields['modified'] = new DateTimeImmutable(); $fields = $this->prepareFields($fields); @@ -285,13 +283,13 @@ private function buildJoins(SelectQuery $query, InspectedEntityInterface $entity continue; } - $tableKey = spl_object_hash($join->entity()) . '___' . $join->property(); + $tableKey = spl_object_hash($join->entity) . '___' . $join->property; if (! array_key_exists($tableKey, $this->tableAliases)) { $this->tableAliases[$tableKey] = 't' . $i++; } $clauses = null; - foreach ($join->clause() as $clause) { + foreach ($join->clause as $clause) { $onLeftSide = $this->tableAliases[$tableKey] . '.' . $clause->foreignKey; if ($clause->foreignFunction !== null) { /** @psalm-suppress PossiblyNullOperand */ @@ -328,20 +326,20 @@ private function buildJoins(SelectQuery $query, InspectedEntityInterface $entity /** @psalm-suppress PossiblyNullArgument */ $query = $query->innerJoin( alias( - $join->entity()->table(), + $join->entity->table(), $this->tableAliases[$tableKey], ), $clauses, ); } - foreach ($join->entity()->fields() as $field) { + foreach ($join->entity->fields() as $field) { $this->fields[$this->tableAliases[$tableKey] . '___' . $field->name()] = alias($this->tableAliases[$tableKey] . '.' . $field->name(), $this->tableAliases[$tableKey] . '___' . $field->name()); } - unset($this->fields[$entity->table() . '___' . $join->property()]); + unset($this->fields[$entity->table() . '___' . $join->property]); - $query = $this->buildJoins($query, $join->entity(), $i, $join->property()); + $query = $this->buildJoins($query, $join->entity, $i, $join->property); } return $query; diff --git a/tests/HydratorTest.php b/tests/HydratorTest.php index 3936b83..5fbd24d 100644 --- a/tests/HydratorTest.php +++ b/tests/HydratorTest.php @@ -4,7 +4,6 @@ namespace WyriHaximus\React\Tests\SimpleORM; -use Doctrine\Common\Annotations\AnnotationReader; use Rx\Observable; use WyriHaximus\React\SimpleORM\Configuration; use WyriHaximus\React\SimpleORM\EntityInspector; @@ -19,16 +18,18 @@ use function React\Promise\resolve; use function Safe\date; -/** @internal */ final class HydratorTest extends TestCase { - public function testHydrate(): void + /** + * @test + */ + public function hydrate(): void { $id = '03450173-fef3-42c0-83c4-dfcfa4a474ee'; $title = 'tables.title'; $entity = (new Hydrator())->hydrate( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(UserStub::class), + (new EntityInspector(new Configuration('')))->entity(UserStub::class), [ 'id' => $id, 'name' => $title, @@ -37,17 +38,20 @@ public function testHydrate(): void ); assert($entity instanceof UserStub); - self::assertSame($id, $entity->id()); - self::assertSame($title, $entity->getName()); + self::assertSame($id, $entity->id); + self::assertSame($title, $entity->name); } - public function testHydrateIgnoringNonExistingFields(): void + /** + * @test + */ + public function hydrateIgnoringNonExistingFields(): void { $id = '03450173-fef3-42c0-83c4-dfcfa4a474ee'; $title = 'tables.title'; $entity = (new Hydrator())->hydrate( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(UserStub::class), + (new EntityInspector(new Configuration('')))->entity(UserStub::class), [ 'doesnotexist' => resolve(true), 'id' => $id, @@ -58,11 +62,14 @@ public function testHydrateIgnoringNonExistingFields(): void ); assert($entity instanceof UserStub); - self::assertSame($id, $entity->id()); - self::assertSame($title, $entity->getName()); + self::assertSame($id, $entity->id); + self::assertSame($title, $entity->name); } - public function testHydrateWithJoins(): void + /** + * @test + */ + public function hydrateWithJoins(): void { $id = '6bda4f06-4b7e-4cd5-b779-66a1b76187f9'; $title = 'null'; @@ -72,14 +79,14 @@ public function testHydrateWithJoins(): void $publisherName = 'dasdsadas'; $entity = (new Hydrator())->hydrate( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(BlogPostStub::class), + (new EntityInspector(new Configuration('')))->entity(BlogPostStub::class), [ 'doesnotexist' => resolve(true), 'id' => $id, 'author_id' => $authorId, 'publisher_id' => $publisherId, 'contents' => bin2hex(random_bytes(133)), - 'views' => '133', + 'views' => 133, 'created' => date('Y-m-d H:i:s e'), 'modified' => date('Y-m-d H:i:s e'), 'previous_blog_post' => resolve(null), @@ -101,16 +108,19 @@ public function testHydrateWithJoins(): void ); assert($entity instanceof BlogPostStub); - self::assertSame($id, $entity->id()); - self::assertSame($title, $entity->getTitle()); - self::assertSame($authorId, $entity->getAuthor()->id()); - self::assertSame($authorName, $entity->getAuthor()->getName()); - self::assertSame($publisherId, $entity->getPublisher()->id()); - self::assertSame($publisherName, $entity->getPublisher()->getName()); - self::assertSame(133, $entity->getViews()); + self::assertSame($id, $entity->id); + self::assertSame($title, $entity->title); + self::assertSame($authorId, $entity->author->id); + self::assertSame($authorName, $entity->author->name); + self::assertSame($publisherId, $entity->publisher->id); + self::assertSame($publisherName, $entity->publisher->name); + self::assertSame(133, $entity->views); } - public function testHydrateWithJoinsIgnoringNonExistingFields(): void + /** + * @test + */ + public function hydrateWithJoinsIgnoringNonExistingFields(): void { $id = '6bda4f06-4b7e-4cd5-b779-66a1b76187f9'; $title = 'null'; @@ -120,13 +130,13 @@ public function testHydrateWithJoinsIgnoringNonExistingFields(): void $publisherName = 'dasdsadas'; $entity = (new Hydrator())->hydrate( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(BlogPostStub::class), + (new EntityInspector(new Configuration('')))->entity(BlogPostStub::class), [ 'id' => $id, 'author_id' => $authorId, 'publisher_id' => $publisherId, 'contents' => bin2hex(random_bytes(133)), - 'views' => '133', + 'views' => 133, 'created' => date('Y-m-d H:i:s e'), 'modified' => date('Y-m-d H:i:s e'), 'previous_blog_post' => resolve(null), @@ -147,12 +157,12 @@ public function testHydrateWithJoinsIgnoringNonExistingFields(): void ); assert($entity instanceof BlogPostStub); - self::assertSame($id, $entity->id()); - self::assertSame($title, $entity->getTitle()); - self::assertSame($authorId, $entity->getAuthor()->id()); - self::assertSame($authorName, $entity->getAuthor()->getName()); - self::assertSame($publisherId, $entity->getPublisher()->id()); - self::assertSame($publisherName, $entity->getPublisher()->getName()); - self::assertSame(133, $entity->getViews()); + self::assertSame($id, $entity->id); + self::assertSame($title, $entity->title); + self::assertSame($authorId, $entity->author->id); + self::assertSame($authorName, $entity->author->name); + self::assertSame($publisherId, $entity->publisher->id); + self::assertSame($publisherName, $entity->publisher->name); + self::assertSame(133, $entity->views); } } diff --git a/tests/RepositoryTest.php b/tests/RepositoryTest.php index 3974624..c90b1d5 100644 --- a/tests/RepositoryTest.php +++ b/tests/RepositoryTest.php @@ -4,7 +4,6 @@ namespace WyriHaximus\React\Tests\SimpleORM; -use Doctrine\Common\Annotations\AnnotationReader; use Latitude\QueryBuilder\Engine\PostgresEngine; use Latitude\QueryBuilder\ExpressionInterface; use Latitude\QueryBuilder\QueryFactory; @@ -55,7 +54,7 @@ public function testCount(): void $client = $this->client->reveal(); $repository = new Repository( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(UserStub::class), + (new EntityInspector(new Configuration('')))->entity(UserStub::class), $client, new QueryFactory(), ); @@ -80,7 +79,7 @@ public function testCountWithContraints(): void $client = $this->client->reveal(); $repository = new Repository( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(UserStub::class), + (new EntityInspector(new Configuration('')))->entity(UserStub::class), $client, new QueryFactory(), ); @@ -113,7 +112,7 @@ public function testCountWithJoins(): void $client = $this->client->reveal(); $repository = new Repository( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(BlogPostStub::class), + (new EntityInspector(new Configuration('')))->entity(BlogPostStub::class), $client, new QueryFactory(), ); @@ -166,7 +165,7 @@ public function testFetchWithJoins(): void $client = $this->client->reveal(); $repository = new Repository( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(BlogPostStub::class), + (new EntityInspector(new Configuration('')))->entity(BlogPostStub::class), $client, new QueryFactory(), ); @@ -178,13 +177,13 @@ public function testFetchWithJoins(): void ))->take(1)->toPromise()); assert($blogPost instanceof BlogPostStub); - self::assertSame('98ce9eaf-b38b-4a51-93ed-131ffac4051e', $blogPost->id()); - self::assertSame('blog_post_title', $blogPost->getTitle()); - self::assertSame(123, $blogPost->getViews()); - self::assertSame('1a6cf50d-fa06-45ac-a510-375328f26541', $blogPost->getAuthor()->id()); - self::assertSame('author_name', $blogPost->getAuthor()->getName()); - self::assertSame('7bfdcadd-1e93-4c6e-9edf-d9bdf98a871c', $blogPost->getPublisher()->id()); - self::assertSame('publisher_name', $blogPost->getPublisher()->getName()); + self::assertSame('98ce9eaf-b38b-4a51-93ed-131ffac4051e', $blogPost->id); + self::assertSame('blog_post_title', $blogPost->title); + self::assertSame(123, $blogPost->views); + self::assertSame('1a6cf50d-fa06-45ac-a510-375328f26541', $blogPost->author->id); + self::assertSame('author_name', $blogPost->author->name); + self::assertSame('7bfdcadd-1e93-4c6e-9edf-d9bdf98a871c', $blogPost->publisher->id); + self::assertSame('publisher_name', $blogPost->publisher->name); } public function testFetchWithJoinsLazyLoadComments(): void @@ -192,7 +191,7 @@ public function testFetchWithJoinsLazyLoadComments(): void $client = $this->client->reveal(); $this->client->repository(CommentStub::class)->shouldBeCalled()->willReturn( - new Repository((new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(CommentStub::class), $client, new QueryFactory()), + new Repository((new EntityInspector(new Configuration('')))->entity(CommentStub::class), $client, new QueryFactory()), ); $this->client->query(Argument::that(static function (ExpressionInterface $expression): bool { @@ -340,7 +339,7 @@ public function testFetchWithJoinsLazyLoadComments(): void ])); $repository = new Repository( - (new EntityInspector(new Configuration(''), new AnnotationReader()))->entity(BlogPostStub::class), + (new EntityInspector(new Configuration('')))->entity(BlogPostStub::class), $client, new QueryFactory(), ); @@ -352,34 +351,34 @@ public function testFetchWithJoinsLazyLoadComments(): void ))->take(1)->toPromise()); assert($blogPost instanceof BlogPostStub); - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $blogPost->id()); - self::assertSame('blog_post_title', $blogPost->getTitle()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $blogPost->getAuthor()->id()); - self::assertSame('author_name', $blogPost->getAuthor()->getName()); - self::assertSame('d45e8a1b-b962-4c1b-a7e7-c867fa06ffa7', $blogPost->getPublisher()->id()); - self::assertSame('publisher_name', $blogPost->getPublisher()->getName()); + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $blogPost->id); + self::assertSame('blog_post_title', $blogPost->title); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $blogPost->author->id); + self::assertSame('author_name', $blogPost->author->name); + self::assertSame('d45e8a1b-b962-4c1b-a7e7-c867fa06ffa7', $blogPost->publisher->id); + self::assertSame('publisher_name', $blogPost->publisher->name); /** @var CommentStub[] $comments */ - $comments = await($blogPost->getComments()->toArray()->toPromise()); - - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[0]->id()); - self::assertSame('d45e8a1b-b962-4c1b-a7e7-c867fa06ffa7', $comments[0]->getAuthor()->id()); - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[0]->getBlogPost()->id()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[0]->getBlogPost()->getAuthor()->id()); - - self::assertSame('fa41900d-4f62-4037-9eb3-8cfb4b90eeef', $comments[1]->id()); - self::assertSame('0da49bee-ab27-4b24-a949-7b71a0b0449a', $comments[1]->getAuthor()->id()); - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[1]->getBlogPost()->id()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[1]->getBlogPost()->getAuthor()->id()); - - self::assertSame('83f451cb-4b20-41b5-a8be-637af0bf1284', $comments[2]->id()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[2]->getAuthor()->id()); - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[2]->getBlogPost()->id()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[2]->getBlogPost()->getAuthor()->id()); - - self::assertSame('590d4a9d-afb2-4860-a746-b0a086554064', $comments[3]->id()); - self::assertSame('0da49bee-ab27-4b24-a949-7b71a0b0449a', $comments[3]->getAuthor()->id()); - self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[3]->getBlogPost()->id()); - self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[3]->getBlogPost()->getAuthor()->id()); + $comments = await($blogPost->comments->toArray()->toPromise()); + + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[0]->id); + self::assertSame('d45e8a1b-b962-4c1b-a7e7-c867fa06ffa7', $comments[0]->author->id); + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[0]->blogPost->id); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[0]->blogPost->author->id); + + self::assertSame('fa41900d-4f62-4037-9eb3-8cfb4b90eeef', $comments[1]->id); + self::assertSame('0da49bee-ab27-4b24-a949-7b71a0b0449a', $comments[1]->author->id); + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[1]->blogPost->id); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[1]->blogPost->author->id); + + self::assertSame('83f451cb-4b20-41b5-a8be-637af0bf1284', $comments[2]->id); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[2]->author->id); + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[2]->blogPost->id); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[2]->blogPost->author->id); + + self::assertSame('590d4a9d-afb2-4860-a746-b0a086554064', $comments[3]->id); + self::assertSame('0da49bee-ab27-4b24-a949-7b71a0b0449a', $comments[3]->author->id); + self::assertSame('99d00028-28d6-4194-b377-a0039b278c4d', $comments[3]->blogPost->id); + self::assertSame('3fbf8eec-8a3f-4b01-ba9a-355f6650644b', $comments[3]->blogPost->author->id); } } diff --git a/tests/Stub/BlogPostStub.php b/tests/Stub/BlogPostStub.php index ac138bc..83cdca6 100644 --- a/tests/Stub/BlogPostStub.php +++ b/tests/Stub/BlogPostStub.php @@ -4,9 +4,9 @@ namespace WyriHaximus\React\Tests\SimpleORM\Stub; +use EventSauce\ObjectHydrator\MapFrom; use React\Promise\PromiseInterface; use Rx\Observable; -use Safe\DateTimeImmutable; use WyriHaximus\React\SimpleORM\Attribute\Clause; use WyriHaximus\React\SimpleORM\Attribute\InnerJoin; use WyriHaximus\React\SimpleORM\Attribute\JoinInterface; @@ -21,8 +21,8 @@ clause: [ new Clause( localKey: 'id', - localCast: 'BIGINT', foreignKey: 'blog_post_id', + localCast: 'BIGINT', ), ], property: 'comments', @@ -76,110 +76,30 @@ { use WithFieldsTrait; - //phpcs:disable - protected string $id; - - protected ?string $previous_blog_post_id = null; - /** - * @var PromiseInterface + * @param PromiseInterface $previousBlogPost + * @param PromiseInterface $nextBlogPost */ - protected PromiseInterface $previous_blog_post; - - protected ?string $next_blog_post_id = null; - - /** - * @var PromiseInterface - */ - protected PromiseInterface $next_blog_post; - - protected string $author_id; - - protected string $publisher_id; - - protected string $title; - - protected string $contents; - - protected UserStub $author; - - protected UserStub $publisher; - - protected Observable $comments; - - protected int $views; - - protected string $created; - - protected string $modified; - //phpcs:enable - - public function id(): string - { - return $this->id; - } - - /** @return PromiseInterface */ - public function getPreviousBlogPost(): PromiseInterface - { - //phpcs:disable - return $this->previous_blog_post; - //phpcs:enable - } - - /** @return PromiseInterface */ - public function getNextBlogPost(): PromiseInterface - { - //phpcs:disable - return $this->next_blog_post; - //phpcs:enable - } - - public function getAuthor(): UserStub - { - return $this->author; - } - - public function getPublisher(): UserStub - { - return $this->publisher; - } - - public function getTitle(): string - { - return $this->title; - } - - public function getContents(): string - { - return $this->contents; - } - - public function getComments(): Observable - { - return $this->comments; - } - - public function getViews(): int - { - return $this->views; - } - - public function withViews(int $views): self - { - $clone = clone $this; - $clone->views = $views; - - return $clone; - } - - public function getCreated(): DateTimeImmutable - { - return new DateTimeImmutable($this->created); - } - - public function getModified(): DateTimeImmutable - { - return new DateTimeImmutable($this->modified); + public function __construct( /** @phpstan-ignore-line */ + public string $id, + #[MapFrom('previous_blog_post_id')] + public string|null $previousBlogPostId, + public PromiseInterface $previousBlogPost, + #[MapFrom('next_blog_post_id')] + public string|null $nextBlogPostId, + public PromiseInterface $nextBlogPost, + #[MapFrom('author_id')] + public string $authorId, + #[MapFrom('publisher_id')] + public string $publisherId, + public string $title, + public string $contents, + public UserStub $author, + public UserStub $publisher, + public Observable $comments, + public int $views, + public string $created, + public string $modified, + ) { } } diff --git a/tests/Stub/CommentStub.php b/tests/Stub/CommentStub.php index 2152ba0..e03d578 100644 --- a/tests/Stub/CommentStub.php +++ b/tests/Stub/CommentStub.php @@ -4,6 +4,7 @@ namespace WyriHaximus\React\Tests\SimpleORM\Stub; +use EventSauce\ObjectHydrator\MapFrom; use WyriHaximus\React\SimpleORM\Attribute\Clause; use WyriHaximus\React\SimpleORM\Attribute\InnerJoin; use WyriHaximus\React\SimpleORM\Attribute\Table; @@ -35,39 +36,15 @@ { use WithFieldsTrait; - //phpcs:disable - protected string $id; - - protected string $author_id; - - protected UserStub $author; - - protected string $blog_post_id; - - protected BlogPostStub $blog_post; - - protected string $contents; - //phpcs:enable - - public function id(): string - { - return $this->id; - } - - public function getContents(): string - { - return $this->contents; - } - - public function getBlogPost(): BlogPostStub - { - //phpcs:disable - return $this->blog_post; - //phpcs:enable - } - - public function getAuthor(): UserStub - { - return $this->author; + public function __construct( + public string $id, + #[MapFrom('author_id')] + public string $authorId, + public UserStub $author, + #[MapFrom('blog_post_id')] + public string $blogPostId, + public BlogPostStub $blogPost, + public string $contents, + ) { } } diff --git a/tests/Stub/UserStub.php b/tests/Stub/UserStub.php index eefea71..56b56f5 100644 --- a/tests/Stub/UserStub.php +++ b/tests/Stub/UserStub.php @@ -29,26 +29,11 @@ { use WithFieldsTrait; - protected string $id; - - protected string $name; - - /** @var PromiseInterface */ - protected PromiseInterface $zelf; - - public function id(): string - { - return $this->id; - } - - public function getName(): string - { - return $this->name; - } - - /** @return PromiseInterface */ - public function getZelf(): PromiseInterface - { - return $this->zelf; + /** @param PromiseInterface $zelf */ + public function __construct( + public string $id, + public string $name, + public PromiseInterface $zelf, + ) { } }