diff --git a/composer.json b/composer.json index 5bf2dbb..c328a8c 100644 --- a/composer.json +++ b/composer.json @@ -37,9 +37,9 @@ }, "require": { "php": "^8.2", - "doctrine/orm": "^2.15", + "doctrine/orm": "^3.3", "psr/container": "^1.1 || ^2.0", - "webonyx/graphql-php": "^15.7" + "webonyx/graphql-php": "^15.20" }, "require-dev": { "friendsofphp/php-cs-fixer": "@stable", diff --git a/composer.lock b/composer.lock index 3d196e2..38e82c4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,126 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b7be194f951fde9bee7e9a5246c19694", + "content-hash": "985e392b86ec465989edf0ea616c7ff9", "packages": [ - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/collections", - "version": "2.2.2", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", "shasum": "" }, "require": { "doctrine/deprecations": "^1", - "php": "^8.1" + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { "doctrine/coding-standard": "^12", "ext-json": "*", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.11" + "phpunit/phpunit": "^10.5" }, "type": "library", "autoload": { @@ -167,7 +74,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.2.2" + "source": "https://github.com/doctrine/collections/tree/2.3.0" }, "funding": [ { @@ -183,142 +90,44 @@ "type": "tidelift" } ], - "time": "2024-04-18T06:56:21+00:00" - }, - { - "name": "doctrine/common", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0 || ^3.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^6.1", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", - "type": "tidelift" - } - ], - "time": "2024-04-16T13:35:33+00:00" + "time": "2025-03-22T10:17:19+00:00" }, { "name": "doctrine/dbal", - "version": "3.8.6", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1" + "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b7411825cf7efb7e51f9791dea19d86e43b399a1", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/33d2d7fe1269b2301640c44cf2896ea607b30e3e", + "reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "php": "^8.1", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.11.5", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.19", - "psalm/plugin-phpunit": "0.18.4", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "10.5.39", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0", - "vimeo/psalm": "4.30.0" + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -371,7 +180,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.6" + "source": "https://github.com/doctrine/dbal/tree/4.2.3" }, "funding": [ { @@ -387,33 +196,34 @@ "type": "tidelift" } ], - "time": "2024-06-19T10:38:17+00:00" + "time": "2025-03-07T18:29:05+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -421,7 +231,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -432,9 +242,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/event-manager", @@ -767,61 +577,50 @@ }, { "name": "doctrine/orm", - "version": "2.19.6", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073" + "reference": "c9557c588b3a70ed93caff069d0aa75737f25609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", + "url": "https://api.github.com/repos/doctrine/orm/zipball/c9557c588b3a70ed93caff069d0aa75737f25609", + "reference": "c9557c588b3a70ed93caff069d0aa75737f25609", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5 || ^2.1", - "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^2 || ^3", - "doctrine/persistence": "^2.4 || ^3", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", "ext-ctype": "*", - "php": "^7.1 || ^8.0", + "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.13 || >= 3.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" }, "require-dev": { - "doctrine/annotations": "^1.13 || ^2", - "doctrine/coding-standard": "^9.0.2 || ^12.0", - "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.11.1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^12.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.4.0", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "vimeo/psalm": "4.30.0 || 5.24.0" + "symfony/cache": "^5.4 || ^6.2 || ^7.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" }, - "bin": [ - "bin/doctrine" - ], "type": "library", "autoload": { "psr-4": { @@ -862,27 +661,27 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.6" + "source": "https://github.com/doctrine/orm/tree/3.3.2" }, - "time": "2024-06-26T17:24:40+00:00" + "time": "2025-02-04T19:43:15+00:00" }, { "name": "doctrine/persistence", - "version": "3.3.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "b337726451f5d530df338fc7f68dee8781b49779" + "reference": "45004aca79189474f113cbe3a53847c2115a55fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", - "reference": "b337726451f5d530df338fc7f68dee8781b49779", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/45004aca79189474f113cbe3a53847c2115a55fa", + "reference": "45004aca79189474f113cbe3a53847c2115a55fa", "shasum": "" }, "require": { "doctrine/event-manager": "^1 || ^2", - "php": "^7.2 || ^8.0", + "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { @@ -890,13 +689,11 @@ }, "require-dev": { "doctrine/coding-standard": "^12", - "doctrine/common": "^3.0", - "phpstan/phpstan": "1.11.1", + "phpstan/phpstan": "1.12.7", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.24.0" + "phpunit/phpunit": "^9.6", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -945,7 +742,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.3" + "source": "https://github.com/doctrine/persistence/tree/4.0.0" }, "funding": [ { @@ -961,7 +758,7 @@ "type": "tidelift" } ], - "time": "2024-06-20T10:14:30+00:00" + "time": "2024-11-01T21:49:07+00:00" }, { "name": "psr/cache", @@ -1067,16 +864,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -1111,22 +908,22 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "e51498ea18570c062e7df29d05a7003585b19b88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", + "reference": "e51498ea18570c062e7df29d05a7003585b19b88", "shasum": "" }, "require": { @@ -1190,7 +987,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.2.5" }, "funding": [ { @@ -1206,20 +1003,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2025-03-12T08:11:12+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -1227,12 +1024,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1257,7 +1054,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -1273,24 +1070,24 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1301,8 +1098,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1336,7 +1133,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1352,24 +1149,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1377,8 +1174,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1414,7 +1211,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -1430,24 +1227,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1455,8 +1252,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1495,7 +1292,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -1511,24 +1308,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1539,8 +1336,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1575,7 +1372,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1591,30 +1388,30 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.30.0", + "name": "symfony/polyfill-php84", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/e5493eb51311ab0b1cc2243416613f06ed8f18bd", + "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1622,8 +1419,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1639,7 +1439,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -1648,7 +1448,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.31.0" }, "funding": [ { @@ -1664,41 +1464,46 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T12:04:04+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "name": "symfony/service-contracts", + "version": "v3.5.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Contracts\\Service\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1706,10 +1511,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -1719,16 +1520,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -1744,46 +1547,50 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.5.0", + "name": "symfony/string", + "version": "v7.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "url": "https://github.com/symfony/string.git", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "symfony/translation-contracts": "<2.5" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" }, + "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ - "/Test/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1800,18 +1607,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -1827,47 +1634,34 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { - "name": "symfony/string", - "version": "v7.1.2", + "name": "symfony/var-exporter", + "version": "v7.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "c37b301818bd7288715d40de634f05781b686ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c37b301818bd7288715d40de634f05781b686ace", + "reference": "c37b301818bd7288715d40de634f05781b686ace", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" + "php": ">=8.2" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\VarExporter\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1887,18 +1681,20 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "description": "Allows exporting any serializable PHP data structure to plain PHP code", "homepage": "https://symfony.com", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.5" }, "funding": [ { @@ -1914,20 +1710,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "webonyx/graphql-php", - "version": "v15.12.5", + "version": "v15.20.0", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6" + "reference": "60feb7ad5023c0ef411efbdf9792d3df5812e28f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/7bcd31d1dcf67781ed5cb493b22c519c539c05e6", - "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/60feb7ad5023c0ef411efbdf9792d3df5812e28f", + "reference": "60feb7ad5023c0ef411efbdf9792d3df5812e28f", "shasum": "" }, "require": { @@ -1940,22 +1736,22 @@ "amphp/http-server": "^2.1", "dms/phpunit-arraysubset-asserts": "dev-master", "ergebnis/composer-normalize": "^2.28", - "friendsofphp/php-cs-fixer": "3.59.3", - "mll-lab/php-cs-fixer-config": "^5", + "friendsofphp/php-cs-fixer": "3.73.1", + "mll-lab/php-cs-fixer-config": "5.11.0", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.11.5", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "1.6.0", - "phpunit/phpunit": "^9.5 || ^10.5.21", + "phpstan/phpstan": "2.1.8", + "phpstan/phpstan-phpunit": "2.0.4", + "phpstan/phpstan-strict-rules": "2.0.4", + "phpunit/phpunit": "^9.5 || ^10.5.21 || ^11", "psr/http-message": "^1 || ^2", "react/http": "^1.6", "react/promise": "^2.0 || ^3.0", - "rector/rector": "^1.0", + "rector/rector": "^2.0", "symfony/polyfill-php81": "^1.23", "symfony/var-exporter": "^5 || ^6 || ^7", - "thecodingmachine/safe": "^1.3 || ^2" + "thecodingmachine/safe": "^1.3 || ^2 || ^3" }, "suggest": { "amphp/http-server": "To leverage async resolving with webserver on AMPHP platform", @@ -1980,7 +1776,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.12.5" + "source": "https://github.com/webonyx/graphql-php/tree/v15.20.0" }, "funding": [ { @@ -1988,7 +1784,7 @@ "type": "open_collective" } ], - "time": "2024-06-23T11:30:58+00:00" + "time": "2025-03-21T08:45:04+00:00" } ], "packages-dev": [ @@ -2107,28 +1903,36 @@ }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { "dev-main": "3.x-dev" } @@ -2158,7 +1962,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -2174,28 +1978,28 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -2239,7 +2043,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -2255,7 +2059,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", @@ -2372,16 +2176,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -2421,7 +2225,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { @@ -2429,20 +2233,20 @@ "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.59.3", + "version": "v3.75.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29" + "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c", + "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c", "shasum": "" }, "require": { @@ -2450,40 +2254,41 @@ "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-filter": "*", + "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.0", + "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", "react/child-process": "^0.6.5", "react/event-loop": "^1.0", "react/promise": "^2.0 || ^3.0", "react/socket": "^1.0", "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^5.4 || ^6.0 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-mbstring": "^1.28", - "symfony/polyfill-php80": "^1.28", - "symfony/polyfill-php81": "^1.28", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" + "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", + "symfony/polyfill-mbstring": "^1.31", + "symfony/polyfill-php80": "^1.31", + "symfony/polyfill-php81": "^1.31", + "symfony/process": "^5.4 || ^6.4 || ^7.2", + "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.3", - "infection/infection": "^0.29.5", - "justinrainbow/json-schema": "^5.2", + "facile-it/paraunit": "^1.3.1 || ^2.6", + "infection/infection": "^0.29.14", + "justinrainbow/json-schema": "^5.3 || ^6.2", "keradus/cli-executor": "^2.1", - "mikey179/vfsstream": "^1.6.11", + "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", - "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", - "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12", + "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3", + "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -2524,7 +2329,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.75.0" }, "funding": [ { @@ -2532,26 +2337,26 @@ "type": "github" } ], - "time": "2024-06-16T14:17:03+00:00" + "time": "2025-03-31T18:40:42+00:00" }, { "name": "laminas/laminas-servicemanager", - "version": "4.2.0", + "version": "4.4.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "a8489e352de3ce3f1eaf34a354b1e5f2ad2db85c" + "reference": "74da44d07e493b834347123242d0047976fb9932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/a8489e352de3ce3f1eaf34a354b1e5f2ad2db85c", - "reference": "a8489e352de3ce3f1eaf34a354b1e5f2ad2db85c", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/74da44d07e493b834347123242d0047976fb9932", + "reference": "74da44d07e493b834347123242d0047976fb9932", "shasum": "" }, "require": { "brick/varexporter": "^0.3.8 || ^0.4.0 || ^0.5.0", - "laminas/laminas-stdlib": "^3.17", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "laminas/laminas-stdlib": "^3.19", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", "psr/container": "^1.1 || ^2.0" }, "conflict": { @@ -2562,19 +2367,17 @@ "psr/container-implementation": "^1.0 || ^2.0" }, "require-dev": { - "boesing/psalm-plugin-stringf": "^1.4", "composer/package-versions-deprecated": "^1.11.99.5", - "friendsofphp/proxy-manager-lts": "^1", - "laminas/laminas-cli": "^1.8", - "laminas/laminas-coding-standard": "~2.5.0", + "friendsofphp/proxy-manager-lts": "^1.0.18", + "laminas/laminas-cli": "^1.11", + "laminas/laminas-coding-standard": "~3.0.1", "laminas/laminas-container-config-test": "^1.0", - "lctrs/psalm-psr-container-plugin": "^1.9", - "mikey179/vfsstream": "^1.6.11@alpha", - "phpbench/phpbench": "^1.2.7", - "phpunit/phpunit": "^10.4", - "psalm/plugin-phpunit": "^0.18.4", - "symfony/console": "^6.0", - "vimeo/psalm": "^5.22" + "mikey179/vfsstream": "^1.6.12", + "phpbench/phpbench": "^1.4.0", + "phpunit/phpunit": "^10.5.44", + "psalm/plugin-phpunit": "^0.19.2", + "symfony/console": "^6.4.17 || ^7.0", + "vimeo/psalm": "^6.2.0" }, "suggest": { "friendsofphp/proxy-manager-lts": "To handle lazy initialization of services", @@ -2583,8 +2386,8 @@ "type": "library", "extra": { "laminas": { - "config-provider": "Laminas\\ServiceManager\\ConfigProvider", - "module": "Laminas\\ServiceManager" + "module": "Laminas\\ServiceManager", + "config-provider": "Laminas\\ServiceManager\\ConfigProvider" } }, "autoload": { @@ -2611,7 +2414,7 @@ "chat": "https://laminas.dev/chat", "forum": "https://discourse.laminas.dev", "issues": "https://github.com/laminas/laminas-servicemanager/issues", - "source": "https://github.com/laminas/laminas-servicemanager/tree/4.2.0" + "source": "https://github.com/laminas/laminas-servicemanager/tree/4.4.0" }, "funding": [ { @@ -2619,34 +2422,34 @@ "type": "community_bridge" } ], - "time": "2024-07-04T09:40:44+00:00" + "time": "2025-02-04T06:13:50+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.19.0", + "version": "3.20.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "6a192dd0882b514e45506f533b833b623b78fff3" + "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/6a192dd0882b514e45506f533b833b623b78fff3", - "reference": "6a192dd0882b514e45506f533b833b623b78fff3", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/8974a1213be42c3e2f70b2c27b17f910291ab2f4", + "reference": "8974a1213be42c3e2f70b2c27b17f910291ab2f4", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "conflict": { "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "^2.5", - "phpbench/phpbench": "^1.2.15", - "phpunit/phpunit": "^10.5.8", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.20.0" + "laminas/laminas-coding-standard": "^3.0", + "phpbench/phpbench": "^1.3.1", + "phpunit/phpunit": "^10.5.38", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.26.1" }, "type": "library", "autoload": { @@ -2678,20 +2481,20 @@ "type": "community_bridge" } ], - "time": "2024-01-19T12:39:49+00:00" + "time": "2024-10-29T13:46:07+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -2730,7 +2533,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -2738,20 +2541,20 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nikic/php-parser", - "version": "v5.1.0", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2794,9 +2597,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-07-01T20:03:41+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -2918,20 +2721,20 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.7", + "version": "2.1.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d" + "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/96dde49e967c0c22812bcfa7bda4ff82c09f3b0c", + "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.4|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -2972,39 +2775,39 @@ "type": "github" } ], - "time": "2024-07-06T11:17:41+00:00" + "time": "2025-04-16T13:19:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.5", + "version": "11.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "19b6365ab8b59a64438c0c3f4241feeb480c9861" + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/19b6365ab8b59a64438c0c3f4241feeb480c9861", - "reference": "19b6365ab8b59a64438c0c3f4241feeb480c9861", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.0", + "nikic/php-parser": "^5.4.0", "php": ">=8.2", - "phpunit/php-file-iterator": "^5.0", - "phpunit/php-text-template": "^4.0", - "sebastian/code-unit-reverse-lookup": "^4.0", - "sebastian/complexity": "^4.0", - "sebastian/environment": "^7.0", - "sebastian/lines-of-code": "^3.0", - "sebastian/version": "^5.0", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.5.2" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -3013,7 +2816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.0-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -3042,7 +2845,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/11.0.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" }, "funding": [ { @@ -3050,20 +2853,20 @@ "type": "github" } ], - "time": "2024-07-03T05:05:37+00:00" + "time": "2025-02-25T13:26:39+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.0.1", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6ed896bf50bbbfe4d504a33ed5886278c78e4a26" + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6ed896bf50bbbfe4d504a33ed5886278c78e4a26", - "reference": "6ed896bf50bbbfe4d504a33ed5886278c78e4a26", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { @@ -3103,7 +2906,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, "funding": [ { @@ -3111,7 +2914,7 @@ "type": "github" } ], - "time": "2024-07-03T05:06:37+00:00" + "time": "2024-08-27T05:02:59+00:00" }, { "name": "phpunit/php-invoker", @@ -3299,16 +3102,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.2.7", + "version": "11.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "15c7e69dec4a8f246840859e6b430bd2abeb5039" + "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/15c7e69dec4a8f246840859e6b430bd2abeb5039", - "reference": "15c7e69dec4a8f246840859e6b430bd2abeb5039", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fd2e863a2995cdfd864fb514b5e0b28b09895b5c", + "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c", "shasum": "" }, "require": { @@ -3318,25 +3121,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.13.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.5", - "phpunit/php-file-iterator": "^5.0.1", + "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.0.1", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.1.3", + "sebastian/exporter": "^6.3.0", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.0.1", - "sebastian/version": "^5.0.1" + "sebastian/type": "^5.1.2", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -3347,7 +3151,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.2-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -3379,7 +3183,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.2.7" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.17" }, "funding": [ { @@ -3395,7 +3199,7 @@ "type": "tidelift" } ], - "time": "2024-07-10T11:50:09+00:00" + "time": "2025-04-08T07:59:11+00:00" }, { "name": "psr/event-dispatcher", @@ -3521,33 +3325,33 @@ }, { "name": "react/child-process", - "version": "v0.6.5", + "version": "v0.6.6", "source": { "type": "git", "url": "https://github.com/reactphp/child-process.git", - "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", - "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", "react/event-loop": "^1.2", - "react/stream": "^1.2" + "react/stream": "^1.4" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/socket": "^1.8", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" }, "type": "library", "autoload": { "psr-4": { - "React\\ChildProcess\\": "src" + "React\\ChildProcess\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3584,19 +3388,15 @@ ], "support": { "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.5" + "source": "https://github.com/reactphp/child-process/tree/v0.6.6" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-09-16T13:41:56+00:00" + "time": "2025-01-01T16:37:48+00:00" }, { "name": "react/dns", @@ -3821,31 +3621,31 @@ }, { "name": "react/socket", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "react/dns": "^1.11", + "react/dns": "^1.13", "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.6 || ^1.2.1", - "react/stream": "^1.2" + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", + "react/async": "^4.3 || ^3.3 || ^2", "react/promise-stream": "^1.4", - "react/promise-timer": "^1.10" + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -3889,7 +3689,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.15.0" + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, "funding": [ { @@ -3897,7 +3697,7 @@ "type": "open_collective" } ], - "time": "2023-12-15T11:02:10+00:00" + "time": "2024-07-26T10:38:09+00:00" }, { "name": "react/stream", @@ -4036,23 +3836,23 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { @@ -4081,7 +3881,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { @@ -4089,7 +3889,7 @@ "type": "github" } ], - "time": "2024-07-03T04:44:28+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4149,16 +3949,16 @@ }, { "name": "sebastian/comparator", - "version": "6.0.1", + "version": "6.3.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "131942b86d3587291067a94f295498ab6ac79c20" + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/131942b86d3587291067a94f295498ab6ac79c20", - "reference": "131942b86d3587291067a94f295498ab6ac79c20", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", "shasum": "" }, "require": { @@ -4169,12 +3969,15 @@ "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -4214,7 +4017,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" }, "funding": [ { @@ -4222,7 +4025,7 @@ "type": "github" } ], - "time": "2024-07-03T04:48:07+00:00" + "time": "2025-03-07T06:57:01+00:00" }, { "name": "sebastian/complexity", @@ -4415,16 +4218,16 @@ }, { "name": "sebastian/exporter", - "version": "6.1.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { @@ -4433,7 +4236,7 @@ "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.2" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -4481,7 +4284,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -4489,7 +4292,7 @@ "type": "github" } ], - "time": "2024-07-03T04:56:19+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", @@ -4791,28 +4594,28 @@ }, { "name": "sebastian/type", - "version": "5.0.1", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa" + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb6a6566f9589e86661291d13eba708cce5eb4aa", - "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4836,7 +4639,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" }, "funding": [ { @@ -4844,20 +4647,20 @@ "type": "github" } ], - "time": "2024-07-03T05:11:49+00:00" + "time": "2025-03-18T13:35:50+00:00" }, { "name": "sebastian/version", - "version": "5.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4" + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/45c9debb7d039ce9b97de2f749c2cf5832a06ac4", - "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { @@ -4890,7 +4693,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -4898,20 +4701,72 @@ "type": "github" } ], - "time": "2024-07-03T05:13:08+00:00" + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" }, { "name": "symfony/cache", - "version": "v7.1.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae" + "reference": "9131e3018872d2ebb6fe8a9a4d6631273513d42c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e933e1d947ffb88efcdd34a2bd51561cab7deaae", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae", + "url": "https://api.github.com/repos/symfony/cache/zipball/9131e3018872d2ebb6fe8a9a4d6631273513d42c", + "reference": "9131e3018872d2ebb6fe8a9a4d6631273513d42c", "shasum": "" }, "require": { @@ -4939,6 +4794,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -4979,7 +4835,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.2" + "source": "https://github.com/symfony/cache/tree/v7.2.5" }, "funding": [ { @@ -4995,20 +4851,20 @@ "type": "tidelift" } ], - "time": "2024-06-11T13:32:38+00:00" + "time": "2025-03-25T15:54:33+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -5017,12 +4873,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5055,7 +4911,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -5071,20 +4927,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.1", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -5135,7 +4991,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -5151,20 +5007,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -5173,12 +5029,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5211,7 +5067,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -5227,20 +5083,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v7.1.2", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { @@ -5277,7 +5133,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.2" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -5293,20 +5149,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -5341,7 +5197,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -5357,20 +5213,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.1", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { @@ -5408,7 +5264,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -5424,30 +5280,30 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.30.0", + "name": "symfony/polyfill-php80", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5455,7 +5311,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -5466,6 +5322,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -5475,7 +5335,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5484,7 +5344,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -5500,32 +5360,41 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/process", - "version": "v7.1.1", + "name": "symfony/polyfill-php81", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.2" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5534,18 +5403,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Executes commands in sub-processes", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -5561,30 +5436,29 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/stopwatch", - "version": "v7.1.1", + "name": "symfony/process", + "version": "v7.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" + "url": "https://github.com/symfony/process.git", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/service-contracts": "^2.5|^3" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5604,10 +5478,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a way to profile code", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.2.5" }, "funding": [ { @@ -5623,34 +5497,30 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { - "name": "symfony/var-exporter", - "version": "v7.1.2", + "name": "symfony/stopwatch", + "version": "v7.2.4", "source": { "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "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" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\VarExporter\\": "" + "Symfony\\Component\\Stopwatch\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5662,28 +5532,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Provides a way to profile code", "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" - ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" }, "funding": [ { @@ -5699,7 +5559,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "theseer/tokenizer", @@ -5766,6 +5626,6 @@ "platform": { "php": "^8.2" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index f4d41ae..5916a08 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,6 +1,235 @@ parameters: ignoreErrors: - - message: "#^Method GraphQL\\\\Doctrine\\\\Types\\:\\:getOperator\\(\\) should return GraphQL\\\\Doctrine\\\\Definition\\\\Operator\\\\AbstractOperator but returns GraphQL\\\\Type\\\\Definition\\\\NamedType&GraphQL\\\\Type\\\\Definition\\\\Type\\.$#" + message: '#^Parameter \#1 \$isNot of method GraphQL\\Doctrine\\Definition\\Operator\\AbstractSimpleOperator\:\:getDqlOperator\(\) expects bool, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Definition/Operator/AbstractSimpleOperator.php + + - + message: '#^Parameter \#3 \$subject of function preg_replace expects array\\|string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: src/DocBlockReader.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 3 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Binary operation "\." between non\-falsy\-string and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''conditions'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''emptyStringAsHighest'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''field'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''joins'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''nullAsHighest'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''order'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 4 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Cannot access offset ''type'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#1 \$group of method GraphQL\\Doctrine\\Factory\\FilteredQueryBuilderFactory\:\:applyCollectedDqlConditions\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#1 \$name of method GraphQL\\Type\\Definition\\InputObjectType\:\:getField\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#2 \$name of method GraphQL\\Doctrine\\Factory\\Type\\SortingTypeFactory\:\:getCustomSorting\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#2 \$order of method Doctrine\\ORM\\QueryBuilder\:\:addOrderBy\(\) expects string\|null, mixed given\.$#' + identifier: argument.type + count: 3 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#3 \$joinType of method GraphQL\\Doctrine\\Factory\\FilteredQueryBuilderFactory\:\:createJoin\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#4 \$joins of method GraphQL\\Doctrine\\Factory\\FilteredQueryBuilderFactory\:\:applyJoinsAndFilters\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 2 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#5 \$conditions of method GraphQL\\Doctrine\\Factory\\FilteredQueryBuilderFactory\:\:applyJoinsAndFilters\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 2 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#5 \$field of method GraphQL\\Doctrine\\Definition\\Operator\\AbstractOperator\:\:getDqlCondition\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#5 \$order of callable GraphQL\\Doctrine\\Sorting\\SortingInterface expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#6 \$args of method GraphQL\\Doctrine\\Definition\\Operator\\AbstractOperator\:\:getDqlCondition\(\) expects array\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/FilteredQueryBuilderFactory.php + + - + message: '#^Parameter \#3 \$subject of function preg_replace expects array\\|string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/Type/AbstractTypeFactory.php + + - + message: '#^PHPDoc tag @var with type GraphQL\\Type\\Definition\\LeafType is not subtype of native type GraphQL\\Type\\Definition\\NamedType&GraphQL\\Type\\Definition\\Type\.$#' + identifier: varTag.nativeType + count: 3 + path: src/Factory/Type/FilterGroupConditionTypeFactory.php + + - + message: '#^Parameter \#1 \$property of method GraphQL\\Doctrine\\Factory\\AbstractFactory\:\:isPropertyExcluded\(\) expects ReflectionProperty, ReflectionProperty\|null given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/Type/FilterGroupConditionTypeFactory.php + + - + message: '#^Parameter \#1 \$property of method GraphQL\\Doctrine\\Factory\\Type\\FilterGroupConditionTypeFactory\:\:getLeafType\(\) expects ReflectionProperty, ReflectionProperty\|null given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/Type/FilterGroupConditionTypeFactory.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: src/Factory/Type/PartialInputTypeFactory.php + + - + message: '#^Cannot access offset ''defaultValue'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: src/Factory/Type/PartialInputTypeFactory.php + + - + message: '#^Cannot access offset ''type'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: src/Factory/Type/PartialInputTypeFactory.php + + - + message: '#^Property GraphQL\\Type\\Definition\\InputObjectType\:\:\$config \(array\{name\?\: string\|null, description\?\: string\|null, fields\: \(callable\(\)\: iterable\\)\|iterable\, parseValue\?\: callable\(array\\)\: mixed, astNode\?\: GraphQL\\Language\\AST\\InputObjectTypeDefinitionNode\|null, extensionASTNodes\?\: array\\|null\}\) does not accept array\{name\?\: string\|null, description\?\: string\|null, fields\: Closure\(\)\: list, parseValue\?\: callable\(array\\)\: mixed, astNode\?\: GraphQL\\Language\\AST\\InputObjectTypeDefinitionNode\|null, extensionASTNodes\?\: array\\|null\}\.$#' + identifier: assign.propertyType + count: 1 + path: src/Factory/Type/PartialInputTypeFactory.php + + - + message: '#^Parameter \#1 \$property of method GraphQL\\Doctrine\\Factory\\AbstractFactory\:\:isPropertyExcluded\(\) expects ReflectionProperty, ReflectionProperty\|null given\.$#' + identifier: argument.type + count: 1 + path: src/Factory/Type/SortingTypeFactory.php + + - + message: '#^Match arm comparison between '''' and '''' is always true\.$#' + identifier: match.alwaysTrue count: 1 path: src/Types.php + + - + message: '#^Method GraphQL\\Doctrine\\Types\:\:getOperator\(\) should return GraphQL\\Doctrine\\Definition\\Operator\\AbstractOperator but returns GraphQL\\Type\\Definition\\NamedType&GraphQL\\Type\\Definition\\Type\.$#' + identifier: return.type + count: 1 + path: src/Types.php + + - + message: '#^Binary operation "\." between mixed and '' LIKE \:'' results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: tests/Blog/Filtering/SearchOperatorType.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: tests/Blog/Filtering/SearchOperatorType.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true and ''passed validation…'' will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 1 + path: tests/TypesTest.php + + - + message: '#^Cannot access offset ''filter'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: tests/TypesTest.php + + - + message: '#^Cannot access offset ''sorting'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: tests/TypesTest.php + + - + message: '#^Parameter \#2 \$filter of method GraphQL\\Doctrine\\Types\:\:createFilteredQueryBuilder\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: tests/TypesTest.php + + - + message: '#^Parameter \#3 \$sorting of method GraphQL\\Doctrine\\Types\:\:createFilteredQueryBuilder\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: tests/TypesTest.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 538a6ef..a2a6125 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -9,7 +9,6 @@ parameters: ignoreErrors: - '~^Parameter #2 \$type of static method GraphQL\\Doctrine\\Utils::getOperatorTypeName~' - '~^Parameter #1 \$method of method GraphQL\\Doctrine\\Factory\\AbstractFieldsConfigurationFactory\:\:getMethodFullName\(\) expects ReflectionMethod, ReflectionFunctionAbstract given\.$~' - - '~^Parameter #3 \$subject of function preg_replace expects array\|string, string\|null given\.$~' - '~^Parameter #2 \$type of method GraphQL\\Doctrine\\Factory\\AbstractFactory::adjustNamespace\(\) expects string, string\|null given\.$~' - '~^Parameter #1 \$driver of method Doctrine\\Persistence\\Mapping\\Driver\\MappingDriverChain\:\:setDefaultDriver\(\) expects Doctrine\\Persistence\\Mapping\\Driver\\MappingDriver, Doctrine\\Persistence\\Mapping\\Driver\\MappingDriver\|null given\.$~' - '~^Parameter \#1 \$type of static method GraphQL\\Type\\Definition\\Type\:\:nonNull\(\) expects~' @@ -19,6 +18,8 @@ parameters: identifier: missingType.iterableValue - identifier: missingType.generics + - + identifier: function.alreadyNarrowedType includes: - phpstan-baseline.neon diff --git a/src/Attribute/Field.php b/src/Attribute/Field.php index 7e97da1..11dcda5 100644 --- a/src/Attribute/Field.php +++ b/src/Attribute/Field.php @@ -16,6 +16,9 @@ #[Attribute(Attribute::TARGET_METHOD)] final class Field implements ApiAttribute { + /** + * @var Argument[] + */ public array $args = []; public null|string|Type $type = null; diff --git a/src/Attribute/Reader/Reader.php b/src/Attribute/Reader/Reader.php index af25212..6299729 100644 --- a/src/Attribute/Reader/Reader.php +++ b/src/Attribute/Reader/Reader.php @@ -78,8 +78,6 @@ private function getAttributeInstances(ReflectionClass|ReflectionMethod|Reflecti foreach ($attributes as $attribute) { $instance = $attribute->newInstance(); - assert($instance instanceof ApiAttribute); - $instances[] = $instance; } diff --git a/src/Definition/Operator/AbstractAssociationOperatorType.php b/src/Definition/Operator/AbstractAssociationOperatorType.php index 1f49303..37c94e4 100644 --- a/src/Definition/Operator/AbstractAssociationOperatorType.php +++ b/src/Definition/Operator/AbstractAssociationOperatorType.php @@ -10,10 +10,10 @@ abstract class AbstractAssociationOperatorType extends AbstractOperator { - final public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + final public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if ($args === null) { - return null; + return ''; } if ($metadata->isSingleValuedAssociation($field)) { @@ -23,7 +23,7 @@ final public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, Clas return $this->getCollectionValuedDqlCondition($uniqueNameFactory, $metadata, $queryBuilder, $alias, $field, $args); } - abstract protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string; + abstract protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string; - abstract protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string; + abstract protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string; } diff --git a/src/Definition/Operator/AbstractOperator.php b/src/Definition/Operator/AbstractOperator.php index 1d90a12..066be1e 100644 --- a/src/Definition/Operator/AbstractOperator.php +++ b/src/Definition/Operator/AbstractOperator.php @@ -62,5 +62,5 @@ abstract protected function getConfiguration(LeafType $leafType): array; * @param string $field the field for the entity on which to apply the filter * @param null|array $args all arguments specific to this operator as declared in its configuration */ - abstract public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string; + abstract public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string; } diff --git a/src/Definition/Operator/AbstractSimpleOperator.php b/src/Definition/Operator/AbstractSimpleOperator.php index 34e5841..c2d5d78 100644 --- a/src/Definition/Operator/AbstractSimpleOperator.php +++ b/src/Definition/Operator/AbstractSimpleOperator.php @@ -33,10 +33,10 @@ final protected function getConfiguration(LeafType $leafType): array ]; } - final public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + final public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if ($args === null) { - return null; + return ''; } $param = $uniqueNameFactory->createParameterName(); diff --git a/src/Definition/Operator/BetweenOperatorType.php b/src/Definition/Operator/BetweenOperatorType.php index a70eaae..8ad4584 100644 --- a/src/Definition/Operator/BetweenOperatorType.php +++ b/src/Definition/Operator/BetweenOperatorType.php @@ -32,10 +32,10 @@ protected function getConfiguration(LeafType $leafType): array ]; } - public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if ($args === null) { - return null; + return ''; } $from = $uniqueNameFactory->createParameterName(); diff --git a/src/Definition/Operator/EmptyOperatorType.php b/src/Definition/Operator/EmptyOperatorType.php index 76deb7e..6caed68 100644 --- a/src/Definition/Operator/EmptyOperatorType.php +++ b/src/Definition/Operator/EmptyOperatorType.php @@ -25,14 +25,14 @@ protected function getConfiguration(LeafType $leafType): array ]; } - protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string + protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string { $null = $this->types->getOperator(NullOperatorType::class, self::id()); return $null->getDqlCondition($uniqueNameFactory, $metadata, $queryBuilder, $alias, $field, $args); } - protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string + protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string { $not = $args['not'] ? 'NOT ' : ''; diff --git a/src/Definition/Operator/GroupOperatorType.php b/src/Definition/Operator/GroupOperatorType.php index 929d64e..99e11ec 100644 --- a/src/Definition/Operator/GroupOperatorType.php +++ b/src/Definition/Operator/GroupOperatorType.php @@ -32,10 +32,10 @@ protected function getConfiguration(LeafType $leafType): array ]; } - public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { $queryBuilder->addGroupBy($alias . '.' . $field); - return null; + return ''; } } diff --git a/src/Definition/Operator/HaveOperatorType.php b/src/Definition/Operator/HaveOperatorType.php index bda4c9f..b749196 100644 --- a/src/Definition/Operator/HaveOperatorType.php +++ b/src/Definition/Operator/HaveOperatorType.php @@ -5,7 +5,7 @@ namespace GraphQL\Doctrine\Definition\Operator; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\OneToManyAssociationMapping; use Doctrine\ORM\QueryBuilder; use GraphQL\Doctrine\Factory\UniqueNameFactory; use GraphQL\Type\Definition\LeafType; @@ -30,14 +30,14 @@ protected function getConfiguration(LeafType $leafType): array ]; } - protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string + protected function getSingleValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string { $in = $this->types->getOperator(InOperatorType::class, self::id()); return $in->getDqlCondition($uniqueNameFactory, $metadata, $queryBuilder, $alias, $field, $args); } - protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): ?string + protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, array $args): string { $association = $metadata->associationMappings[$field]; $values = $uniqueNameFactory->createParameterName(); @@ -48,12 +48,12 @@ protected function getCollectionValuedDqlCondition(UniqueNameFactory $uniqueName // use `=`, and not `IN()`). So we simulate an approximation of MEMBER OF that support multiple values. But it // does **not** support composite identifiers. And that is fine because it is an official limitation of this // library anyway. - if ($association['type'] === ClassMetadataInfo::ONE_TO_MANY) { + if ($association instanceof OneToManyAssociationMapping) { $id = $metadata->identifier[0]; - $otherClassName = $association['targetEntity']; + $otherClassName = $association->targetEntity; $otherAlias = $uniqueNameFactory->createAliasName($otherClassName); - $otherField = $association['mappedBy']; + $otherField = $association->mappedBy; $otherMetadata = $queryBuilder->getEntityManager()->getClassMetadata($otherClassName); $otherId = $otherMetadata->identifier[0]; diff --git a/src/Definition/Operator/InOperatorType.php b/src/Definition/Operator/InOperatorType.php index 20df7da..d51274c 100644 --- a/src/Definition/Operator/InOperatorType.php +++ b/src/Definition/Operator/InOperatorType.php @@ -28,10 +28,10 @@ protected function getConfiguration(LeafType $leafType): array ]; } - public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if ($args === null) { - return null; + return ''; } $values = $uniqueNameFactory->createParameterName(); diff --git a/src/Definition/Operator/NullOperatorType.php b/src/Definition/Operator/NullOperatorType.php index 71a785c..d1148e1 100644 --- a/src/Definition/Operator/NullOperatorType.php +++ b/src/Definition/Operator/NullOperatorType.php @@ -24,10 +24,10 @@ protected function getConfiguration(LeafType $leafType): array ]; } - public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if ($args === null) { - return null; + return ''; } $not = $args['not'] ? 'NOT ' : ''; diff --git a/src/Factory/AbstractFieldsConfigurationFactory.php b/src/Factory/AbstractFieldsConfigurationFactory.php index 7b914bb..92c7ab3 100644 --- a/src/Factory/AbstractFieldsConfigurationFactory.php +++ b/src/Factory/AbstractFieldsConfigurationFactory.php @@ -147,8 +147,8 @@ private function findIdentityField(string $className): void { $this->metadata = $this->entityManager->getClassMetadata($className); foreach ($this->metadata->fieldMappings as $meta) { - if ($meta['id'] ?? false) { - $this->identityField = $meta['fieldName']; + if ($meta->id ?? false) { + $this->identityField = $meta->fieldName; } } } @@ -184,7 +184,7 @@ final protected function isIdentityField(string $fieldName): bool */ private function getTargetEntity(string $fieldName): ?string { - return $this->metadata->associationMappings[$fieldName]['targetEntity'] ?? null; + return $this->metadata->associationMappings[$fieldName]->targetEntity ?? null; } /** diff --git a/src/Factory/FilteredQueryBuilderFactory.php b/src/Factory/FilteredQueryBuilderFactory.php index a673642..39d44a4 100644 --- a/src/Factory/FilteredQueryBuilderFactory.php +++ b/src/Factory/FilteredQueryBuilderFactory.php @@ -127,7 +127,7 @@ private function applyJoins(ClassMetadata $metadata, array $joins, string $alias $joinedAlias = $this->createJoin($alias, $field, $join['type']); if (isset($join['joins']) || isset($join['conditions'])) { - $targetClassName = $metadata->getAssociationMapping($field)['targetEntity']; + $targetClassName = $metadata->getAssociationMapping($field)->targetEntity; $targetMetadata = $this->entityManager->getClassMetadata($targetClassName); $type = $this->types->getFilterGroupCondition($targetClassName); $this->applyJoinsAndFilters($targetMetadata, $joinedAlias, $type, $join['joins'] ?? [], $join['conditions'] ?? []); diff --git a/src/Factory/OutputFieldsConfigurationFactory.php b/src/Factory/OutputFieldsConfigurationFactory.php index 1cd69b6..c1bfbf1 100644 --- a/src/Factory/OutputFieldsConfigurationFactory.php +++ b/src/Factory/OutputFieldsConfigurationFactory.php @@ -26,7 +26,7 @@ protected function getMethodPattern(): string /** * Get the entire configuration for a method. */ - protected function methodToConfiguration(ReflectionMethod $method): ?array + protected function methodToConfiguration(ReflectionMethod $method): array { // Get a field from attribute, or an empty one $field = $this->reader->getAttribute($method, Field::class) ?? new Field(); diff --git a/src/Factory/Type/FilterGroupConditionTypeFactory.php b/src/Factory/Type/FilterGroupConditionTypeFactory.php index 2bf7461..c288d19 100644 --- a/src/Factory/Type/FilterGroupConditionTypeFactory.php +++ b/src/Factory/Type/FilterGroupConditionTypeFactory.php @@ -4,6 +4,7 @@ namespace GraphQL\Doctrine\Factory\Type; +use Doctrine\ORM\Mapping\FieldMapping; use GraphQL\Doctrine\Attribute\Filter; use GraphQL\Doctrine\Attribute\FilterGroupCondition; use GraphQL\Doctrine\Definition\Operator\AbstractOperator; @@ -60,7 +61,7 @@ public function create(string $className, string $typeName): InputObjectType // Get all scalar fields foreach ($metadata->fieldMappings as $mapping) { - $fieldName = $mapping['fieldName']; + $fieldName = $mapping->fieldName; $property = $metadata->getReflectionProperty($fieldName); // Skip exclusion specified by user @@ -76,7 +77,7 @@ public function create(string $className, string $typeName): InputObjectType // Get all collection fields foreach ($metadata->associationMappings as $mapping) { - $fieldName = $mapping['fieldName']; + $fieldName = $mapping->fieldName; $operators = $this->getOperators($fieldName, Type::id(), true, $metadata->isCollectionValuedAssociation($fieldName)); $filters[] = $this->getFieldConfiguration($typeName, $fieldName, $operators); @@ -105,9 +106,9 @@ public function create(string $className, string $typeName): InputObjectType /** * Read the type of the filterGroupCondition, either from Doctrine mapping type, or the override via attribute. */ - private function getLeafType(ReflectionProperty $property, array $mapping): LeafType + private function getLeafType(ReflectionProperty $property, FieldMapping $mapping): LeafType { - if ($mapping['id'] ?? false) { + if ($mapping->id ?? false) { return Type::id(); } @@ -127,7 +128,7 @@ private function getLeafType(ReflectionProperty $property, array $mapping): Leaf } /** @var LeafType $leafType */ - $leafType = $this->types->get($mapping['type']); + $leafType = $this->types->get($mapping->enumType ?? $mapping->type); return $leafType; } diff --git a/src/Factory/Type/FilterGroupJoinTypeFactory.php b/src/Factory/Type/FilterGroupJoinTypeFactory.php index ddb0a2e..b743a60 100644 --- a/src/Factory/Type/FilterGroupJoinTypeFactory.php +++ b/src/Factory/Type/FilterGroupJoinTypeFactory.php @@ -60,8 +60,8 @@ private function getJoinsFields(string $className): array $associations = $this->entityManager->getClassMetadata($className)->associationMappings; foreach ($associations as $association) { $field = [ - 'name' => $association['fieldName'], - 'type' => $this->types->getJoinOn($association['targetEntity']), + 'name' => $association->fieldName, + 'type' => $this->types->getJoinOn($association->targetEntity), ]; $fields[] = $field; diff --git a/src/Factory/Type/PartialInputTypeFactory.php b/src/Factory/Type/PartialInputTypeFactory.php index 332e12f..2025cb6 100644 --- a/src/Factory/Type/PartialInputTypeFactory.php +++ b/src/Factory/Type/PartialInputTypeFactory.php @@ -6,7 +6,6 @@ use GraphQL\Type\Definition\InputObjectType; use GraphQL\Type\Definition\NonNull; -use GraphQL\Type\Definition\Type; /** * A factory to create an InputObjectType from a Doctrine entity but with @@ -24,12 +23,12 @@ final class PartialInputTypeFactory extends AbstractTypeFactory public function create(string $className, string $typeName): InputObjectType { $type = clone $this->types->getInput($className); - /** @var callable $fieldsGetter */ $fieldsGetter = $type->config['fields']; $optionalFieldsGetter = function () use ($fieldsGetter): array { $optionalFields = []; - foreach ($fieldsGetter() as $field) { + $fields = is_callable($fieldsGetter) ? $fieldsGetter() : $fieldsGetter; + foreach ($fields as $field) { if ($field['type'] instanceof NonNull) { $field['type'] = $field['type']->getWrappedType(); } diff --git a/src/Factory/Type/SortingTypeFactory.php b/src/Factory/Type/SortingTypeFactory.php index 5204cb3..8f8d7bd 100644 --- a/src/Factory/Type/SortingTypeFactory.php +++ b/src/Factory/Type/SortingTypeFactory.php @@ -132,7 +132,7 @@ private function fillCache(string $className): void /** * Get all instance of custom sorting from the attribute. * - * @return SortingInterface[] + * @return array */ private function getFromAttribute(ReflectionClass $class): array { diff --git a/tests/Blog/Enum/Status.php b/tests/Blog/Enum/Status.php new file mode 100644 index 0000000..4ee2ffd --- /dev/null +++ b/tests/Blog/Enum/Status.php @@ -0,0 +1,12 @@ +createParameterName(); diff --git a/tests/Blog/Filtering/SearchOperatorType.php b/tests/Blog/Filtering/SearchOperatorType.php index f4488a9..7514a5a 100644 --- a/tests/Blog/Filtering/SearchOperatorType.php +++ b/tests/Blog/Filtering/SearchOperatorType.php @@ -25,15 +25,15 @@ protected function getConfiguration(LeafType $leafType): array ]; } - public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): ?string + public function getDqlCondition(UniqueNameFactory $uniqueNameFactory, ClassMetadata $metadata, QueryBuilder $queryBuilder, string $alias, string $field, ?array $args): string { if (!$args) { - return null; + return ''; } $words = preg_split('/[[:space:]]+/', (string) $args['term'], -1, PREG_SPLIT_NO_EMPTY); if (!$words) { - return null; + return ''; } $fields = $this->getSearchableFields($metadata, $alias); @@ -65,8 +65,8 @@ private function getSearchableFields(ClassMetadata $metadata, string $alias): ar $fields = []; $textType = ['string', 'text']; foreach ($metadata->fieldMappings as $g) { - if (in_array($g['type'], $textType, true)) { - $fields[] = $alias . '.' . $g['fieldName']; + if (in_array($g->type, $textType, true)) { + $fields[] = $alias . '.' . $g->fieldName; } } diff --git a/tests/Blog/Model/Special/ArrayOfEntity.php b/tests/Blog/Model/Special/ArrayOfEntity.php index 82471e2..6d8a89a 100644 --- a/tests/Blog/Model/Special/ArrayOfEntity.php +++ b/tests/Blog/Model/Special/ArrayOfEntity.php @@ -21,7 +21,7 @@ public function getUsers(): array } /** - * @return Collection + * @return Collection */ public function getOtherUsers(): Collection { diff --git a/tests/Blog/Model/Special/EnumSupport.php b/tests/Blog/Model/Special/EnumSupport.php new file mode 100644 index 0000000..acde5fe --- /dev/null +++ b/tests/Blog/Model/Special/EnumSupport.php @@ -0,0 +1,26 @@ +status; + } + + public function setStatus(Status $status): void + { + $this->status = $status; + } +} diff --git a/tests/Definition/Operator/OperatorsTest.php b/tests/Definition/Operator/OperatorsTest.php index 37845c4..2df4443 100644 --- a/tests/Definition/Operator/OperatorsTest.php +++ b/tests/Definition/Operator/OperatorsTest.php @@ -32,7 +32,7 @@ final class OperatorsTest extends TestCase * @param class-string $className */ #[DataProvider('providerOperator')] - public function testOperator(?string $expected, string $className, ?array $args, string $field = 'field'): void + public function testOperator(string $expected, string $className, ?array $args, string $field = 'field'): void { $operator = new $className($this->types, Type::string()); $uniqueNameFactory = new UniqueNameFactory(); @@ -60,7 +60,7 @@ public static function providerOperator(): array { return [ [ - null, + '', BetweenOperatorType::class, null, ], @@ -82,7 +82,7 @@ public static function providerOperator(): array ], ], [ - null, + '', HaveOperatorType::class, null, 'posts', @@ -106,7 +106,7 @@ public static function providerOperator(): array 'posts', ], [ - null, + '', HaveOperatorType::class, null, 'manager', @@ -148,7 +148,7 @@ public static function providerOperator(): array 'favoritePosts', ], [ - null, + '', EmptyOperatorType::class, null, 'posts', @@ -170,7 +170,7 @@ public static function providerOperator(): array 'posts', ], [ - null, + '', EmptyOperatorType::class, null, 'manager', @@ -192,7 +192,7 @@ public static function providerOperator(): array 'manager', ], [ - null, + '', EqualOperatorType::class, null, ], @@ -213,7 +213,7 @@ public static function providerOperator(): array ], ], [ - null, + '', GreaterOperatorType::class, null, ], @@ -234,7 +234,7 @@ public static function providerOperator(): array ], ], [ - null, + '', GreaterOrEqualOperatorType::class, null, ], @@ -255,7 +255,7 @@ public static function providerOperator(): array ], ], [ - null, + '', InOperatorType::class, null, ], @@ -276,7 +276,7 @@ public static function providerOperator(): array ], ], [ - null, + '', LessOperatorType::class, null, ], @@ -297,7 +297,7 @@ public static function providerOperator(): array ], ], [ - null, + '', LessOrEqualOperatorType::class, null, ], @@ -318,7 +318,7 @@ public static function providerOperator(): array ], ], [ - null, + '', LikeOperatorType::class, null, ], @@ -339,7 +339,7 @@ public static function providerOperator(): array ], ], [ - null, + '', NullOperatorType::class, null, ], @@ -360,19 +360,19 @@ public static function providerOperator(): array ], ], [ - null, + '', GroupOperatorType::class, null, ], [ - null, + '', GroupOperatorType::class, [ 'value' => null, ], ], [ - null, + '', GroupOperatorType::class, [ 'value' => true, diff --git a/tests/EntityManagerTrait.php b/tests/EntityManagerTrait.php index 6634904..f1d18c7 100644 --- a/tests/EntityManagerTrait.php +++ b/tests/EntityManagerTrait.php @@ -18,7 +18,10 @@ trait EntityManagerTrait private function setUpEntityManager(): void { $config = ORMSetup::createAttributeMetadataConfiguration([__DIR__ . '/Blog/Model'], true); - $connection = DriverManager::getConnection(['url' => 'sqlite:///:memory:']); + $connection = DriverManager::getConnection([ + 'driver' => 'sqlite3', + 'memory' => true, + ]); $this->entityManager = new EntityManager($connection, $config); } diff --git a/tests/FilterTypesTest.php b/tests/FilterTypesTest.php index b67d2d7..a118a52 100644 --- a/tests/FilterTypesTest.php +++ b/tests/FilterTypesTest.php @@ -7,6 +7,7 @@ use Exception; use GraphQL\Type\Definition\Type; use GraphQLTests\Doctrine\Blog\Model\Post; +use GraphQLTests\Doctrine\Blog\Model\Special\EnumSupport; use GraphQLTests\Doctrine\Blog\Model\Special\InvalidFilter; use GraphQLTests\Doctrine\Blog\Model\Special\InvalidFilterGroupCondition; use GraphQLTests\Doctrine\Blog\Model\Special\ModelWithTraits; @@ -20,7 +21,6 @@ final class FilterTypesTest extends TestCase public function testCanGetPostFilter(): void { $actual = $this->types->getFilter(Post::class); - $this->assertAllTypes('tests/data/PostFilter.graphqls', $actual); } @@ -30,6 +30,12 @@ public function testCanInheritFilterFromTraits(): void $this->assertAllTypes('tests/data/ModelWithTraitsFilter.graphqls', $actual); } + public function testCanUseNativeEnum(): void + { + $actual = $this->types->getFilter(EnumSupport::class); + $this->assertAllTypes('tests/data/EnumSupportFilter.graphqls', $actual); + } + public static function providerFilteredQueryBuilder(): array { $values = []; diff --git a/tests/InputTypesTest.php b/tests/InputTypesTest.php index a02ca17..6f1fac6 100644 --- a/tests/InputTypesTest.php +++ b/tests/InputTypesTest.php @@ -41,6 +41,12 @@ public function testSelfSupportInput(): void $this->assertType('tests/data/SelfSupportInput.graphqls', $actual); } + public function testEnumSupportInput(): void + { + $actual = $this->types->getInput(Blog\Model\Special\EnumSupport::class); + $this->assertType('tests/data/EnumSupportInput.graphqls', $actual); + } + public function testNamespaceSupportInput(): void { $actual = $this->types->getInput(Blog\Model\Special\NamespaceSupport::class); diff --git a/tests/OutputTypesTest.php b/tests/OutputTypesTest.php index a882cca..b9f11fe 100644 --- a/tests/OutputTypesTest.php +++ b/tests/OutputTypesTest.php @@ -55,6 +55,12 @@ public function testSelfSupportOutput(): void $this->assertType('tests/data/SelfSupport.graphqls', $actual); } + public function testEnumSupportOutput(): void + { + $actual = $this->types->getOutput(Blog\Model\Special\EnumSupport::class); + $this->assertType('tests/data/EnumSupport.graphqls', $actual); + } + public function testNamespaceSupportOutput(): void { $actual = $this->types->getOutput(Blog\Model\Special\NamespaceSupport::class); diff --git a/tests/TypesTrait.php b/tests/TypesTrait.php index 6e9c5fa..6c8258f 100644 --- a/tests/TypesTrait.php +++ b/tests/TypesTrait.php @@ -11,14 +11,18 @@ use GraphQL\Type\Definition\InputType; use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\OutputType; +use GraphQL\Type\Definition\PhpEnumType; use GraphQL\Type\Definition\Type; use GraphQL\Type\Definition\WrappingType; use GraphQL\Type\Schema; use GraphQL\Utils\SchemaPrinter; +use GraphQLTests\Doctrine\Blog\Enum\Status; use GraphQLTests\Doctrine\Blog\Types\CustomType; use GraphQLTests\Doctrine\Blog\Types\DateTimeType; use GraphQLTests\Doctrine\Blog\Types\PostStatusType; +use Laminas\ServiceManager\Factory\AbstractFactoryInterface; use Laminas\ServiceManager\ServiceManager; +use Psr\Container\ContainerInterface; use stdClass; /** @@ -44,6 +48,19 @@ public function setUp(): void 'aliases' => [ 'datetime_immutable' => DateTimeImmutable::class, // Declare alias for Doctrine type to be used for filters ], + 'abstract_factories' => [ + new class() implements AbstractFactoryInterface { + public function canCreate(ContainerInterface $container, string $requestedName): bool + { + return $requestedName === Status::class; + } + + public function __invoke(ContainerInterface $container, string $requestedName, ?array $options = null): PhpEnumType + { + return new PhpEnumType(Status::class); + } + }, + ], ]); $this->types = new Types($this->entityManager, $customTypes); diff --git a/tests/data/EnumSupport.graphqls b/tests/data/EnumSupport.graphqls new file mode 100644 index 0000000..56239b4 --- /dev/null +++ b/tests/data/EnumSupport.graphqls @@ -0,0 +1,5 @@ +type EnumSupport { + status: Status! + id: ID! + creationDate: DateTime! +} diff --git a/tests/data/EnumSupportFilter.graphqls b/tests/data/EnumSupportFilter.graphqls new file mode 100644 index 0000000..dc34461 --- /dev/null +++ b/tests/data/EnumSupportFilter.graphqls @@ -0,0 +1,257 @@ +schema { + query: query +} + +type query { + defaultField(defaultArg: EnumSupportFilter): Boolean +} + +"To be used as a filter for objects of type `EnumSupport`" +input EnumSupportFilter { + groups: [EnumSupportFilterGroup!] +} + +"Specify a set of joins and conditions to filter `EnumSupport`" +input EnumSupportFilterGroup { + "The logic operator to be used to append this group" + groupLogic: LogicalOperator = AND + + "The logic operator to be used within all conditions in this group" + conditionsLogic: LogicalOperator = AND + + "Conditions to be applied on fields" + conditions: [EnumSupportFilterGroupCondition!] +} + +"Logical operator to be used in conditions" +enum LogicalOperator { + AND + OR +} + +"Type to specify conditions on fields" +input EnumSupportFilterGroupCondition { + id: EnumSupportFilterGroupConditionId + creationDate: EnumSupportFilterGroupConditionCreationDate + status: EnumSupportFilterGroupConditionStatus +} + +"Type to specify a condition on a specific field" +input EnumSupportFilterGroupConditionId { + like: LikeOperatorID + between: BetweenOperatorID + equal: EqualOperatorID + greater: GreaterOperatorID + greaterOrEqual: GreaterOrEqualOperatorID + in: InOperatorID + less: LessOperatorID + lessOrEqual: LessOrEqualOperatorID + null: NullOperatorID + group: GroupOperatorID + modulo: ModuloOperatorInt +} + +input LikeOperatorID { + value: ID! + not: Boolean = false +} + +input BetweenOperatorID { + from: ID! + to: ID! + not: Boolean = false +} + +input EqualOperatorID { + value: ID! + not: Boolean = false +} + +input GreaterOperatorID { + value: ID! + not: Boolean = false +} + +input GreaterOrEqualOperatorID { + value: ID! + not: Boolean = false +} + +input InOperatorID { + values: [ID!]! + not: Boolean = false +} + +input LessOperatorID { + value: ID! + not: Boolean = false +} + +input LessOrEqualOperatorID { + value: ID! + not: Boolean = false +} + +input NullOperatorID { + not: Boolean = false +} + +""" +Will apply a `GROUP BY` on the field to select unique values existing in database. + +This is typically useful to present a list of suggestions to the end-user, while still allowing him to enter arbitrary values. +""" +input GroupOperatorID { + "This field is never used and can be ignored" + value: Boolean = null +} + +input ModuloOperatorInt { + value: Int! +} + +"Type to specify a condition on a specific field" +input EnumSupportFilterGroupConditionCreationDate { + like: LikeOperatorDateTime + between: BetweenOperatorDateTime + equal: EqualOperatorDateTime + greater: GreaterOperatorDateTime + greaterOrEqual: GreaterOrEqualOperatorDateTime + in: InOperatorDateTime + less: LessOperatorDateTime + lessOrEqual: LessOrEqualOperatorDateTime + null: NullOperatorDateTime + group: GroupOperatorDateTime +} + +input LikeOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +scalar DateTime + +input BetweenOperatorDateTime { + from: DateTime! + to: DateTime! + not: Boolean = false +} + +input EqualOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +input GreaterOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +input GreaterOrEqualOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +input InOperatorDateTime { + values: [DateTime!]! + not: Boolean = false +} + +input LessOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +input LessOrEqualOperatorDateTime { + value: DateTime! + not: Boolean = false +} + +input NullOperatorDateTime { + not: Boolean = false +} + +""" +Will apply a `GROUP BY` on the field to select unique values existing in database. + +This is typically useful to present a list of suggestions to the end-user, while still allowing him to enter arbitrary values. +""" +input GroupOperatorDateTime { + "This field is never used and can be ignored" + value: Boolean = null +} + +"Type to specify a condition on a specific field" +input EnumSupportFilterGroupConditionStatus { + like: LikeOperatorStatus + between: BetweenOperatorStatus + equal: EqualOperatorStatus + greater: GreaterOperatorStatus + greaterOrEqual: GreaterOrEqualOperatorStatus + in: InOperatorStatus + less: LessOperatorStatus + lessOrEqual: LessOrEqualOperatorStatus + null: NullOperatorStatus + group: GroupOperatorStatus +} + +input LikeOperatorStatus { + value: Status! + not: Boolean = false +} + +enum Status { + New + Active + Archived +} + +input BetweenOperatorStatus { + from: Status! + to: Status! + not: Boolean = false +} + +input EqualOperatorStatus { + value: Status! + not: Boolean = false +} + +input GreaterOperatorStatus { + value: Status! + not: Boolean = false +} + +input GreaterOrEqualOperatorStatus { + value: Status! + not: Boolean = false +} + +input InOperatorStatus { + values: [Status!]! + not: Boolean = false +} + +input LessOperatorStatus { + value: Status! + not: Boolean = false +} + +input LessOrEqualOperatorStatus { + value: Status! + not: Boolean = false +} + +input NullOperatorStatus { + not: Boolean = false +} + +""" +Will apply a `GROUP BY` on the field to select unique values existing in database. + +This is typically useful to present a list of suggestions to the end-user, while still allowing him to enter arbitrary values. +""" +input GroupOperatorStatus { + "This field is never used and can be ignored" + value: Boolean = null +} diff --git a/tests/data/EnumSupportInput.graphqls b/tests/data/EnumSupportInput.graphqls new file mode 100644 index 0000000..68e50fe --- /dev/null +++ b/tests/data/EnumSupportInput.graphqls @@ -0,0 +1,4 @@ +input EnumSupportInput { + status: Status! + creationDate: DateTime! +} diff --git a/tests/data/PostFilter.graphqls b/tests/data/PostFilter.graphqls index a87b322..23ca54c 100644 --- a/tests/data/PostFilter.graphqls +++ b/tests/data/PostFilter.graphqls @@ -34,17 +34,91 @@ enum LogicalOperator { "Type to specify conditions on fields" input PostFilterGroupCondition { + id: PostFilterGroupConditionId creationDate: PostFilterGroupConditionCreationDate title: PostFilterGroupConditionTitle body: PostFilterGroupConditionBody publicationDate: PostFilterGroupConditionPublicationDate status: PostFilterGroupConditionStatus - id: PostFilterGroupConditionId user: PostFilterGroupConditionUser noInversedBy: PostFilterGroupConditionNoInversedBy custom: PostFilterGroupConditionCustom } +"Type to specify a condition on a specific field" +input PostFilterGroupConditionId { + like: LikeOperatorID + between: BetweenOperatorID + equal: EqualOperatorID + greater: GreaterOperatorID + greaterOrEqual: GreaterOrEqualOperatorID + in: InOperatorID + less: LessOperatorID + lessOrEqual: LessOrEqualOperatorID + null: NullOperatorID + group: GroupOperatorID + modulo: ModuloOperatorInt +} + +input LikeOperatorID { + value: ID! + not: Boolean = false +} + +input BetweenOperatorID { + from: ID! + to: ID! + not: Boolean = false +} + +input EqualOperatorID { + value: ID! + not: Boolean = false +} + +input GreaterOperatorID { + value: ID! + not: Boolean = false +} + +input GreaterOrEqualOperatorID { + value: ID! + not: Boolean = false +} + +input InOperatorID { + values: [ID!]! + not: Boolean = false +} + +input LessOperatorID { + value: ID! + not: Boolean = false +} + +input LessOrEqualOperatorID { + value: ID! + not: Boolean = false +} + +input NullOperatorID { + not: Boolean = false +} + +""" +Will apply a `GROUP BY` on the field to select unique values existing in database. + +This is typically useful to present a list of suggestions to the end-user, while still allowing him to enter arbitrary values. +""" +input GroupOperatorID { + "This field is never used and can be ignored" + value: Boolean = null +} + +input ModuloOperatorInt { + value: Int! +} + "Type to specify a condition on a specific field" input PostFilterGroupConditionCreationDate { like: LikeOperatorDateTime @@ -287,80 +361,6 @@ input GroupOperatorPostStatus { value: Boolean = null } -"Type to specify a condition on a specific field" -input PostFilterGroupConditionId { - like: LikeOperatorID - between: BetweenOperatorID - equal: EqualOperatorID - greater: GreaterOperatorID - greaterOrEqual: GreaterOrEqualOperatorID - in: InOperatorID - less: LessOperatorID - lessOrEqual: LessOrEqualOperatorID - null: NullOperatorID - group: GroupOperatorID - modulo: ModuloOperatorInt -} - -input LikeOperatorID { - value: ID! - not: Boolean = false -} - -input BetweenOperatorID { - from: ID! - to: ID! - not: Boolean = false -} - -input EqualOperatorID { - value: ID! - not: Boolean = false -} - -input GreaterOperatorID { - value: ID! - not: Boolean = false -} - -input GreaterOrEqualOperatorID { - value: ID! - not: Boolean = false -} - -input InOperatorID { - values: [ID!]! - not: Boolean = false -} - -input LessOperatorID { - value: ID! - not: Boolean = false -} - -input LessOrEqualOperatorID { - value: ID! - not: Boolean = false -} - -input NullOperatorID { - not: Boolean = false -} - -""" -Will apply a `GROUP BY` on the field to select unique values existing in database. - -This is typically useful to present a list of suggestions to the end-user, while still allowing him to enter arbitrary values. -""" -input GroupOperatorID { - "This field is never used and can be ignored" - value: Boolean = null -} - -input ModuloOperatorInt { - value: Int! -} - "Type to specify a condition on a specific field" input PostFilterGroupConditionUser { have: HaveOperatorID @@ -435,16 +435,31 @@ enum JoinType { "Type to specify conditions on fields" input UserFilterGroupCondition { + id: UserFilterGroupConditionId creationDate: UserFilterGroupConditionCreationDate name: UserFilterGroupConditionName email: UserFilterGroupConditionEmail isAdministrator: UserFilterGroupConditionIsAdministrator - id: UserFilterGroupConditionId posts: UserFilterGroupConditionPosts favoritePosts: UserFilterGroupConditionFavoritePosts manager: UserFilterGroupConditionManager } +"Type to specify a condition on a specific field" +input UserFilterGroupConditionId { + like: LikeOperatorID + between: BetweenOperatorID + equal: EqualOperatorID + greater: GreaterOperatorID + greaterOrEqual: GreaterOrEqualOperatorID + in: InOperatorID + less: LessOperatorID + lessOrEqual: LessOrEqualOperatorID + null: NullOperatorID + group: GroupOperatorID + modulo: ModuloOperatorInt +} + "Type to specify a condition on a specific field" input UserFilterGroupConditionCreationDate { like: LikeOperatorDateTime @@ -556,21 +571,6 @@ input GroupOperatorBoolean { value: Boolean = null } -"Type to specify a condition on a specific field" -input UserFilterGroupConditionId { - like: LikeOperatorID - between: BetweenOperatorID - equal: EqualOperatorID - greater: GreaterOperatorID - greaterOrEqual: GreaterOrEqualOperatorID - in: InOperatorID - less: LessOperatorID - lessOrEqual: LessOrEqualOperatorID - null: NullOperatorID - group: GroupOperatorID - modulo: ModuloOperatorInt -} - "Type to specify a condition on a specific field" input UserFilterGroupConditionPosts { have: HaveOperatorID @@ -624,22 +624,8 @@ input JoinOnNoInversedBy { "Type to specify conditions on fields" input NoInversedByFilterGroupCondition { - creationDate: NoInversedByFilterGroupConditionCreationDate id: NoInversedByFilterGroupConditionId -} - -"Type to specify a condition on a specific field" -input NoInversedByFilterGroupConditionCreationDate { - like: LikeOperatorDateTime - between: BetweenOperatorDateTime - equal: EqualOperatorDateTime - greater: GreaterOperatorDateTime - greaterOrEqual: GreaterOrEqualOperatorDateTime - in: InOperatorDateTime - less: LessOperatorDateTime - lessOrEqual: LessOrEqualOperatorDateTime - null: NullOperatorDateTime - group: GroupOperatorDateTime + creationDate: NoInversedByFilterGroupConditionCreationDate } "Type to specify a condition on a specific field" @@ -656,3 +642,17 @@ input NoInversedByFilterGroupConditionId { group: GroupOperatorID modulo: ModuloOperatorInt } + +"Type to specify a condition on a specific field" +input NoInversedByFilterGroupConditionCreationDate { + like: LikeOperatorDateTime + between: BetweenOperatorDateTime + equal: EqualOperatorDateTime + greater: GreaterOperatorDateTime + greaterOrEqual: GreaterOrEqualOperatorDateTime + in: InOperatorDateTime + less: LessOperatorDateTime + lessOrEqual: LessOrEqualOperatorDateTime + null: NullOperatorDateTime + group: GroupOperatorDateTime +} diff --git a/tests/data/PostSorting.graphqls b/tests/data/PostSorting.graphqls index dda957b..4a5615f 100644 --- a/tests/data/PostSorting.graphqls +++ b/tests/data/PostSorting.graphqls @@ -19,12 +19,12 @@ input PostSorting { "Fields available for `PostSorting`" enum PostSortingField { + id creationDate title body publicationDate status - id userName postType pseudoRandom diff --git a/tests/data/UserSorting.graphqls b/tests/data/UserSorting.graphqls index 969a29f..962ea07 100644 --- a/tests/data/UserSorting.graphqls +++ b/tests/data/UserSorting.graphqls @@ -19,11 +19,11 @@ input UserSorting { "Fields available for `UserSorting`" enum UserSortingField { + id creationDate name email isAdministrator - id pseudoRandom }