From 8f1c0bdebf71d672b7a0db25ff641a02cb89d4dc Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 11:27:55 +0300 Subject: [PATCH 1/9] Updated composer dependencies for Laravel 11. --- composer.json | 18 +- composer.lock | 4101 ++++++++++++++++++++++++++++++------------------- 2 files changed, 2548 insertions(+), 1571 deletions(-) diff --git a/composer.json b/composer.json index 27c8c61..ba63a29 100644 --- a/composer.json +++ b/composer.json @@ -19,18 +19,18 @@ } ], "require-dev": { - "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/php-cs-fixer": "^3.53", "phpunit/phpunit": "^10", - "mockery/mockery": "^1.5", - "orchestra/testbench": "^8" + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0" }, "require": { - "illuminate/support": "^10", - "illuminate/database": "^10", - "illuminate/contracts": "^10", - "illuminate/console": "^10", - "illuminate/http": "^10", - "illuminate/auth": "^10" + "illuminate/support": "^11.0", + "illuminate/database": "^11.0", + "illuminate/contracts": "^11.0", + "illuminate/console": "^11.0", + "illuminate/http": "^11.0", + "illuminate/auth": "^11.0" }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index b5cdc6a..fa63975 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3dee41ddbae79599e5ef0a3fb5e322d9", + "content-hash": "d480476a2ab97e2fc7b2549ede35e236", "packages": [ { "name": "brick/math", - "version": "0.10.2", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.0", - "vimeo/psalm": "4.25.0" + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -52,7 +51,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.2" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { @@ -60,7 +59,76 @@ "type": "github" } ], - "time": "2022-08-10T22:54:19+00:00" + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" }, { "name": "dflydev/dot-access-data", @@ -139,28 +207,28 @@ }, { "name": "doctrine/inflector", - "version": "2.0.6", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", "autoload": { @@ -210,7 +278,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -226,31 +294,31 @@ "type": "tidelift" } ], - "time": "2022-10-20T09:10:12+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -287,7 +355,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -303,20 +371,20 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.2", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "shasum": "" }, "require": { @@ -356,7 +424,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" }, "funding": [ { @@ -364,20 +432,20 @@ "type": "github" } ], - "time": "2022-09-10T18:51:20+00:00" + "time": "2023-08-10T19:36:49+00:00" }, { "name": "egulias/email-validator", - "version": "4.0.1", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { @@ -386,8 +454,8 @@ "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -423,7 +491,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { @@ -431,25 +499,25 @@ "type": "github" } ], - "time": "2023-01-14T14:17:03+00:00" + "time": "2023-10-06T06:47:41+00:00" }, { "name": "fruitcake/php-cors", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" + "symfony/http-foundation": "^4.4|^5.4|^6|^7" }, "require-dev": { "phpstan/phpstan": "^1.4", @@ -459,7 +527,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -490,7 +558,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" }, "funding": [ { @@ -502,28 +570,28 @@ "type": "github" } ], - "time": "2022-02-20T15:07:15+00:00" + "time": "2023-10-12T05:21:21+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.0", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -552,7 +620,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -564,39 +632,59 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:56:11+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { - "name": "guzzlehttp/uri-template", - "version": "v1.0.1", + "name": "guzzlehttp/guzzle", + "version": "7.8.1", "source": { "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.17" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.19 || ^9.5.8", - "uri-template/tests": "1.0.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -614,6 +702,11 @@ "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, { "name": "George Mponos", "email": "gmponos@gmail.com", @@ -623,16 +716,33 @@ "name": "Tobias Nyholm", "email": "tobias.nyholm@gmail.com", "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "A polyfill class for uri_template of PHP", + "description": "Guzzle is a PHP HTTP client library", "keywords": [ - "guzzlehttp", - "uri-template" + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" ], "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -644,188 +754,43 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", "type": "tidelift" } ], - "time": "2021-10-07T12:57:01+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { - "name": "laravel/framework", - "version": "v10.0.3", + "name": "guzzlehttp/promises", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "0bd303853444de33f4fcb16d13bd7574030aa3d4" + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0bd303853444de33f4fcb16d13bd7574030aa3d4", - "reference": "0bd303853444de33f4fcb16d13bd7574030aa3d4", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "composer-runtime-api": "^2.2", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-session": "*", - "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", - "guzzlehttp/uri-template": "^1.0", - "laravel/serializable-closure": "^1.3", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", - "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.62.1", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.2", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/process": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", - "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.0", - "pda/pheanstalk": "^4.0", - "phpstan/phpdoc-parser": "^1.15", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.6.0 || ^10.0.7", - "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", - "ext-apcu": "Required to use the APC cache driver.", - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", - "ext-pdo": "Required to use all database features.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^2.0.2).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "10.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] + "GuzzleHttp\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -834,34 +799,526 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", + "description": "Guzzle promises library", "keywords": [ - "framework", - "laravel" + "promise" ], "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, - "time": "2023-02-16T22:03:27+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:19:20+00:00" }, { - "name": "laravel/serializable-closure", - "version": "v1.3.0", + "name": "guzzlehttp/psr7", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:05:35+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" + }, + { + "name": "laravel/framework", + "version": "v11.3.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "3b87d0767e9cbddec46480d883010ba720e50dea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/3b87d0767e9cbddec46480d883010ba720e50dea", + "reference": "3b87d0767e9cbddec46480d883010ba720e50dea", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.15", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "ext-gmp": "*", + "fakerphp/faker": "^1.23", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.6", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.0.6", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.5|^11.0", + "predis/predis": "^2.0.2", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-04-10T15:13:49+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.18", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "3b5e6b03f1f1175574b5a32331d99c9819da9848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/3b5e6b03f1f1175574b5a32331d99c9819da9848", + "reference": "3b5e6b03f1f1175574b5a32331d99c9819da9848", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.18" + }, + "time": "2024-04-04T17:41:50+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -908,20 +1365,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-01-30T18:31:20+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "league/commonmark", - "version": "2.3.9", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", - "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", "shasum": "" }, "require": { @@ -934,7 +1391,7 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", + "commonmark/cmark": "0.30.3", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", @@ -944,10 +1401,10 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -957,7 +1414,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" } }, "autoload": { @@ -1014,7 +1471,7 @@ "type": "tidelift" } ], - "time": "2023-02-15T14:07:24+00:00" + "time": "2024-02-02T11:59:32+00:00" }, { "name": "league/config", @@ -1100,23 +1557,26 @@ }, { "name": "league/flysystem", - "version": "3.12.3", + "version": "3.27.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", - "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4729745b1ab737908c7d055148c9a6b3e959832f", + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f", "shasum": "" }, "require": { + "league/flysystem-local": "^3.0.0", "league/mime-type-detection": "^1.0.0", "php": "^8.0.2" }, "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", "aws/aws-sdk-php": "3.209.31 || 3.210.0", "guzzlehttp/guzzle": "<7.0", "guzzlehttp/ringphp": "<1.1.1", @@ -1124,9 +1584,9 @@ "symfony/http-client": "<5.2" }, "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.1", - "aws/aws-sdk-php": "^3.220.0", + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", @@ -1134,10 +1594,10 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.14", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^9.5.11", - "sabre/dav": "^4.3.1" + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -1171,7 +1631,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.12.3" + "source": "https://github.com/thephpleague/flysystem/tree/3.27.0" }, "funding": [ { @@ -1181,36 +1641,91 @@ { "url": "https://github.com/frankdejonge", "type": "github" + } + ], + "time": "2024-04-07T19:17:50+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.25.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" }, { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" + "url": "https://github.com/frankdejonge", + "type": "github" } ], - "time": "2023-02-18T15:32:41+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/mime-type-detection", - "version": "1.11.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { @@ -1231,7 +1746,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" }, "funding": [ { @@ -1243,20 +1758,20 @@ "type": "tidelift" } ], - "time": "2022-04-17T13:12:02+00:00" + "time": "2024-01-28T23:22:08+00:00" }, { "name": "monolog/monolog", - "version": "3.3.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", "shasum": "" }, "require": { @@ -1271,7 +1786,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -1279,7 +1794,7 @@ "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.5.17", "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", @@ -1332,7 +1847,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + "source": "https://github.com/Seldaek/monolog/tree/3.6.0" }, "funding": [ { @@ -1344,41 +1859,45 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:46:10+00:00" + "time": "2024-04-12T21:02:21+00:00" }, { "name": "nesbot/carbon", - "version": "2.66.0", + "version": "3.2.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" + "reference": "82c28278c1c8f7b82dcdab25692237f052ffc8d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/82c28278c1c8f7b82dcdab25692237f052ffc8d8", + "reference": "82c28278c1c8f7b82dcdab25692237f052ffc8d8", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.52.1", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.65", + "phpunit/phpunit": "^10.5.15", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -1386,8 +1905,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -1446,35 +1965,35 @@ "type": "tidelift" } ], - "time": "2023-01-29T18:53:47+00:00" + "time": "2024-04-05T09:58:10+00:00" }, { "name": "nette/schema", - "version": "v1.2.3", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.4", "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1506,26 +2025,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.3" + "source": "https://github.com/nette/schema/tree/v1.3.0" }, - "time": "2022-10-13T01:24:26+00:00" + "time": "2023-12-11T11:54:22+00:00" }, { "name": "nette/utils", - "version": "v4.0.0", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", "shasum": "" }, "require": { - "php": ">=8.0 <8.3" + "php": ">=8.0 <8.4" }, "conflict": { "nette/finder": "<3", @@ -1533,7 +2052,7 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", + "nette/tester": "^2.5", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, @@ -1543,8 +2062,7 @@ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, "type": "library", "extra": { @@ -1593,39 +2111,38 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.0" + "source": "https://github.com/nette/utils/tree/v4.0.4" }, - "time": "2023-02-02T10:41:53+00:00" + "time": "2024-01-17T16:50:36+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.4" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -1634,6 +2151,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1665,7 +2185,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { @@ -1681,28 +2201,28 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.0", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8", - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -1744,7 +2264,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -1756,7 +2276,55 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:51:26+00:00" + "time": "2023-11-12T21:59:55+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" }, { "name": "psr/container", @@ -1778,12 +2346,168 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1796,47 +2520,48 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "psr/http-message", + "version": "2.0", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1846,20 +2571,23 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Standard interfaces for event handling.", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "events", + "http", + "http-message", "psr", - "psr-14" + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -1962,6 +2690,50 @@ }, "time": "2021-10-29T13:26:27+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, { "name": "ramsey/collection", "version": "2.0.0", @@ -2053,20 +2825,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.3", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -2129,7 +2901,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -2141,53 +2913,124 @@ "type": "tidelift" } ], - "time": "2023-01-12T18:13:24+00:00" + "time": "2023-11-08T05:53:05+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/8b9d08887353d627d5f6c3bf3373b398b49051c2", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-03-02T12:46:12+00:00" }, { "name": "symfony/console", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e294254f2191762c1d137aed4b94e966965e985" + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", - "reference": "3e294254f2191762c1d137aed4b94e966965e985", + "url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2216,12 +3059,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.5" + "source": "https://github.com/symfony/console/tree/v7.0.6" }, "funding": [ { @@ -2237,24 +3080,24 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-04-01T11:04:53+00:00" }, { "name": "symfony/css-selector", - "version": "v6.2.5", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -2286,7 +3129,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.2.5" + "source": "https://github.com/symfony/css-selector/tree/v7.0.3" }, "funding": [ { @@ -2302,20 +3145,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { @@ -2324,7 +3167,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2353,7 +3196,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.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -2369,31 +3212,35 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/error-handler", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" + "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/46a4cc138f799886d4bd70477c55c699d3e9dfc8", + "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -2424,7 +3271,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.2.5" + "source": "https://github.com/symfony/error-handler/tree/v7.0.6" }, "funding": [ { @@ -2440,28 +3287,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-03-19T11:57:22+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.5", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -2469,17 +3317,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2507,7 +3351,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/v6.2.5" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { @@ -2523,33 +3367,30 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" + "reference": "4e64b49bf370ade88e567de29465762e316e4224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", + "reference": "4e64b49bf370ade88e567de29465762e316e4224", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2586,7 +3427,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" }, "funding": [ { @@ -2602,27 +3443,27 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/finder", - "version": "v6.2.5", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2650,7 +3491,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.5" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -2666,41 +3507,40 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.2.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" + "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8789625dcf36e5fbf753014678a1e090f1bc759c", + "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2728,7 +3568,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" + "source": "https://github.com/symfony/http-foundation/tree/v7.0.6" }, "funding": [ { @@ -2744,74 +3584,75 @@ "type": "tidelift" } ], - "time": "2023-01-30T15:46:28+00:00" + "time": "2024-03-19T11:46:48+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.2.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" + "reference": "34c872391046d59af804af62d4573b829cfe4824" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34c872391046d59af804af62d4573b829cfe4824", + "reference": "34c872391046d59af804af62d4573b829cfe4824", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^6.1", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.2", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", - "twig/twig": "<2.13" + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.2", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -2839,7 +3680,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.2.6" + "source": "https://github.com/symfony/http-kernel/tree/v7.0.6" }, "funding": [ { @@ -2855,42 +3696,43 @@ "type": "tidelift" } ], - "time": "2023-02-01T08:32:25+00:00" + "time": "2024-04-03T06:12:25+00:00" }, { "name": "symfony/mailer", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" + "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "url": "https://api.github.com/repos/symfony/mailer/zipball/eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", + "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2918,7 +3760,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.2.5" + "source": "https://github.com/symfony/mailer/tree/v7.0.6" }, "funding": [ { @@ -2934,24 +3776,24 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2024-03-28T09:20:36+00:00" }, { "name": "symfony/mime", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" + "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", + "url": "https://api.github.com/repos/symfony/mime/zipball/99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", + "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -2959,17 +3801,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3001,7 +3844,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.5" + "source": "https://github.com/symfony/mime/tree/v7.0.6" }, "funding": [ { @@ -3017,20 +3860,20 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2024-03-21T19:37:36+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -3044,9 +3887,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3083,7 +3923,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -3099,20 +3939,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -3123,9 +3963,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3164,7 +4001,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -3180,20 +4017,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { @@ -3206,9 +4043,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3251,7 +4085,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { @@ -3267,33 +4101,114 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { - "ext-intl": "For best performance" + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3304,11 +4219,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3324,18 +4236,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "intl", - "normalizer", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -3351,36 +4262,27 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "name": "symfony/polyfill-php72", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { "php": ">=7.1" }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3391,7 +4293,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3408,17 +4310,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, "funding": [ { @@ -3434,20 +4335,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "name": "symfony/polyfill-php80", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -3455,9 +4356,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3468,14 +4366,21 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3485,7 +4390,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.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3494,7 +4399,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -3510,30 +4415,28 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "name": "symfony/polyfill-php83", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3544,7 +4447,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -3555,10 +4458,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3568,7 +4467,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3577,7 +4476,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, "funding": [ { @@ -3593,20 +4492,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", "shasum": "" }, "require": { @@ -3620,9 +4519,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3659,7 +4555,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" }, "funding": [ { @@ -3675,24 +4571,24 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.2.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -3720,7 +4616,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.5" + "source": "https://github.com/symfony/process/tree/v7.0.4" }, "funding": [ { @@ -3736,45 +4632,38 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/routing", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe" + "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe", + "url": "https://api.github.com/repos/symfony/routing/zipball/cded64e5bbf9f31786f1055fcc76718fdd77519c", + "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3808,7 +4697,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.5" + "source": "https://github.com/symfony/routing/tree/v7.0.6" }, "funding": [ { @@ -3824,36 +4713,33 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-03-28T21:02:11+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3893,7 +4779,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -3909,38 +4795,38 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/string", - "version": "v6.2.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { - "php": ">=8.1", + "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.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "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": { @@ -3979,7 +4865,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.5" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -3995,58 +4881,54 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-02-01T13:17:36+00:00" }, { "name": "symfony/translation", - "version": "v6.2.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "url": "https://api.github.com/repos/symfony/translation/zipball/5b75e872f7d135d7abb4613809fadc8d9f3d30a0", + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "nikic/php-parser": "To use PhpAstExtractor", - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4077,7 +4959,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.5" + "source": "https://github.com/symfony/translation/tree/v7.0.4" }, "funding": [ { @@ -4093,32 +4975,29 @@ "type": "tidelift" } ], - "time": "2023-01-05T07:00:27+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.2.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/translation-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4158,7 +5037,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" }, "funding": [ { @@ -4174,28 +5053,28 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/uid", - "version": "v6.2.5", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b" + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8ace895bded57d6496638c9b2d3b788e05b7395b", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b", + "url": "https://api.github.com/repos/symfony/uid/zipball/87cedaf3fabd7b733859d4d77aa4ca598259054b", + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4232,7 +5111,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.2.5" + "source": "https://github.com/symfony/uid/tree/v7.0.3" }, "funding": [ { @@ -4248,41 +5127,36 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -4320,7 +5194,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.6" }, "funding": [ { @@ -4336,27 +5210,27 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2024-03-19T11:57:22+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "version": "v2.2.7", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" @@ -4387,37 +5261,37 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" }, - "time": "2023-01-03T09:29:04+00:00" + "time": "2023-12-08T13:03:43+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -4429,7 +5303,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -4461,7 +5335,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -4473,7 +5347,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "voku/portable-ascii", @@ -4611,16 +5485,16 @@ "packages-dev": [ { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -4662,7 +5536,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -4678,20 +5552,20 @@ "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -4741,9 +5615,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -4759,20 +5633,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -4783,7 +5657,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -4807,9 +5681,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -4825,96 +5699,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "doctrine/annotations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "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": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" - }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "fakerphp/faker", - "version": "v1.21.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -4940,11 +5738,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -4967,218 +5760,102 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2022-12-13T13:54:32+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.4", + "version": "v3.53.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b" + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b", - "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/69a19093a9ded8d1baac62ed6c009b8bc148d008", + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.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" }, "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", + "infection/infection": "^0.27.11", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", + "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-02-09T21:49:13+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.4.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "67c26b443f348a51926030c83481b85718457d3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", - "reference": "67c26b443f348a51926030c83481b85718457d3d", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "PSR-7 message implementation that also provides common utility methods", + "description": "A tool to automatically fix PHP code style", "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" + "Static code analysis", + "fixer", + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.3" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.53.0" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", + "url": "https://github.com/keradus", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" } ], - "time": "2022-10-26T14:07:24+00:00" + "time": "2024-04-08T15:03:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -5231,40 +5908,106 @@ }, "time": "2020-07-09T08:09:16+00:00" }, + { + "name": "laravel/tinker", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.9.0" + }, + "time": "2024-01-04T16:10:04+00:00" + }, { "name": "mockery/mockery", - "version": "1.5.1", + "version": "1.6.11", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + "reference": "81a161d0b135df89951abd52296adf97deb0723d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -5275,12 +6018,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -5298,23 +6049,26 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.1" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-09-07T15:32:08+00:00" + "time": "2024-03-21T18:34:15+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -5352,7 +6106,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -5360,29 +6114,31 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -5390,7 +6146,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -5414,38 +6170,270 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + }, + "time": "2024-03-05T20:51:40+00:00" + }, + { + "name": "orchestra/canvas", + "version": "v9.0.2", + "source": { + "type": "git", + "url": "https://github.com/orchestral/canvas.git", + "reference": "1bb5fea96fbba7a63c1f6f80651ac670ceb1fb5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/1bb5fea96fbba7a63c1f6f80651ac670ceb1fb5e", + "reference": "1bb5fea96fbba7a63c1f6f80651ac670ceb1fb5e", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "illuminate/console": "^11.1.1", + "illuminate/database": "^11.1.1", + "illuminate/filesystem": "^11.1.1", + "illuminate/support": "^11.1.1", + "orchestra/canvas-core": "^9.0", + "orchestra/testbench-core": "^9.0", + "php": "^8.2", + "symfony/polyfill-php83": "^1.28", + "symfony/yaml": "^7.0" + }, + "require-dev": { + "laravel/framework": "^11.1.1", + "laravel/pint": "^1.6", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.6", + "phpunit/phpunit": "^11.0", + "spatie/laravel-ray": "^1.35" + }, + "bin": [ + "canvas" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.0-dev" + }, + "laravel": { + "providers": [ + "Orchestra\\Canvas\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Canvas\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Code Generators for Laravel Applications and Packages", + "support": { + "issues": "https://github.com/orchestral/canvas/issues", + "source": "https://github.com/orchestral/canvas/tree/v9.0.2" + }, + "time": "2024-03-28T17:06:53+00:00" + }, + { + "name": "orchestra/canvas-core", + "version": "v9.0.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/canvas-core.git", + "reference": "3a29eecf324fe02e3e5628e422314b5cd1a80e48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/3a29eecf324fe02e3e5628e422314b5cd1a80e48", + "reference": "3a29eecf324fe02e3e5628e422314b5cd1a80e48", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "illuminate/console": "^11.0", + "illuminate/filesystem": "^11.0", + "php": "^8.2", + "symfony/polyfill-php83": "^1.28" + }, + "require-dev": { + "laravel/framework": "^11.0", + "laravel/pint": "^1.6", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^9.0", + "phpstan/phpstan": "^1.10.6", + "phpunit/phpunit": "^10.1", + "symfony/yaml": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.0-dev" + }, + "laravel": { + "providers": [ + "Orchestra\\Canvas\\Core\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Canvas\\Core\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Code Generators Builder for Laravel Applications and Packages", + "support": { + "issues": "https://github.com/orchestral/canvas/issues", + "source": "https://github.com/orchestral/canvas-core/tree/v9.0.0" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2024-03-06T10:00:21+00:00" }, { "name": "orchestra/testbench", - "version": "v8.0.1", + "version": "v9.0.3", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "533e33d7051cba2d7f21d7e3e2dfc9975691636e" + "reference": "345208ccf458ba147a35e7f4925d12e5a66dd13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/533e33d7051cba2d7f21d7e3e2dfc9975691636e", - "reference": "533e33d7051cba2d7f21d7e3e2dfc9975691636e", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/345208ccf458ba147a35e7f4925d12e5a66dd13b", + "reference": "345208ccf458ba147a35e7f4925d12e5a66dd13b", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": ">=10.0.3 <10.1.0", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": ">=8.0.1 <8.1.0", - "php": "^8.1", - "phpunit/phpunit": "^9.6 || ^10.0.7", - "spatie/laravel-ray": "^1.32", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.1", + "mockery/mockery": "^1.6", + "orchestra/testbench-core": "^9.0.9", + "orchestra/workbench": "^9.0", + "php": "^8.2", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", + "vlucas/phpdotenv": "^5.4.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "https://packages.tools/testbench/", + "keywords": [ + "BDD", + "TDD", + "dev", + "laravel", + "laravel-packages", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench/tree/v9.0.3" + }, + "time": "2024-03-26T23:30:19+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v9.0.13", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "1e4d35372c6ae8158572b4476e19c394e6b640e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/1e4d35372c6ae8158572b4476e19c394e6b640e4", + "reference": "1e4d35372c6ae8158572b4476e19c394e6b640e4", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "php": "^8.2", + "symfony/polyfill-php83": "^1.28" + }, + "conflict": { + "brianium/paratest": "<7.3.0 || >=8.0.0", + "laravel/framework": "<11.1.0 || >=12.0.0", + "nunomaduro/collision": "<8.0.0 || >=9.0.0", + "phpunit/phpunit": "<10.5.0 || 11.0.0 || >=11.1.0" + }, + "require-dev": { + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.1", + "laravel/pint": "^1.6", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.50", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "spatie/laravel-ray": "^1.35", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", "vlucas/phpdotenv": "^5.4.1" }, - "type": "library", + "suggest": { + "brianium/paratest": "Allow using parallel tresting (^7.3).", + "ext-pcntl": "Required to use all features of the console signal trapping.", + "fakerphp/faker": "Allow using Faker for testing (^1.23).", + "laravel/framework": "Required for testing (^11.1).", + "mockery/mockery": "Allow using Mockery for testing (^1.6).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^9.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^10.5 || ^11.0).", + "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.0).", + "symfony/yaml": "Required for Testbench CLI (^7.0).", + "vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)." + }, + "bin": [ + "testbench" + ], + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -5457,80 +6445,62 @@ "homepage": "https://github.com/crynobone" } ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", "keywords": [ "BDD", "TDD", + "dev", "laravel", - "orchestra-platform", - "orchestral", + "laravel-packages", "testing" ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v8.0.1" + "source": "https://github.com/orchestral/testbench-core" }, - "time": "2023-02-17T09:26:46+00:00" + "time": "2024-04-16T07:38:37+00:00" }, { - "name": "orchestra/testbench-core", - "version": "v8.0.1", + "name": "orchestra/workbench", + "version": "v9.0.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "e7a2de7c6cd8fa8f221caa63e64499068a484c9c" + "url": "https://github.com/orchestral/workbench.git", + "reference": "979ebf99e4167b68446a4b60f5fcab9521d209cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/e7a2de7c6cd8fa8f221caa63e64499068a484c9c", - "reference": "e7a2de7c6cd8fa8f221caa63e64499068a484c9c", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/979ebf99e4167b68446a4b60f5fcab9521d209cd", + "reference": "979ebf99e4167b68446a4b60f5fcab9521d209cd", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "php": "^8.1" + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.0", + "laravel/tinker": "^2.9", + "orchestra/canvas": "^9.0", + "orchestra/testbench-core": "^9.0", + "php": "^8.1", + "spatie/laravel-ray": "^1.35", + "symfony/polyfill-php83": "^1.28", + "symfony/yaml": "^7.0" }, "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.0.3", - "laravel/pint": "^1.5", - "mockery/mockery": "^1.5.1", - "orchestra/canvas": "^8.0", - "phpstan/phpstan": "^1.9.17", - "phpunit/phpunit": "^9.6 || ^10.0.7", - "spatie/laravel-ray": "^1.32", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", - "vlucas/phpdotenv": "^5.4.1" + "laravel/pint": "^1.6", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.50", + "phpunit/phpunit": "^10.5 || ^11.0", + "symfony/process": "^7.0" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4 || ^7.0).", - "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^10.0.3).", - "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.0).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.6 || ^10.0.7).", - "symfony/yaml": "Required for CLI Commander (^6.2).", - "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." + "ext-pcntl": "Required to use all features of the console signal trapping." }, - "bin": [ - "testbench" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.0-dev" - } - }, "autoload": { - "files": [ - "src/helpers.php" - ], "psr-4": { - "Orchestra\\Testbench\\": "src/" + "Orchestra\\Workbench\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5540,42 +6510,39 @@ "authors": [ { "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "email": "crynobone@gmail.com" } ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", + "description": "Workbench Companion for Laravel Packages Development", "keywords": [ - "BDD", - "TDD", + "dev", "laravel", - "orchestra-platform", - "orchestral", + "laravel-packages", "testing" ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" + "issues": "https://github.com/orchestral/workbench/issues", + "source": "https://github.com/orchestral/workbench/tree/v9.0.0" }, - "time": "2023-02-17T09:16:02+00:00" + "time": "2024-03-13T06:19:29+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -5616,9 +6583,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -5671,25 +6644,83 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpstan/phpstan", + "version": "1.10.67", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-04-16T07:22:02+00:00" + }, { "name": "phpunit/php-code-coverage", - "version": "10.0.0", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bf4fbc9c13af7da12b3ea807574fb460f255daba", - "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1", "phpunit/php-file-iterator": "^4.0", "phpunit/php-text-template": "^3.0", @@ -5701,16 +6732,16 @@ "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "10.0-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -5738,7 +6769,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.0" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -5746,20 +6778,20 @@ "type": "github" } ], - "time": "2023-02-03T07:14:34+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.0.1", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/fd9329ab3368f59fe1fe808a189c51086bd4b6bd", - "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { @@ -5798,7 +6830,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -5806,7 +6839,7 @@ "type": "github" } ], - "time": "2023-02-10T16:53:14+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", @@ -5873,16 +6906,16 @@ }, { "name": "phpunit/php-text-template", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { @@ -5920,7 +6953,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -5928,7 +6962,7 @@ "type": "github" } ], - "time": "2023-02-03T06:56:46+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", @@ -5991,16 +7025,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.0.8", + "version": "10.5.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "be72e6e446f40e930b6350922d302690bb35888e" + "reference": "835df1709ac6c968ba34bf23f3c30e5d5a266de8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/be72e6e446f40e930b6350922d302690bb35888e", - "reference": "be72e6e446f40e930b6350922d302690bb35888e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/835df1709ac6c968ba34bf23f3c30e5d5a266de8", + "reference": "835df1709ac6c968ba34bf23f3c30e5d5a266de8", "shasum": "" }, "require": { @@ -6014,7 +7048,7 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=8.1", - "phpunit/php-code-coverage": "^10.0", + "phpunit/php-code-coverage": "^10.1.5", "phpunit/php-file-iterator": "^4.0", "phpunit/php-invoker": "^4.0", "phpunit/php-text-template": "^3.0", @@ -6024,15 +7058,15 @@ "sebastian/comparator": "^5.0", "sebastian/diff": "^5.0", "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.0", - "sebastian/global-state": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", "sebastian/object-enumerator": "^5.0", "sebastian/recursion-context": "^5.0", "sebastian/type": "^4.0", "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -6040,7 +7074,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.0-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -6071,7 +7105,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.8" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.18" }, "funding": [ { @@ -6087,7 +7122,7 @@ "type": "tidelift" } ], - "time": "2023-02-18T16:32:22+00:00" + "time": "2024-04-14T07:05:31+00:00" }, { "name": "pimple/pimple", @@ -6143,81 +7178,57 @@ "time": "2021-10-28T11:13:42+00:00" }, { - "name": "psr/cache", - "version": "3.0.0", + "name": "psy/psysh", + "version": "v0.12.3", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", "shasum": "" }, "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6226,135 +7237,96 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" + "REPL", + "console", + "interactive", + "shell" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.3" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2024-04-02T15:57:53+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "rector/rector", + "version": "1.0.4", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/rectorphp/rector.git", + "reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/6e04d0eb087aef707fa0c5686d33d6ff61f4a555", + "reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.57" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "bin": [ + "bin/rector" ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, "type": "library", "autoload": { "files": [ - "src/getallheaders.php" + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" ], - "description": "A polyfill for getallheaders.", "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/1.0.4" }, - "time": "2019-03-08T08:55:37+00:00" + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2024-04-05T09:01:07+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { @@ -6389,7 +7361,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -6397,7 +7370,7 @@ "type": "github" } ], - "time": "2023-02-03T06:58:15+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", @@ -6512,16 +7485,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", - "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { @@ -6532,7 +7505,7 @@ "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { @@ -6576,7 +7549,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -6584,24 +7558,24 @@ "type": "github" } ], - "time": "2023-02-03T07:07:16+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -6610,7 +7584,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -6633,7 +7607,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -6641,20 +7616,20 @@ "type": "github" } ], - "time": "2023-02-03T06:59:47+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "5.0.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { @@ -6662,12 +7637,12 @@ }, "require-dev": { "phpunit/phpunit": "^10.0", - "symfony/process": "^4.2 || ^5" + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -6699,7 +7674,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -6707,20 +7683,20 @@ "type": "github" } ], - "time": "2023-02-03T07:00:31+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "6.0.0", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", - "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { @@ -6735,7 +7711,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -6762,7 +7738,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -6770,20 +7747,20 @@ "type": "github" } ], - "time": "2023-02-03T07:03:04+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "5.0.0", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", - "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { @@ -6797,7 +7774,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -6839,7 +7816,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -6847,20 +7825,20 @@ "type": "github" } ], - "time": "2023-02-03T07:06:49+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "aab257c712de87b90194febd52e4d184551c2d44" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", - "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { @@ -6894,13 +7872,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -6908,24 +7887,24 @@ "type": "github" } ], - "time": "2023-02-03T07:07:38+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -6957,7 +7936,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -6965,7 +7945,7 @@ "type": "github" } ], - "time": "2023-02-03T07:08:02+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", @@ -7253,16 +8233,16 @@ }, { "name": "spatie/backtrace", - "version": "1.2.1", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab", "shasum": "" }, "require": { @@ -7271,6 +8251,7 @@ "require-dev": { "ext-json": "*", "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", "symfony/var-dumper": "^5.1" }, "type": "library", @@ -7298,8 +8279,7 @@ "spatie" ], "support": { - "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.2.1" + "source": "https://github.com/spatie/backtrace/tree/1.5.3" }, "funding": [ { @@ -7311,47 +8291,49 @@ "type": "other" } ], - "time": "2021-11-09T10:57:15+00:00" + "time": "2023-06-28T12:59:17+00:00" }, { "name": "spatie/laravel-ray", - "version": "1.32.2", + "version": "1.36.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "0c28a8274ec261a2857b4318b6f934af98024395" + "reference": "799eb881d5ede337f373b5fe9722c92b787890f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/0c28a8274ec261a2857b4318b6f934af98024395", - "reference": "0c28a8274ec261a2857b4318b6f934af98024395", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/799eb881d5ede337f373b5fe9722c92b787890f4", + "reference": "799eb881d5ede337f373b5fe9722c92b787890f4", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0", - "illuminate/database": "^7.20|^8.19|^9.0|^10.0", - "illuminate/queue": "^7.20|^8.19|^9.0|^10.0", - "illuminate/support": "^7.20|^8.19|^9.0|^10.0", + "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0|^11.0", + "illuminate/database": "^7.20|^8.19|^9.0|^10.0|^11.0", + "illuminate/queue": "^7.20|^8.19|^9.0|^10.0|^11.0", + "illuminate/support": "^7.20|^8.19|^9.0|^10.0|^11.0", "php": "^7.4|^8.0", + "rector/rector": "^0.19.2|^1.0", "spatie/backtrace": "^1.0", - "spatie/ray": "^1.33", - "symfony/stopwatch": "4.2|^5.1|^6.0", + "spatie/ray": "^1.41.1", + "symfony/stopwatch": "4.2|^5.1|^6.0|^7.0", "zbateson/mail-mime-parser": "^1.3.1|^2.0" }, "require-dev": { "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19|^9.0|^10.0", - "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^0.12.93", - "phpunit/phpunit": "^9.3", - "spatie/pest-plugin-snapshots": "^1.1" + "laravel/framework": "^7.20|^8.19|^9.0|^10.0|^11.0", + "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0|^9.0", + "pestphp/pest": "^1.22|^2.0", + "phpstan/phpstan": "^1.10.57", + "phpunit/phpunit": "^9.3|^10.1", + "spatie/pest-plugin-snapshots": "^1.1|^2.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0|^7.0.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.29.x-dev" + "dev-main": "1.x-dev" }, "laravel": { "providers": [ @@ -7384,7 +8366,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.32.2" + "source": "https://github.com/spatie/laravel-ray/tree/1.36.1" }, "funding": [ { @@ -7396,7 +8378,7 @@ "type": "other" } ], - "time": "2023-02-06T09:46:50+00:00" + "time": "2024-04-12T12:15:59+00:00" }, { "name": "spatie/macroable", @@ -7450,16 +8432,16 @@ }, { "name": "spatie/ray", - "version": "1.36.2", + "version": "1.41.1", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "71dfde21900447ab37698fc07ff28b7f1e1822b8" + "reference": "051a0facb1d2462fafef87ff77eb74d6f2d12944" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/71dfde21900447ab37698fc07ff28b7f1e1822b8", - "reference": "71dfde21900447ab37698fc07ff28b7f1e1822b8", + "url": "https://api.github.com/repos/spatie/ray/zipball/051a0facb1d2462fafef87ff77eb74d6f2d12944", + "reference": "051a0facb1d2462fafef87ff77eb74d6f2d12944", "shasum": "" }, "require": { @@ -7469,18 +8451,22 @@ "ramsey/uuid": "^3.0|^4.1", "spatie/backtrace": "^1.1", "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1|^6.0", - "symfony/var-dumper": "^4.2|^5.1|^6.0" + "symfony/stopwatch": "^4.0|^5.1|^6.0|^7.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0|^7.0" }, "require-dev": { "illuminate/support": "6.x|^8.18|^9.0", "nesbot/carbon": "^2.63", "pestphp/pest": "^1.22", - "phpstan/phpstan": "^0.12.92", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5", + "rector/rector": "^0.19.2", "spatie/phpunit-snapshot-assertions": "^4.2", "spatie/test-time": "^1.2" }, + "bin": [ + "bin/remove-ray.sh" + ], "type": "library", "autoload": { "files": [ @@ -7510,7 +8496,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.36.2" + "source": "https://github.com/spatie/ray/tree/1.41.1" }, "funding": [ { @@ -7522,24 +8508,24 @@ "type": "other" } ], - "time": "2023-02-10T09:24:13+00:00" + "time": "2024-01-25T10:15:50+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.5", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" + "reference": "408105dff4c104454100730bdfd1a9cdd993f04d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d", + "reference": "408105dff4c104454100730bdfd1a9cdd993f04d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -7569,7 +8555,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.5" + "source": "https://github.com/symfony/filesystem/tree/v7.0.6" }, "funding": [ { @@ -7585,25 +8571,25 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2024-03-21T19:37:36+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.5", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" + "reference": "700ff4096e346f54cb628ea650767c8130f1001f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f", + "reference": "700ff4096e346f54cb628ea650767c8130f1001f", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -7636,7 +8622,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" + "source": "https://github.com/symfony/options-resolver/tree/v7.0.0" }, "funding": [ { @@ -7652,20 +8638,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-08-08T10:20:21+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", "shasum": "" }, "require": { @@ -7679,9 +8665,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7719,7 +8702,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" }, "funding": [ { @@ -7735,20 +8718,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { @@ -7756,9 +8739,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7798,7 +8778,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -7814,25 +8794,25 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.5", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112", + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -7860,7 +8840,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" + "source": "https://github.com/symfony/stopwatch/tree/v7.0.3" }, "funding": [ { @@ -7876,34 +8856,31 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:55+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/yaml", - "version": "v6.2.5", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -7934,7 +8911,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.5" + "source": "https://github.com/symfony/yaml/tree/v7.0.3" }, "funding": [ { @@ -7950,20 +8927,20 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -7992,7 +8969,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -8000,7 +8977,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "zbateson/mail-mime-parser", @@ -8079,16 +9056,16 @@ }, { "name": "zbateson/mb-wrapper", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" + "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/09a8b77eb94af3823a9a6623dcc94f8d988da67f", + "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f", "shasum": "" }, "require": { @@ -8099,7 +9076,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" + "phpunit/phpunit": "<10.0" }, "suggest": { "ext-iconv": "For best support/performance", @@ -8136,7 +9113,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" + "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.1" }, "funding": [ { @@ -8144,31 +9121,31 @@ "type": "github" } ], - "time": "2023-01-11T23:05:44+00:00" + "time": "2024-03-18T04:31:04+00:00" }, { "name": "zbateson/stream-decorators", - "version": "1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e" + "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/7466ff45d249c86b96267a83cdae68365ae1787e", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", + "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", "shasum": "" }, "require": { "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.1", + "php": ">=7.2", "zbateson/mb-wrapper": "^1.0.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" + "phpunit/phpunit": "<10.0" }, "type": "library", "autoload": { @@ -8199,7 +9176,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.1.0" + "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" }, "funding": [ { @@ -8207,7 +9184,7 @@ "type": "github" } ], - "time": "2023-01-11T23:22:44+00:00" + "time": "2023-05-30T22:51:52+00:00" } ], "aliases": [], @@ -8217,5 +9194,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } From d8b8e2cfaf8fa71deea2f4323b034d372cd8f62c Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 12:04:11 +0300 Subject: [PATCH 2/9] Performed code cleanup. * Ran the PHP CS Fixer. * Reduced dependencies on facades, replaced with proper DI. * Replaced Collection return types with Enumerables. --- src/Console/Commands/InstallCommand.php | 20 +- .../Commands/MakeRequirementCommand.php | 4 +- .../MakeRequirementHandlerCommand.php | 2 +- src/Contracts/IAuthorizable.php | 2 +- .../Services/IAuthorizationService.php | 7 +- src/Models/Role.php | 7 +- src/Models/RolePermission.php | 2 +- .../AuthorizationServiceProvider.php | 5 +- src/Services/AuthorizationCheckService.php | 49 +++-- src/Services/AuthorizationService.php | 29 ++- src/Traits/HasPermissions.php | 10 +- .../Handlers/DateRequirementHandler.php | 3 +- .../Handlers/NotNullRequirementHandler.php | 4 +- .../Handlers/SameAuthorRequirementHandler.php | 2 +- .../Policies/ActOnDocumentPolicy.php | 2 +- .../PolicyThatRequiresUserProfile.php | 5 +- .../Requirement/SameAuthorRequirement.php | 3 +- .../PermissionAuthorizationController1.php | 8 +- .../PermissionAuthorizationController2.php | 8 +- .../PermissionAuthorizationController3.php | 8 +- .../PermissionAuthorizationController4.php | 16 +- .../PolicyAuthorizationTestController1.php | 6 +- .../PolicyAuthorizationTestController2.php | 6 +- .../DocumentController1.php | 17 +- .../RoleAuthorizationController1.php | 8 +- .../RoleAuthorizationController2.php | 8 +- .../RoleAuthorizationController3.php | 8 +- .../RoleAuthorizationController4.php | 14 +- .../SimpleAuthorizationController1.php | 14 +- .../SimpleAuthorizationController2.php | 14 +- .../SimpleAuthorizationController3.php | 14 +- tests/Fakes/Models/Document.php | 2 +- .../Feature/PermissionsAuthorizationTest.php | 174 +++++++++++++----- tests/Feature/PolicyAuthorizationTest.php | 35 ++-- tests/Feature/ResourceAuthorizationTest.php | 35 ++-- tests/Feature/RoleAuthorizationTest.php | 174 +++++++++++++----- tests/Feature/SimpleAuthorizationTest.php | 74 +++++--- tests/TestCase.php | 17 +- 38 files changed, 505 insertions(+), 311 deletions(-) diff --git a/src/Console/Commands/InstallCommand.php b/src/Console/Commands/InstallCommand.php index e01999f..8d8ce9f 100644 --- a/src/Console/Commands/InstallCommand.php +++ b/src/Console/Commands/InstallCommand.php @@ -66,12 +66,15 @@ public function handle(): int if (!is_dir($this->laravel->basePath('app/Authorization'))) { mkdir($this->laravel->basePath('app/Authorization')); } + if (!is_dir($this->laravel->basePath('app/Authorization/Handlers'))) { mkdir($this->laravel->basePath('app/Authorization/Handlers')); } + if (!is_dir($this->laravel->basePath('app/Authorization/Policies'))) { mkdir($this->laravel->basePath('app/Authorization/Policies')); } + if (!is_dir($this->laravel->basePath('app/Authorization/Requirements'))) { mkdir($this->laravel->basePath('app/Authorization/Requirements')); } @@ -83,6 +86,7 @@ public function handle(): int // Check whether the user has default laravel policies and warn them if they do $defaultPoliciesPath = $this->laravel->basePath('app/Policies'); + if (is_dir($defaultPoliciesPath)) { if ($this->checkDirectoryEmpty($defaultPoliciesPath)) { unlink($defaultPoliciesPath); @@ -135,7 +139,7 @@ private function createPermissionEnum(): bool ]); // Extract path before last slash (supposedly the Enums directory) - $directory = $this->laravel->basePath(substr(self::PermissionEnumPath, 0, strrpos(self::PermissionEnumPath, '/'))); + $directory = $this->laravel->basePath(mb_substr(self::PermissionEnumPath, 0, mb_strrpos(self::PermissionEnumPath, '/'))); // If the directory does not exist, create it if (!is_dir($directory)) { @@ -165,8 +169,8 @@ private function completeStub(string $stubName, array $replacements = []): strin // Replace interpolations from the replacements array foreach ($replacements as $key => $value) { - $stub = (string)str_ireplace('{{ ' . $key . ' }}', $value, $stub); - $stub = (string)str_ireplace('{{' . $key . '}}', $value, $stub); + $stub = (string) str_ireplace('{{ ' . $key . ' }}', $value, $stub); + $stub = (string) str_ireplace('{{' . $key . '}}', $value, $stub); } // Return the resulting string @@ -206,19 +210,20 @@ public function addMiddlewareToKernel(): bool $groups = $reflection->getProperty('middlewareGroups')->getDefaultValue(); - if (!is_array($groups)) { + if (!\is_array($groups)) { return false; } // Build the middleware class' FQN $middlewareQualifiedName = AuthorizationMiddleware::class; + if (!str_starts_with($middlewareQualifiedName, '\\')) { $middlewareQualifiedName = '\\' . $middlewareQualifiedName; } // Add the middleware to each group foreach ($groups as $group => $groupMiddleware) { - if (!in_array(AuthorizationMiddleware::class, $groupMiddleware)) { + if (!\in_array(AuthorizationMiddleware::class, $groupMiddleware)) { $newFileContents = preg_replace( '/([\'"]' . $group . '[\'"] => \\[[a-zA-Z\\s:,\\/\\\\\'\"]+?)([ \\t]+)((?:(?:\\w|\\\\)+)?SubstituteBindings::class)/m', '$1$2' . $middlewareQualifiedName . "::class,\n$2$3", @@ -240,13 +245,16 @@ public function addMiddlewareToKernel(): bool private function checkDirectoryEmpty(string $directory): bool { $handle = opendir($directory); + while (($entry = readdir($handle)) !== false) { - if ($entry !== "." && $entry !== "..") { + if ($entry !== '.' && $entry !== '..') { closedir($handle); + return false; } } closedir($handle); + return true; } } diff --git a/src/Console/Commands/MakeRequirementCommand.php b/src/Console/Commands/MakeRequirementCommand.php index e5e5a76..268d445 100644 --- a/src/Console/Commands/MakeRequirementCommand.php +++ b/src/Console/Commands/MakeRequirementCommand.php @@ -19,9 +19,9 @@ class MakeRequirementCommand extends GeneratorCommand /** * Execute the console command. * + * @throws FileNotFoundException * @return bool|null * - * @throws FileNotFoundException */ public function handle(): ?bool { @@ -56,9 +56,9 @@ protected function getStub(): string * Build the class with the given name. * * @param string $name + * @throws FileNotFoundException * @return string * - * @throws FileNotFoundException */ protected function buildClass($name): string { diff --git a/src/Console/Commands/MakeRequirementHandlerCommand.php b/src/Console/Commands/MakeRequirementHandlerCommand.php index bb7b679..655b08b 100644 --- a/src/Console/Commands/MakeRequirementHandlerCommand.php +++ b/src/Console/Commands/MakeRequirementHandlerCommand.php @@ -37,9 +37,9 @@ protected function getStub(): string * Build the class with the given name. * * @param string $name + * @throws FileNotFoundException * @return string * - * @throws FileNotFoundException */ protected function buildClass($name): string { diff --git a/src/Contracts/IAuthorizable.php b/src/Contracts/IAuthorizable.php index 20d469f..4696bd6 100644 --- a/src/Contracts/IAuthorizable.php +++ b/src/Contracts/IAuthorizable.php @@ -4,4 +4,4 @@ interface IAuthorizable { -} \ No newline at end of file +} diff --git a/src/Contracts/Services/IAuthorizationService.php b/src/Contracts/Services/IAuthorizationService.php index cfd6795..73120b9 100644 --- a/src/Contracts/Services/IAuthorizationService.php +++ b/src/Contracts/Services/IAuthorizationService.php @@ -2,8 +2,7 @@ namespace Codestage\Authorization\Contracts\Services; -use Codestage\Authorization\Contracts\IPolicy; -use Codestage\Authorization\Contracts\IRequirement; +use Codestage\Authorization\Contracts\{IPolicy, IRequirement}; use Illuminate\Contracts\Container\BindingResolutionException; /** @@ -16,8 +15,8 @@ interface IAuthorizationService * * @param TResource|null $resource * @param IPolicy|class-string $policy - * @return bool * @throws BindingResolutionException + * @return bool */ public function authorizePolicy(mixed $resource, IPolicy|string $policy): bool; @@ -29,4 +28,4 @@ public function authorizePolicy(mixed $resource, IPolicy|string $policy): bool; * @return bool */ public function authorizeRequirements(mixed $resource, iterable $requirements): bool; -} \ No newline at end of file +} diff --git a/src/Models/Role.php b/src/Models/Role.php index f710431..fcf1b6c 100644 --- a/src/Models/Role.php +++ b/src/Models/Role.php @@ -3,19 +3,20 @@ namespace Codestage\Authorization\Models; use Carbon\Carbon; +use Codestage\Authorization\Contracts\IPermissionEnum; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Support\{Collection, Str}; +use Illuminate\Support\{Enumerable, Str}; /** - * @template TPermission of \Codestage\Authorization\Contracts\IPermissionEnum + * @template TPermission of IPermissionEnum * * @property string $id * @property string $key * @property string $name * @property Carbon $created_at * @property Carbon $updated_at - * @property Collection $permissions + * @property Enumerable $permissions */ class Role extends Model { diff --git a/src/Models/RolePermission.php b/src/Models/RolePermission.php index 02df528..98db85d 100644 --- a/src/Models/RolePermission.php +++ b/src/Models/RolePermission.php @@ -10,7 +10,7 @@ use Illuminate\Support\Facades\Config; /** - * @template TPermission of \Codestage\Authorization\Contracts\IPermissionEnum + * @template TPermission of IPermissionEnum * * @property string $role_id * @property TPermission $permission diff --git a/src/Providers/AuthorizationServiceProvider.php b/src/Providers/AuthorizationServiceProvider.php index a7a4cca..919318c 100644 --- a/src/Providers/AuthorizationServiceProvider.php +++ b/src/Providers/AuthorizationServiceProvider.php @@ -2,10 +2,7 @@ namespace Codestage\Authorization\Providers; -use Codestage\Authorization\Console\Commands\InstallCommand; -use Codestage\Authorization\Console\Commands\MakePolicyCommand; -use Codestage\Authorization\Console\Commands\MakeRequirementCommand; -use Codestage\Authorization\Console\Commands\MakeRequirementHandlerCommand; +use Codestage\Authorization\Console\Commands\{InstallCommand, MakePolicyCommand, MakeRequirementCommand, MakeRequirementHandlerCommand}; use Codestage\Authorization\Contracts\Services\{IAuthorizationCheckService, IAuthorizationService}; use Codestage\Authorization\Services\{AuthorizationCheckService, AuthorizationService}; use Illuminate\Foundation\Console\PolicyMakeCommand as BaseMakePolicyCommand; diff --git a/src/Services/AuthorizationCheckService.php b/src/Services/AuthorizationCheckService.php index dc7edd1..1ef863b 100644 --- a/src/Services/AuthorizationCheckService.php +++ b/src/Services/AuthorizationCheckService.php @@ -4,25 +4,24 @@ use Closure; use Codestage\Authorization\Attributes\{AllowAnonymous, Authorize}; -use Illuminate\Contracts\Container\Container; use Codestage\Authorization\Contracts\{IPermissionEnum, IPolicy, Services\IAuthorizationCheckService, Services\IAuthorizationService}; -use Codestage\Authorization\Requirements\HasPermissionRequirement; -use Codestage\Authorization\Requirements\HasRoleRequirement; +use Codestage\Authorization\Requirements\{HasPermissionRequirement, HasRoleRequirement}; use Codestage\Authorization\Traits\HasPermissions; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Guard as AuthManager; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Collection; +use Illuminate\Support\{Collection, Enumerable}; use ReflectionAttribute; use ReflectionClass; use ReflectionException; use ReflectionFunction; use function get_class; use function in_array; -use function is_array; use function is_string; /** @@ -75,9 +74,9 @@ private function isAuthorizationAttribute(object|string $class): bool * @param class-string $className * @param string $methodName * @throws ReflectionException - * @return Collection + * @return Enumerable */ - private function extractAttributesFromClassMethod(string $className, string $methodName): Collection + private function extractAttributesFromClassMethod(string $className, string $methodName): Enumerable { $reflectionClass = new ReflectionClass($className); $method = $reflectionClass->getMethod($methodName); @@ -89,9 +88,9 @@ private function extractAttributesFromClassMethod(string $className, string $met /** * @param class-string $className * @throws ReflectionException - * @return Collection + * @return Enumerable */ - private function extractAttributesFromClass(string $className): Collection + private function extractAttributesFromClass(string $className): Enumerable { $reflectionClass = new ReflectionClass($className); @@ -105,9 +104,9 @@ private function extractAttributesFromClass(string $className): Collection * @param class-string $className * @param string $methodName * @throws ReflectionException - * @return Collection + * @return Enumerable */ - private function computeAttributesForClassMethod(string $className, string $methodName): Collection + private function computeAttributesForClassMethod(string $className, string $methodName): Enumerable { $classAttributes = $this->extractAttributesFromClass($className); $methodAttributes = $this->extractAttributesFromClassMethod($className, $methodName); @@ -120,9 +119,9 @@ private function computeAttributesForClassMethod(string $className, string $meth * * @param Closure $closure * @throws ReflectionException - * @return Collection + * @return Enumerable */ - private function computeAttributesForClosure(Closure $closure): Collection + private function computeAttributesForClosure(Closure $closure): Enumerable { $reflectionFunction = new ReflectionFunction($closure); @@ -133,14 +132,14 @@ private function computeAttributesForClosure(Closure $closure): Collection /** * Check whether an action can be accessed when guarded by the given attributes. * - * @param Collection|ReflectionAttribute[] $attributes - * @return bool + * @param Enumerable|Arrayable|iterable $attributes * @throws AuthenticationException + * @return bool */ - private function canAccessThroughAttributes(Collection|array $attributes): bool + private function canAccessThroughAttributes(Enumerable|iterable|Arrayable $attributes): bool { - // Make sure the attributes are a Collection - if (is_array($attributes)) { + // Make sure the attributes are enumerable + if (!($attributes instanceof Enumerable)) { $attributes = new Collection($attributes); } @@ -187,8 +186,9 @@ private function checkAttributePasses(Authorize $attribute): bool // Add role policies if (!!$attribute->roles) { $roles = new Collection($attribute->roles); + foreach ($roles as $role) { - $policies->push(new class ($role) implements IPolicy { + $policies->push(new class($role) implements IPolicy { /** Constructor method. */ public function __construct(public readonly string $role) { @@ -206,8 +206,9 @@ public function requirements(): array // Add permission policies if (!!$attribute->permissions) { $permissions = new Collection($attribute->permissions); + foreach ($permissions as $permission) { - $policies->push(new class ($permission) implements IPolicy { + $policies->push(new class($permission) implements IPolicy { /** Constructor method. */ public function __construct(public readonly IPermissionEnum $permission) { @@ -229,9 +230,7 @@ public function requirements(): array // Instantiate all policies and run them return $policies->map(fn (string|IPolicy $policy) => is_string($policy) ? $this->_container->make($policy) : $policy) - ->some(function (IPolicy $policy) { - return $this->_authorizationService->authorizePolicy(null, $policy); - }); + ->some(fn (IPolicy $policy) => $this->_authorizationService->authorizePolicy(null, $policy)); } /** @@ -239,9 +238,9 @@ public function requirements(): array * * @param class-string $className * @param class-string $methodName - * @return bool * @throws AuthenticationException * @throws ReflectionException + * @return bool */ public function canAccessControllerMethod(string $className, string $methodName): bool { @@ -254,9 +253,9 @@ public function canAccessControllerMethod(string $className, string $methodName) * Check whether the given controller method can be accessed in the current request context. * * @param Closure $closure - * @return bool * @throws AuthenticationException * @throws ReflectionException + * @return bool */ public function canAccessClosure(Closure $closure): bool { diff --git a/src/Services/AuthorizationService.php b/src/Services/AuthorizationService.php index 0336089..7e371dd 100644 --- a/src/Services/AuthorizationService.php +++ b/src/Services/AuthorizationService.php @@ -3,15 +3,11 @@ namespace Codestage\Authorization\Services; use Codestage\Authorization\Attributes\HandledBy; -use Codestage\Authorization\Contracts\IPolicy; -use Codestage\Authorization\Contracts\IRequirement; -use Codestage\Authorization\Contracts\IRequirementHandler; -use Codestage\Authorization\Contracts\IResourceRequirementHandler; use Codestage\Authorization\Contracts\Services\IAuthorizationService; -use Illuminate\Contracts\Container\BindingResolutionException; -use Illuminate\Contracts\Container\Container; -use Illuminate\Support\Collection; -use Illuminate\Support\Facades\DB; +use Codestage\Authorization\Contracts\{IPolicy, IRequirement, IRequirementHandler, IResourceRequirementHandler}; +use Exception; +use Illuminate\Contracts\Container\{BindingResolutionException, Container}; +use Illuminate\Support\{Collection, Enumerable}; use ReflectionClass; class AuthorizationService implements IAuthorizationService @@ -32,12 +28,13 @@ public function __construct( public function authorizePolicy(mixed $resource, IPolicy|string $policy): bool { // If the policy is not instantiated, get an instance - if (is_string($policy)) { + if (\is_string($policy)) { $policy = $this->_container->make($policy); } // Check that all the requirements defined by this policy pass $requirements = $policy->requirements(); + return $this->authorizeRequirements($resource, $requirements); } @@ -58,12 +55,12 @@ public function authorizeRequirements(mixed $resource, iterable $requirements): return $handler->handle($requirement); } else if ($handler instanceof IResourceRequirementHandler) { if ($resource === null) { - throw new \Exception("Attempt to use resource handler for authorizing without a resource."); + throw new Exception('Attempt to use resource handler for authorizing without a resource.'); } return $handler->handle($requirement, $resource); } else { - throw new BindingResolutionException( $handlerClassName . " was not resolved to a valid requirement handler."); + throw new BindingResolutionException($handlerClassName . ' was not resolved to a valid requirement handler.'); } }); @@ -81,9 +78,9 @@ public function authorizeRequirements(mixed $resource, iterable $requirements): * Get the handlers that can handle the given requirement. * * @param IRequirement $requirement - * @return Collection> + * @return Enumerable> */ - private function _getRequirementHandlers(IRequirement $requirement): Collection + private function _getRequirementHandlers(IRequirement $requirement): Enumerable { // Reflect on the requirement class $reflection = new ReflectionClass($requirement); @@ -99,9 +96,9 @@ private function _getRequirementHandlers(IRequirement $requirement): Collection /** @var HandledBy $instance */ $instance = $attribute->newInstance(); - if (is_array($instance->handler)) { + if (\is_array($instance->handler)) { $handlers->push(...$instance->handler); - } else if (is_string($instance->handler)) { + } else if (\is_string($instance->handler)) { $handlers->push($instance->handler); } } @@ -109,4 +106,4 @@ private function _getRequirementHandlers(IRequirement $requirement): Collection // Return a list of unique handlers return $handlers->unique(); } -} \ No newline at end of file +} diff --git a/src/Traits/HasPermissions.php b/src/Traits/HasPermissions.php index c0f7853..0ae8bce 100644 --- a/src/Traits/HasPermissions.php +++ b/src/Traits/HasPermissions.php @@ -5,11 +5,11 @@ use Codestage\Authorization\Contracts\IPermissionEnum; use Codestage\Authorization\Models\{Role, RolePermission, UserRole}; use Illuminate\Database\Eloquent\Relations\HasManyThrough; -use Illuminate\Support\Collection; +use Illuminate\Support\{Collection, Enumerable}; /** * @template TPermission of IPermissionEnum - * @property-read Collection $roles + * @property-read Enumerable $roles * @method HasManyThrough hasManyThrough(string $related, string $through, string|null $firstKey = null, string|null $secondKey = null, string|null $localKey = null, string|null $secondLocalKey = null) */ trait HasPermissions @@ -27,11 +27,11 @@ public function roles(): HasManyThrough /** * Get a list of this user's permissions. * - * @return Collection + * @return Enumerable */ - public function getPermissions(): Collection + public function getPermissions(): Enumerable { - $permissions = Collection::make(); + $permissions = new Collection(); /** * @var Role $role diff --git a/tests/Fakes/Authorization/Handlers/DateRequirementHandler.php b/tests/Fakes/Authorization/Handlers/DateRequirementHandler.php index 0b52704..90a104d 100644 --- a/tests/Fakes/Authorization/Handlers/DateRequirementHandler.php +++ b/tests/Fakes/Authorization/Handlers/DateRequirementHandler.php @@ -2,8 +2,7 @@ namespace Codestage\Authorization\Tests\Fakes\Authorization\Handlers; -use Codestage\Authorization\Contracts\IRequirement; -use Codestage\Authorization\Contracts\IRequirementHandler; +use Codestage\Authorization\Contracts\{IRequirement, IRequirementHandler}; use Codestage\Authorization\Tests\Fakes\Authorization\Requirement\DateRequirement; /** diff --git a/tests/Fakes/Authorization/Handlers/NotNullRequirementHandler.php b/tests/Fakes/Authorization/Handlers/NotNullRequirementHandler.php index ba6cb62..401696e 100644 --- a/tests/Fakes/Authorization/Handlers/NotNullRequirementHandler.php +++ b/tests/Fakes/Authorization/Handlers/NotNullRequirementHandler.php @@ -2,13 +2,11 @@ namespace Codestage\Authorization\Tests\Fakes\Authorization\Handlers; -use Codestage\Authorization\Contracts\IRequirement; -use Codestage\Authorization\Contracts\IRequirementHandler; +use Codestage\Authorization\Contracts\{IRequirement, IRequirementHandler}; use Codestage\Authorization\Tests\Fakes\Authorization\Requirement\NotNullRequirement; class NotNullRequirementHandler implements IRequirementHandler { - /** * Check whether the requirement this class handles is passing. * diff --git a/tests/Fakes/Authorization/Handlers/SameAuthorRequirementHandler.php b/tests/Fakes/Authorization/Handlers/SameAuthorRequirementHandler.php index b65afea..56e8ca4 100644 --- a/tests/Fakes/Authorization/Handlers/SameAuthorRequirementHandler.php +++ b/tests/Fakes/Authorization/Handlers/SameAuthorRequirementHandler.php @@ -29,4 +29,4 @@ public function handle(mixed $requirement, mixed $resource): bool { return !strcmp($this->_authManager->id(), $resource->user_id); } -} \ No newline at end of file +} diff --git a/tests/Fakes/Authorization/Policies/ActOnDocumentPolicy.php b/tests/Fakes/Authorization/Policies/ActOnDocumentPolicy.php index 15a672d..7bfb447 100644 --- a/tests/Fakes/Authorization/Policies/ActOnDocumentPolicy.php +++ b/tests/Fakes/Authorization/Policies/ActOnDocumentPolicy.php @@ -16,4 +16,4 @@ public function requirements(): array new SameAuthorRequirement() ]; } -} \ No newline at end of file +} diff --git a/tests/Fakes/Authorization/Policies/PolicyThatRequiresUserProfile.php b/tests/Fakes/Authorization/Policies/PolicyThatRequiresUserProfile.php index e7c7661..d3b3cc9 100644 --- a/tests/Fakes/Authorization/Policies/PolicyThatRequiresUserProfile.php +++ b/tests/Fakes/Authorization/Policies/PolicyThatRequiresUserProfile.php @@ -2,10 +2,7 @@ namespace Codestage\Authorization\Tests\Fakes\Authorization\Policies; -use Codestage\Authorization\Contracts\IPolicy; -use Codestage\Authorization\Contracts\IRequirement; -use Codestage\Authorization\Tests\Fakes\Authorization\Requirement\NotNullRequirement; -use Codestage\Authorization\Tests\Fakes\Models\UserProfile; +use Codestage\Authorization\Contracts\{IPolicy, IRequirement}; class PolicyThatRequiresUserProfile implements IPolicy { diff --git a/tests/Fakes/Authorization/Requirement/SameAuthorRequirement.php b/tests/Fakes/Authorization/Requirement/SameAuthorRequirement.php index fa7375e..56ecc38 100644 --- a/tests/Fakes/Authorization/Requirement/SameAuthorRequirement.php +++ b/tests/Fakes/Authorization/Requirement/SameAuthorRequirement.php @@ -9,5 +9,4 @@ #[HandledBy(SameAuthorRequirementHandler::class)] class SameAuthorRequirement implements IRequirement { - -} \ No newline at end of file +} diff --git a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController1.php b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController1.php index 9b9dba7..7584313 100644 --- a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController1.php +++ b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController1.php @@ -4,16 +4,16 @@ use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Enums\FakePermission; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(permissions: FakePermission::ExamplePermission1)] class PermissionAuthorizationController1 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController2.php b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController2.php index d4c4fc0..b71f286 100644 --- a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController2.php +++ b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController2.php @@ -4,16 +4,16 @@ use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Enums\FakePermission; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(permissions: [FakePermission::ExamplePermission1, FakePermission::ExamplePermission3])] class PermissionAuthorizationController2 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController3.php b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController3.php index 228d0ac..0447e5b 100644 --- a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController3.php +++ b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController3.php @@ -4,17 +4,17 @@ use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Enums\FakePermission; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(permissions: FakePermission::ExamplePermission1)] #[Authorize(permissions: FakePermission::ExamplePermission3)] class PermissionAuthorizationController3 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController4.php b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController4.php index 6235131..5be01d2 100644 --- a/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController4.php +++ b/tests/Fakes/Http/Controllers/PermissionsAuthorizationTest/PermissionAuthorizationController4.php @@ -2,28 +2,28 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\PermissionsAuthorizationTest; -use Codestage\Authorization\Attributes\Authorize;; +use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Enums\FakePermission; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(permissions: FakePermission::ExamplePermission1)] #[Authorize(permissions: FakePermission::ExamplePermission3)] class PermissionAuthorizationController4 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function onlyRequiresClassPermissions(): \Illuminate\Http\Response + public function onlyRequiresClassPermissions(): Response { - return Response::noContent(); + return new Response(status: 204); } /** - * @return \Illuminate\Http\Response + * @return Response */ #[Authorize(permissions: FakePermission::ExamplePermission2)] - public function requiresClassAndMethodPermissions(): \Illuminate\Http\Response + public function requiresClassAndMethodPermissions(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController1.php b/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController1.php index ba00a6f..8fe0983 100644 --- a/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController1.php +++ b/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController1.php @@ -4,13 +4,13 @@ use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Authorization\Policies\RequireDateChristmasPolicy; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(RequireDateChristmasPolicy::class)] class PolicyAuthorizationTestController1 { - public function __invoke() + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController2.php b/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController2.php index 2e2a573..61bd8de 100644 --- a/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController2.php +++ b/tests/Fakes/Http/Controllers/PolicyAuthorizationTest/PolicyAuthorizationTestController2.php @@ -5,13 +5,13 @@ use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Tests\Fakes\Authorization\Policies\PolicyThatRequiresUserProfile; use Codestage\Authorization\Tests\Fakes\Models\UserProfile; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; class PolicyAuthorizationTestController2 { #[Authorize(PolicyThatRequiresUserProfile::class)] - public function __invoke(UserProfile $profile) + public function __invoke(UserProfile $profile): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/ResourceAuthorizationTest/DocumentController1.php b/tests/Fakes/Http/Controllers/ResourceAuthorizationTest/DocumentController1.php index e95e182..337f5c7 100644 --- a/tests/Fakes/Http/Controllers/ResourceAuthorizationTest/DocumentController1.php +++ b/tests/Fakes/Http/Controllers/ResourceAuthorizationTest/DocumentController1.php @@ -2,17 +2,14 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\ResourceAuthorizationTest; -use Codestage\Authorization\Attributes\Authorize; use Codestage\Authorization\Contracts\Services\IAuthorizationService; use Codestage\Authorization\Tests\Fakes\Authorization\Policies\ActOnDocumentPolicy; use Codestage\Authorization\Tests\Fakes\Models\Document; use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\AuthenticationException; -use Illuminate\Contracts\Auth\Guard; +use Illuminate\Contracts\Auth\Guard as AuthManager; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Http\Response; -use Illuminate\Support\Facades\DB; -use Illuminate\Validation\UnauthorizedException; class DocumentController1 { @@ -20,27 +17,27 @@ class DocumentController1 * DocumentController1 constructor method. * * @param IAuthorizationService $_authorizationService - * @param Guard $_authManager + * @param AuthManager $_authManager */ public function __construct( private readonly IAuthorizationService $_authorizationService, - private readonly Guard $_authManager - ) - { + private readonly AuthManager $_authManager + ) { } /** * Do nothing. * * @param int $document - * @return Response * @throws AuthenticationException * @throws AuthorizationException * @throws BindingResolutionException + * @return Response */ public function __invoke(int $document): Response { $document = Document::query()->findOrFail($document); + if ($this->_authorizationService->authorizePolicy($document, ActOnDocumentPolicy::class)) { return new Response(); } else if ($this->_authManager->check()) { @@ -49,4 +46,4 @@ public function __invoke(int $document): Response throw new AuthenticationException(); } } -} \ No newline at end of file +} diff --git a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController1.php b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController1.php index c56e416..2417058 100644 --- a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController1.php +++ b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController1.php @@ -3,16 +3,16 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\RoleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(roles: 'test-role-1')] class RoleAuthorizationController1 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController2.php b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController2.php index 88d625b..5946221 100644 --- a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController2.php +++ b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController2.php @@ -3,16 +3,16 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\RoleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(roles: ['test-role-1', 'test-role-3'])] class RoleAuthorizationController2 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController3.php b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController3.php index 6d76c58..17e3de9 100644 --- a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController3.php +++ b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController3.php @@ -3,17 +3,17 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\RoleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(roles: 'test-role-1')] #[Authorize(roles: 'test-role-3')] class RoleAuthorizationController3 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function __invoke(): \Illuminate\Http\Response + public function __invoke(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController4.php b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController4.php index 54b7dbc..557d13d 100644 --- a/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController4.php +++ b/tests/Fakes/Http/Controllers/RoleAuthorizationTest/RoleAuthorizationController4.php @@ -3,26 +3,26 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\RoleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize(roles: 'test-role-1')] #[Authorize(roles: 'test-role-3')] class RoleAuthorizationController4 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function onlyRequiresClassRoles(): \Illuminate\Http\Response + public function onlyRequiresClassRoles(): Response { - return Response::noContent(); + return new Response(status: 204); } /** - * @return \Illuminate\Http\Response + * @return Response */ #[Authorize(roles: 'test-role-2')] - public function requiresClassAndMethodRoles(): \Illuminate\Http\Response + public function requiresClassAndMethodRoles(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController1.php b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController1.php index 509c8f6..acc9567 100644 --- a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController1.php +++ b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController1.php @@ -3,24 +3,24 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\SimpleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize] class SimpleAuthorizationController1 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function requiresAuth(): \Illuminate\Http\Response + public function requiresAuth(): Response { - return Response::noContent(); + return new Response(status: 204); } /** - * @return \Illuminate\Http\Response + * @return Response */ - public function requiresAuthAsWell(): \Illuminate\Http\Response + public function requiresAuthAsWell(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController2.php b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController2.php index 287ac43..3f7a174 100644 --- a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController2.php +++ b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController2.php @@ -3,24 +3,24 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\SimpleAuthorizationTest; use Codestage\Authorization\Attributes\Authorize; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; class SimpleAuthorizationController2 { /** - * @return \Illuminate\Http\Response + * @return Response */ - public function doesNotRequireAuth(): \Illuminate\Http\Response + public function doesNotRequireAuth(): Response { - return Response::noContent(); + return new Response(status: 204); } /** - * @return \Illuminate\Http\Response + * @return Response */ #[Authorize] - public function requiresAuthAsWell(): \Illuminate\Http\Response + public function requiresAuthAsWell(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController3.php b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController3.php index 1db2229..cb2be66 100644 --- a/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController3.php +++ b/tests/Fakes/Http/Controllers/SimpleAuthorizationTest/SimpleAuthorizationController3.php @@ -3,25 +3,25 @@ namespace Codestage\Authorization\Tests\Fakes\Http\Controllers\SimpleAuthorizationTest; use Codestage\Authorization\Attributes\{AllowAnonymous, Authorize}; -use Illuminate\Support\Facades\Response; +use Illuminate\Http\Response; #[Authorize] class SimpleAuthorizationController3 { /** - * @return \Illuminate\Http\Response + * @return Response */ #[AllowAnonymous] - public function doesNotRequireAuth(): \Illuminate\Http\Response + public function doesNotRequireAuth(): Response { - return Response::noContent(); + return new Response(status: 204); } /** - * @return \Illuminate\Http\Response + * @return Response */ - public function requiresAuthAsWell(): \Illuminate\Http\Response + public function requiresAuthAsWell(): Response { - return Response::noContent(); + return new Response(status: 204); } } diff --git a/tests/Fakes/Models/Document.php b/tests/Fakes/Models/Document.php index cb78df3..e03796d 100644 --- a/tests/Fakes/Models/Document.php +++ b/tests/Fakes/Models/Document.php @@ -9,4 +9,4 @@ class Document extends Model protected $fillable = [ 'user_id' ]; -} \ No newline at end of file +} diff --git a/tests/Feature/PermissionsAuthorizationTest.php b/tests/Feature/PermissionsAuthorizationTest.php index 8a24b37..0c845d1 100644 --- a/tests/Feature/PermissionsAuthorizationTest.php +++ b/tests/Feature/PermissionsAuthorizationTest.php @@ -10,7 +10,7 @@ PermissionAuthorizationController3, PermissionAuthorizationController4}; use Codestage\Authorization\Tests\TestCase; -use Illuminate\Support\Facades\{Route, URL}; +use Illuminate\Contracts\Routing\{Registrar, UrlGenerator}; use Illuminate\Testing\TestResponse; /** @@ -25,12 +25,16 @@ class PermissionsAuthorizationTest extends TestCase public function OnlyClassGuard_WhenClassRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -45,12 +49,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationAndDoesNotHavePermi { // Arrange $this->authenticateUser(); - Route::get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -65,12 +73,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationValid_Success(): vo { // Arrange $this->authenticateUser([FakePermission::ExamplePermission1]); - Route::get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -84,12 +96,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationValid_Success(): vo public function MultipleOptional_WhenClassRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -104,12 +120,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndDoesNotHavePer { // Arrange $this->authenticateUser(); - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -124,12 +144,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasNoValidPerm { // Arrange $this->authenticateUser([FakePermission::ExamplePermission2]); - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -144,12 +168,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasOnePermissi { // Arrange $this->authenticateUser([FakePermission::ExamplePermission1]); - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -164,12 +192,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasOtherPermis { // Arrange $this->authenticateUser([FakePermission::ExamplePermission3]); - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -184,12 +216,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasBothPermiss { // Arrange $this->authenticateUser([FakePermission::ExamplePermission1, FakePermission::ExamplePermission3]); - Route::get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -203,12 +239,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasBothPermiss public function MultipleRequired_WhenNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -223,12 +263,16 @@ public function MultipleRequired_WithoutPermissions_Forbidden(): void { // Arrange $this->authenticateUser(); - Route::get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -243,12 +287,16 @@ public function MultipleRequired_WhenHasOnlyFirstPermission_Forbidden(): void { // Arrange $this->authenticateUser([FakePermission::ExamplePermission1]); - Route::get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -263,12 +311,16 @@ public function MultipleRequired_WhenHasOnlySecondPermission_Forbidden(): void { // Arrange $this->authenticateUser([FakePermission::ExamplePermission3]); - Route::get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -283,12 +335,16 @@ public function MultipleRequired_WhenValid_Success(): void { // Arrange $this->authenticateUser([FakePermission::ExamplePermission1, FakePermission::ExamplePermission3]); - Route::get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PermissionAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -302,14 +358,18 @@ public function MultipleRequired_WhenValid_Success(): void public function MultipleRequiredOnClassAndMethod_WhenNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -325,14 +385,18 @@ public function MultipleRequiredOnClassAndMethod_WithoutPermissions_Forbidden(): { // Arrange $this->authenticateUser(); - Route::get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -351,14 +415,18 @@ public function MultipleRequiredOnClassAndMethod_WhenOnlyHasOneClassPermission_F FakePermission::ExamplePermission1, FakePermission::ExamplePermission2 ]); - Route::get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -377,14 +445,18 @@ public function MultipleRequiredOnClassAndMethod_WhenHasClassPermissions_Forbidd FakePermission::ExamplePermission1, FakePermission::ExamplePermission3 ]); - Route::get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -404,14 +476,18 @@ public function MultipleRequiredOnClassAndMethod_WhenHasClassAndMethodPermission FakePermission::ExamplePermission2, FakePermission::ExamplePermission3 ]); - Route::get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [PermissionAuthorizationController4::class, 'onlyRequiresClassPermissions'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [PermissionAuthorizationController4::class, 'requiresClassAndMethodPermissions'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert diff --git a/tests/Feature/PolicyAuthorizationTest.php b/tests/Feature/PolicyAuthorizationTest.php index cc09e64..368582f 100644 --- a/tests/Feature/PolicyAuthorizationTest.php +++ b/tests/Feature/PolicyAuthorizationTest.php @@ -4,15 +4,14 @@ use Carbon\Carbon; use Codestage\Authorization\Middleware\AuthorizationMiddleware; -use Codestage\Authorization\Tests\Fakes\Http\Controllers\PolicyAuthorizationTest\PolicyAuthorizationTestController1; -use Codestage\Authorization\Tests\Fakes\Http\Controllers\PolicyAuthorizationTest\PolicyAuthorizationTestController2; -use Codestage\Authorization\Tests\Fakes\Models\User; -use Codestage\Authorization\Tests\Fakes\Models\UserProfile; +use Codestage\Authorization\Tests\Fakes\Http\Controllers\PolicyAuthorizationTest\{PolicyAuthorizationTestController1}; use Codestage\Authorization\Tests\TestCase; -use Illuminate\Support\Facades\Route; -use Illuminate\Support\Facades\URL; +use Illuminate\Contracts\Routing\{Registrar, UrlGenerator}; use Illuminate\Testing\TestResponse; +/** + * @coversNothing + */ class PolicyAuthorizationTest extends TestCase { /** @@ -22,12 +21,16 @@ class PolicyAuthorizationTest extends TestCase public function Authorize_WhenClassRequiresPolicyAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -42,13 +45,17 @@ public function Authorize_WhenClassRequiresPolicyWhichFails_Forbidden(): void { // Arrange $this->authenticateUser(); - Route::get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); Carbon::setTestNow(Carbon::parse('2001-07-26T00:00:00Z')); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -63,13 +70,17 @@ public function Authorize_WhenClassRequiresPolicyWhichPasses_Success(): void { // Arrange $this->authenticateUser(); - Route::get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', PolicyAuthorizationTestController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); Carbon::setTestNow(Carbon::parse('2001-12-25T00:00:00Z')); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert diff --git a/tests/Feature/ResourceAuthorizationTest.php b/tests/Feature/ResourceAuthorizationTest.php index f6914fc..93ae5d1 100644 --- a/tests/Feature/ResourceAuthorizationTest.php +++ b/tests/Feature/ResourceAuthorizationTest.php @@ -2,17 +2,16 @@ namespace Codestage\Authorization\Tests\Feature; -use Carbon\Carbon; use Codestage\Authorization\Middleware\AuthorizationMiddleware; -use Codestage\Authorization\Tests\Fakes\Http\Controllers\PolicyAuthorizationTest\PolicyAuthorizationTestController1; use Codestage\Authorization\Tests\Fakes\Http\Controllers\ResourceAuthorizationTest\DocumentController1; -use Codestage\Authorization\Tests\Fakes\Models\Document; -use Codestage\Authorization\Tests\Fakes\Models\User; +use Codestage\Authorization\Tests\Fakes\Models\{Document, User}; use Codestage\Authorization\Tests\TestCase; -use Illuminate\Support\Facades\Route; -use Illuminate\Support\Facades\URL; +use Illuminate\Contracts\Routing\{Registrar, UrlGenerator}; use Illuminate\Testing\TestResponse; +/** + * @coversNothing + */ class ResourceAuthorizationTest extends TestCase { /** @@ -22,18 +21,22 @@ class ResourceAuthorizationTest extends TestCase public function Authorize_WhenNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1/{document}', DocumentController1::class) + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1/{document}', DocumentController1::class) ->middleware([AuthorizationMiddleware::class]) ->name('test1'); $user = User::query()->create(); $document = Document::query()->create([ 'user_id' => $user->getKey() ]); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1', $document)), + $this->getJson($urlGenerator->route('test1', $document)), ]; // Assert @@ -48,18 +51,22 @@ public function Authorize_WhenFails_Forbidden(): void { // Arrange $this->authenticateUser(); - Route::get('test1/{document}', DocumentController1::class) + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1/{document}', DocumentController1::class) ->middleware([AuthorizationMiddleware::class]) ->name('test1'); $user = User::query()->create(); $document = Document::query()->create([ 'user_id' => $user->getKey() ]); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1', $document)), + $this->getJson($urlGenerator->route('test1', $document)), ]; // Assert @@ -73,18 +80,22 @@ public function Authorize_WhenFails_Forbidden(): void public function Authorize_WhenPasses_Success(): void { // Arrange - Route::get('test1/{document}', DocumentController1::class) + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1/{document}', DocumentController1::class) ->middleware([AuthorizationMiddleware::class]) ->name('test1'); $user = $this->authenticateUser(); $document = Document::query()->create([ 'user_id' => $user->getKey() ]); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1', $document)), + $this->getJson($urlGenerator->route('test1', $document)), ]; // Assert diff --git a/tests/Feature/RoleAuthorizationTest.php b/tests/Feature/RoleAuthorizationTest.php index 526467b..c00d705 100644 --- a/tests/Feature/RoleAuthorizationTest.php +++ b/tests/Feature/RoleAuthorizationTest.php @@ -8,7 +8,7 @@ RoleAuthorizationController3, RoleAuthorizationController4}; use Codestage\Authorization\Tests\TestCase; -use Illuminate\Support\Facades\{Route, URL}; +use Illuminate\Contracts\Routing\{Registrar, UrlGenerator}; use Illuminate\Testing\TestResponse; /** @@ -23,12 +23,16 @@ class RoleAuthorizationTest extends TestCase public function OnlyClassGuard_WhenClassRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -43,12 +47,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationAndDoesNotHaveRoles { // Arrange $this->authenticateUser(); - Route::get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -63,12 +71,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationValid_Success(): vo { // Arrange $this->authenticateUser(roles: ['test-role-1']); - Route::get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController1::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -82,12 +94,16 @@ public function OnlyClassGuard_WhenClassRequiresAuthorizationValid_Success(): vo public function MultipleOptional_WhenClassRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -102,12 +118,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndDoesNotHaveRol { // Arrange $this->authenticateUser(); - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -122,12 +142,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasNoValidRole { // Arrange $this->authenticateUser(roles: ['test-role-2']); - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -142,12 +166,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasOneRole_Suc { // Arrange $this->authenticateUser(roles: ['test-role-1']); - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -162,12 +190,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasOtherRole_S { // Arrange $this->authenticateUser(roles: ['test-role-3']); - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -182,12 +214,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasBothRoles_S { // Arrange $this->authenticateUser(roles: ['test-role-1', 'test-role-3']); - Route::get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController2::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -201,12 +237,16 @@ public function MultipleOptional_WhenClassRequiresAuthorizationAndHasBothRoles_S public function MultipleRequired_WhenNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -221,12 +261,16 @@ public function MultipleRequired_WithoutRoles_Forbidden(): void { // Arrange $this->authenticateUser(); - Route::get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -241,12 +285,16 @@ public function MultipleRequired_WhenHasOnlyFirstRoles_Forbidden(): void { // Arrange $this->authenticateUser(roles: ['test-role-1']); - Route::get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -261,12 +309,16 @@ public function MultipleRequired_WhenHasOnlySecondRoles_Forbidden(): void { // Arrange $this->authenticateUser(roles: ['test-role-3']); - Route::get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -281,12 +333,16 @@ public function MultipleRequired_WhenValid_Success(): void { // Arrange $this->authenticateUser(roles: ['test-role-1', 'test-role-3']); - Route::get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', RoleAuthorizationController3::class)->middleware([AuthorizationMiddleware::class])->name('test1'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), + $this->getJson($urlGenerator->route('test1')), ]; // Assert @@ -300,14 +356,18 @@ public function MultipleRequired_WhenValid_Success(): void public function MultipleRequiredOnClassAndMethod_WhenNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -323,14 +383,18 @@ public function MultipleRequiredOnClassAndMethod_WithoutRoles_Forbidden(): void { // Arrange $this->authenticateUser(); - Route::get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -349,14 +413,18 @@ public function MultipleRequiredOnClassAndMethod_WhenOnlyHasOneClassRoles_Forbid 'test-role-1', 'test-role-2' ]); - Route::get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -375,14 +443,18 @@ public function MultipleRequiredOnClassAndMethod_WhenHasClassRoles_Forbidden(): 'test-role-1', 'test-role-3' ]); - Route::get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert @@ -402,14 +474,18 @@ public function MultipleRequiredOnClassAndMethod_WhenHasClassAndMethodRoles_Succ 'test-role-2', 'test-role-3' ]); - Route::get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [RoleAuthorizationController4::class, 'onlyRequiresClassRoles'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [RoleAuthorizationController4::class, 'requiresClassAndMethodRoles'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')), + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')), ]; // Assert diff --git a/tests/Feature/SimpleAuthorizationTest.php b/tests/Feature/SimpleAuthorizationTest.php index 5ce4b66..d59cb0e 100644 --- a/tests/Feature/SimpleAuthorizationTest.php +++ b/tests/Feature/SimpleAuthorizationTest.php @@ -7,7 +7,7 @@ SimpleAuthorizationController2, SimpleAuthorizationController3}; use Codestage\Authorization\Tests\TestCase; -use Illuminate\Support\Facades\{Route, URL}; +use Illuminate\Contracts\Routing\{Registrar, UrlGenerator}; use Illuminate\Testing\TestResponse; /** @@ -22,14 +22,18 @@ class SimpleAuthorizationTest extends TestCase public function Authorize_WhenClassRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', [SimpleAuthorizationController1::class, 'requiresAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController1::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController1::class, 'requiresAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController1::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert @@ -44,14 +48,18 @@ public function Authorize_WhenClassRequiresAuthorizationAndIsAuthenticated_Succe { // Arrange $this->authenticateUser(); - Route::get('test1', [SimpleAuthorizationController1::class, 'requiresAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController1::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController1::class, 'requiresAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController1::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert @@ -66,14 +74,18 @@ public function Authorize_WhenClassRequiresAuthorizationAndIsAuthenticated_Succe public function Authorize_WhenMethodRequiresAuthorizationAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', [SimpleAuthorizationController2::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController2::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController2::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController2::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert @@ -88,14 +100,18 @@ public function Authorize_WhenMethodRequiresAuthorizationAndIsAuthenticated_Succ { // Arrange $this->authenticateUser(); - Route::get('test1', [SimpleAuthorizationController2::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController2::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController2::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController2::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert @@ -110,14 +126,18 @@ public function Authorize_WhenMethodRequiresAuthorizationAndIsAuthenticated_Succ public function Authorize_WhenClassRequiresAuthButMethodBypassesItAndNotAuthenticated_Unauthorized(): void { // Arrange - Route::get('test1', [SimpleAuthorizationController3::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController3::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController3::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController3::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert @@ -132,14 +152,18 @@ public function Authorize_WhenClassRequiresAuthButMethodBypassesItAndIsAuthentic { // Arrange $this->authenticateUser(); - Route::get('test1', [SimpleAuthorizationController3::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); - Route::get('test2', [SimpleAuthorizationController3::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var Registrar $router */ + $router = $this->app->make(Registrar::class); + $router->get('test1', [SimpleAuthorizationController3::class, 'doesNotRequireAuth'])->middleware([AuthorizationMiddleware::class])->name('test1'); + $router->get('test2', [SimpleAuthorizationController3::class, 'requiresAuthAsWell'])->middleware([AuthorizationMiddleware::class])->name('test2'); + /** @var UrlGenerator $urlGenerator */ + $urlGenerator = $this->app->make(UrlGenerator::class); // Act /** @var TestResponse[] $responses */ $responses = [ - $this->getJson(URL::route('test1')), - $this->getJson(URL::route('test2')) + $this->getJson($urlGenerator->route('test1')), + $this->getJson($urlGenerator->route('test2')) ]; // Assert diff --git a/tests/TestCase.php b/tests/TestCase.php index c0ea0e7..375724f 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -8,10 +8,10 @@ use Codestage\Authorization\Tests\Fakes\Enums\FakePermission; use Codestage\Authorization\Tests\Fakes\Models\User; use Illuminate\Config\Repository; -use Illuminate\Database\Schema\Blueprint; +use Illuminate\Contracts\Auth\Factory as AuthManager; +use Illuminate\Database\Schema\{Blueprint, Builder as SchemaBuilder}; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Testing\{RefreshDatabase, WithFaker}; -use Illuminate\Support\Facades\{Auth, Schema}; use Illuminate\Support\Str; use Mockery; use Orchestra\Testbench\TestCase as OrchestraTestCase; @@ -47,16 +47,18 @@ protected function setUp(): void $configRepository->set('authorization.permissions_enum', FakePermission::class); // Create a fake table - Schema::create('users', function (Blueprint $table): void { + /** @var SchemaBuilder $schema */ + $schema = $this->app->make(SchemaBuilder::class); + $schema->create('users', function (Blueprint $table): void { $table->id(); $table->timestamps(); }); - Schema::create('user_profiles', function (Blueprint $table): void { + $schema->create('user_profiles', function (Blueprint $table): void { $table->id(); $table->foreignIdFor(User::class); $table->timestamps(); }); - Schema::create('documents', function (Blueprint $table): void { + $schema->create('documents', function (Blueprint $table): void { $table->id(); $table->foreignIdFor(User::class); $table->timestamps(); @@ -81,10 +83,13 @@ protected function getPackageProviders($app): array protected function authenticateUser(iterable $permissions = [], iterable $roles = []): Authenticatable { // Create the user + /** @var User $user */ $user = User::query()->create(); // Authenticate as this user - Auth::login($user); + /** @var AuthManager $authManager */ + $authManager = $this->app->make(AuthManager::class); + $authManager->guard()->login($user); // Accumulate all created roles in an array in order to assign them to the user at the end $createdRoles = []; From 540ad7bb497a035392d5349de13417a74904b7f6 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 12:08:25 +0300 Subject: [PATCH 3/9] Added a gitignore for sqlite files in the tests directory. --- tests/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 tests/.gitignore diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..7cf7e91 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,2 @@ +*.sqlite +*.sqlite-journal \ No newline at end of file From 2706c96dc3e4c8e5b8fe8882fb1485d488370844 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 12:14:37 +0300 Subject: [PATCH 4/9] Removed the installation command. --- src/Console/Commands/InstallCommand.php | 260 ------------------ .../AuthorizationServiceProvider.php | 5 +- 2 files changed, 1 insertion(+), 264 deletions(-) delete mode 100644 src/Console/Commands/InstallCommand.php diff --git a/src/Console/Commands/InstallCommand.php b/src/Console/Commands/InstallCommand.php deleted file mode 100644 index 8d8ce9f..0000000 --- a/src/Console/Commands/InstallCommand.php +++ /dev/null @@ -1,260 +0,0 @@ -call('vendor:publish', [ - '--tag' => 'configuration', - '--provider' => AuthorizationServiceProvider::class - ]); - - // Create the permissions enum - if ($this->createPermissionEnum()) { - $this->output->success('Permissions enum created.'); - } else { - return BaseCommand::FAILURE; - } - - // Update permissions_enum in the config file - $configurationContents = file_get_contents($this->laravel->configPath('authorization.php')); - $configurationContents = str_ireplace( - 'Codestage\Authorization\Contracts\IPermissionEnum::class', - self::PermissionEnumNamespace . '\Permission::class', - $configurationContents - ); - - if (file_put_contents($this->laravel->configPath('authorization.php'), $configurationContents) === false) { - $this->output->info('You can set the enum you intend to use for permissions inside config/authorization.php'); - } - - // Create the authorization namespaces - if (!is_dir($this->laravel->basePath('app/Authorization'))) { - mkdir($this->laravel->basePath('app/Authorization')); - } - - if (!is_dir($this->laravel->basePath('app/Authorization/Handlers'))) { - mkdir($this->laravel->basePath('app/Authorization/Handlers')); - } - - if (!is_dir($this->laravel->basePath('app/Authorization/Policies'))) { - mkdir($this->laravel->basePath('app/Authorization/Policies')); - } - - if (!is_dir($this->laravel->basePath('app/Authorization/Requirements'))) { - mkdir($this->laravel->basePath('app/Authorization/Requirements')); - } - - // Ask the user whether they want to run migrations now - if ($this->confirm('Do you want to run migrations now?', true)) { - $this->call('migrate'); - } - - // Check whether the user has default laravel policies and warn them if they do - $defaultPoliciesPath = $this->laravel->basePath('app/Policies'); - - if (is_dir($defaultPoliciesPath)) { - if ($this->checkDirectoryEmpty($defaultPoliciesPath)) { - unlink($defaultPoliciesPath); - } else { - $this->output->warning([ - 'It seems like you are using Laravel policies as well in your project.', - 'We recommend migrating them to the policy-based authorization this package provides.' - ]); - } - } - - // Add the middleware to the Kernel - if ($this->addMiddlewareToKernel()) { - $this->output->success('Middleware added to the HTTP Kernel file.'); - } else { - $this->output->warning([ - 'Middleware could not be added to the Kernel file!', - 'You will have to do this yourself manually.', - 'We suggest you place it in your middleware groups, before SubstituteBindings is run', - 'Note that placing it in the global middleware will not work.' - ]); - } - - return BaseCommand::SUCCESS; - } - - /** - * Create the permissions enum. - * - * @return bool - */ - private function createPermissionEnum(): bool - { - $path = $this->laravel->basePath(self::PermissionEnumPath); - - // If a file by that name already exists, ask the user whether to overwrite it - if (file_exists($path)) { - if ($this->confirm('It seems a file with the name of ' . self::PermissionEnumPath . ' already exists. Do you wish to overwrite it?', true)) { - if (!unlink($path)) { - $this->output->error('File could not be deleted! Delete it manually and try again.'); - } - } else { - return false; - } - } - - // Generate the permission enum from the stub - $enumContents = $this->completeStub('permission_enum.stub', [ - 'namespace' => self::PermissionEnumNamespace - ]); - - // Extract path before last slash (supposedly the Enums directory) - $directory = $this->laravel->basePath(mb_substr(self::PermissionEnumPath, 0, mb_strrpos(self::PermissionEnumPath, '/'))); - - // If the directory does not exist, create it - if (!is_dir($directory)) { - mkdir($directory); - } - - // Publish the stub - return file_put_contents($path, $enumContents) !== false; - } - - /** - * Generate a hydrated string value from the given stub. - * - * @param string $stubName - * @param array $replacements - * @return string - */ - private function completeStub(string $stubName, array $replacements = []): string - { - // Try to get the stub file contents - $stub = file_get_contents($this->laravel->basePath('vendor/codestage/laravel-authorization/stubs/' . $stubName)); - - // Make sure the stub actually exists - if ($stub === false) { - throw new Error('Stub not found: ' . $stubName); - } - - // Replace interpolations from the replacements array - foreach ($replacements as $key => $value) { - $stub = (string) str_ireplace('{{ ' . $key . ' }}', $value, $stub); - $stub = (string) str_ireplace('{{' . $key . '}}', $value, $stub); - } - - // Return the resulting string - return $stub; - } - - /** - * Add the required middleware to the Kernel. - * - * @return bool - */ - public function addMiddlewareToKernel(): bool - { - // If the kernel does not exist, there is nothing to be done - if (!file_exists(self::KernelPath)) { - return false; - } - - // If the kernel does not exist, there is nothing to be done - if (!class_exists(self::KernelClass)) { - return false; - } - - // Try to get the initial file contents - $newFileContents = file_get_contents(self::KernelPath); - - if ($newFileContents === false) { - return false; - } - - // Try to reflect on the middlewareGroups property of the Kernel class - $reflection = new ReflectionClass(self::KernelClass); - - if (!$reflection->hasProperty('middlewareGroups')) { - return false; - } - - $groups = $reflection->getProperty('middlewareGroups')->getDefaultValue(); - - if (!\is_array($groups)) { - return false; - } - - // Build the middleware class' FQN - $middlewareQualifiedName = AuthorizationMiddleware::class; - - if (!str_starts_with($middlewareQualifiedName, '\\')) { - $middlewareQualifiedName = '\\' . $middlewareQualifiedName; - } - - // Add the middleware to each group - foreach ($groups as $group => $groupMiddleware) { - if (!\in_array(AuthorizationMiddleware::class, $groupMiddleware)) { - $newFileContents = preg_replace( - '/([\'"]' . $group . '[\'"] => \\[[a-zA-Z\\s:,\\/\\\\\'\"]+?)([ \\t]+)((?:(?:\\w|\\\\)+)?SubstituteBindings::class)/m', - '$1$2' . $middlewareQualifiedName . "::class,\n$2$3", - $newFileContents - ); - } - } - - // Update the kernel file - return file_put_contents(self::KernelPath, $newFileContents) !== false; - } - - /** - * Check if the given directory is empty. - * - * @param string $directory - * @return bool - */ - private function checkDirectoryEmpty(string $directory): bool - { - $handle = opendir($directory); - - while (($entry = readdir($handle)) !== false) { - if ($entry !== '.' && $entry !== '..') { - closedir($handle); - - return false; - } - } - closedir($handle); - - return true; - } -} diff --git a/src/Providers/AuthorizationServiceProvider.php b/src/Providers/AuthorizationServiceProvider.php index 919318c..6e5ab46 100644 --- a/src/Providers/AuthorizationServiceProvider.php +++ b/src/Providers/AuthorizationServiceProvider.php @@ -2,7 +2,7 @@ namespace Codestage\Authorization\Providers; -use Codestage\Authorization\Console\Commands\{InstallCommand, MakePolicyCommand, MakeRequirementCommand, MakeRequirementHandlerCommand}; +use Codestage\Authorization\Console\Commands\{MakePolicyCommand, MakeRequirementCommand, MakeRequirementHandlerCommand}; use Codestage\Authorization\Contracts\Services\{IAuthorizationCheckService, IAuthorizationService}; use Codestage\Authorization\Services\{AuthorizationCheckService, AuthorizationService}; use Illuminate\Foundation\Console\PolicyMakeCommand as BaseMakePolicyCommand; @@ -48,9 +48,6 @@ public function boot(): void // Register commands if ($this->app->runningInConsole()) { $this->commands([ - // Installation - InstallCommand::class, - // Make MakePolicyCommand::class, MakeRequirementCommand::class, From 961eaee7ebba1189b5b6c08655f8002d79818df8 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 12:26:16 +0300 Subject: [PATCH 5/9] Updated PHP version to 8.2. * Classes that can be readonly made readonly. * Removed deprecated IAuthorizable contract. --- composer.json | 1 + src/Attributes/AllowAnonymous.php | 2 +- src/Attributes/Authorize.php | 2 +- src/Attributes/HandledBy.php | 2 +- src/Contracts/IAuthorizable.php | 7 ------- src/Handlers/HasPermissionRequirementHandler.php | 4 ++-- src/Handlers/HasRoleRequirementHandler.php | 10 ++++------ src/Middleware/AuthorizationMiddleware.php | 4 ++-- src/Services/AuthorizationCheckService.php | 9 +++------ 9 files changed, 15 insertions(+), 26 deletions(-) delete mode 100644 src/Contracts/IAuthorizable.php diff --git a/composer.json b/composer.json index ba63a29..5343cb6 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "orchestra/testbench": "^9.0" }, "require": { + "php": "^8.2", "illuminate/support": "^11.0", "illuminate/database": "^11.0", "illuminate/contracts": "^11.0", diff --git a/src/Attributes/AllowAnonymous.php b/src/Attributes/AllowAnonymous.php index c5fd644..3a4c2f6 100644 --- a/src/Attributes/AllowAnonymous.php +++ b/src/Attributes/AllowAnonymous.php @@ -7,7 +7,7 @@ #[Attribute( Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD )] -class AllowAnonymous +final readonly class AllowAnonymous { /** * This action marks this action does not require an authenticated user to perform. diff --git a/src/Attributes/Authorize.php b/src/Attributes/Authorize.php index 1fc066b..50e2b6a 100644 --- a/src/Attributes/Authorize.php +++ b/src/Attributes/Authorize.php @@ -8,7 +8,7 @@ #[Attribute( Attribute::IS_REPEATABLE | Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD )] -class Authorize +final readonly class Authorize { /** * This action requires that the user be authenticated and meet the authorization criteria. diff --git a/src/Attributes/HandledBy.php b/src/Attributes/HandledBy.php index 7ffd76f..ffa4f6a 100644 --- a/src/Attributes/HandledBy.php +++ b/src/Attributes/HandledBy.php @@ -5,7 +5,7 @@ use Attribute; #[Attribute(Attribute::TARGET_CLASS)] -class HandledBy +final readonly class HandledBy { /** * @param class-string|array $handler diff --git a/src/Contracts/IAuthorizable.php b/src/Contracts/IAuthorizable.php deleted file mode 100644 index 4696bd6..0000000 --- a/src/Contracts/IAuthorizable.php +++ /dev/null @@ -1,7 +0,0 @@ - */ -class HasPermissionRequirementHandler implements IRequirementHandler +readonly class HasPermissionRequirementHandler implements IRequirementHandler { /** * HasPermissionHandler constructor method. @@ -19,7 +19,7 @@ class HasPermissionRequirementHandler implements IRequirementHandler * @param AuthManager $_authManager */ public function __construct( - private readonly AuthManager $_authManager + private AuthManager $_authManager ) { } diff --git a/src/Handlers/HasRoleRequirementHandler.php b/src/Handlers/HasRoleRequirementHandler.php index cf1fe0d..ef1f405 100644 --- a/src/Handlers/HasRoleRequirementHandler.php +++ b/src/Handlers/HasRoleRequirementHandler.php @@ -5,21 +5,19 @@ use Codestage\Authorization\Contracts\{IRequirement, IRequirementHandler}; use Codestage\Authorization\Requirements\HasRoleRequirement; use Codestage\Authorization\Traits\HasPermissions; -use Illuminate\Contracts\Auth\Guard as AuthManager; +use Illuminate\Contracts\Auth\Factory as AuthManager; use Illuminate\Support\Collection; /** * @implements IRequirementHandler */ -class HasRoleRequirementHandler implements IRequirementHandler +readonly class HasRoleRequirementHandler implements IRequirementHandler { /** * HasRoleRequirementHandler constructor method. - * - * @param AuthManager $_authManager */ public function __construct( - private readonly AuthManager $_authManager + private AuthManager $_authManager ) { } @@ -32,7 +30,7 @@ public function __construct( public function handle(IRequirement $requirement): bool { /** @var HasPermissions $user */ - $user = $this->_authManager->user(); + $user = $this->_authManager->guard()->user(); // If there is no current user, the requirement fails if (!$user) { diff --git a/src/Middleware/AuthorizationMiddleware.php b/src/Middleware/AuthorizationMiddleware.php index b36953e..dce4fcd 100644 --- a/src/Middleware/AuthorizationMiddleware.php +++ b/src/Middleware/AuthorizationMiddleware.php @@ -10,13 +10,13 @@ use ReflectionException; use Throwable; -class AuthorizationMiddleware +readonly class AuthorizationMiddleware { /** * AuthorizeMiddleware constructor method. */ public function __construct( - private readonly IAuthorizationCheckService $_authorizationService + private IAuthorizationCheckService $_authorizationService ) { } diff --git a/src/Services/AuthorizationCheckService.php b/src/Services/AuthorizationCheckService.php index 1ef863b..239cfb2 100644 --- a/src/Services/AuthorizationCheckService.php +++ b/src/Services/AuthorizationCheckService.php @@ -20,9 +20,6 @@ use ReflectionClass; use ReflectionException; use ReflectionFunction; -use function get_class; -use function in_array; -use function is_string; /** * @internal @@ -59,7 +56,7 @@ public function __construct( */ private function isAuthorizationAttribute(object|string $class): bool { - $className = is_string($class) ? $class : get_class($class); + $className = \is_string($class) ? $class : \get_class($class); foreach (self::AuthorizationAttributes as $attribute) { if (is_subclass_of($className, $attribute) || $className === $attribute) { @@ -126,7 +123,7 @@ private function computeAttributesForClosure(Closure $closure): Enumerable $reflectionFunction = new ReflectionFunction($closure); return (new Collection($reflectionFunction->getAttributes())) - ->filter(fn (ReflectionAttribute $attribute) => in_array($attribute->getName(), self::AuthorizationAttributes)); + ->filter(fn (ReflectionAttribute $attribute) => \in_array($attribute->getName(), self::AuthorizationAttributes)); } /** @@ -229,7 +226,7 @@ public function requirements(): array } // Instantiate all policies and run them - return $policies->map(fn (string|IPolicy $policy) => is_string($policy) ? $this->_container->make($policy) : $policy) + return $policies->map(fn (string|IPolicy $policy) => \is_string($policy) ? $this->_container->make($policy) : $policy) ->some(fn (IPolicy $policy) => $this->_authorizationService->authorizePolicy(null, $policy)); } From e77b42079b7320741e7e07c468e307cc1082c421 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 12:59:14 +0300 Subject: [PATCH 6/9] Updated the composer lock file --- composer.lock | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/composer.lock b/composer.lock index fa63975..e9cc7e4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d480476a2ab97e2fc7b2549ede35e236", + "content-hash": "76b3c46e31ea10237a122a99443586a9", "packages": [ { "name": "brick/math", @@ -9192,7 +9192,9 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, - "platform": [], + "platform": { + "php": "^8.2" + }, "platform-dev": [], "plugin-api-version": "2.6.0" } From 2f21f63799fee900569a4ec7da58ef7212f1b267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20C=C4=83lin?= <28299559+irealworlds@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:11:22 +0300 Subject: [PATCH 7/9] Update tests.yml --- .github/workflows/tests.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5856d05..04b5ebe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,9 +15,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e + - uses: shivammathur/setup-php@2.30.2 with: - php-version: '8.1' + php-version: '8.2' - uses: actions/checkout@v3 @@ -30,7 +30,14 @@ jobs: with: name: ${{ github.sha }} - - name: Execute PHPUnit tests + - name: Create Database + run: | + mkdir -p database + touch database/database.sqlite + + - name: Execute tests (Unit and Feature tests) via PHPUnit/Pest env: APP_KEY: ${{ steps.generate-uuid.outputs.uuid }} + DB_CONNECTION: sqlite + DB_DATABASE: database/database.sqlite run: vendor/bin/phpunit -c phpunit.dist.xml From 21959f42d9e6264d22550100f685b968b4b42c52 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 13:11:39 +0300 Subject: [PATCH 8/9] Removed database configuration from the dist phpunit configuration. --- phpunit.dist.xml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/phpunit.dist.xml b/phpunit.dist.xml index 3ad0006..9fc80f8 100644 --- a/phpunit.dist.xml +++ b/phpunit.dist.xml @@ -1,13 +1,10 @@ + cacheDirectory=".phpunit.cache"> ./tests/Unit @@ -17,7 +14,7 @@ - - + + From 701b942bb94eaeeb0ab0727a941633f7302e74f4 Mon Sep 17 00:00:00 2001 From: irealworlds Date: Tue, 16 Apr 2024 13:22:30 +0300 Subject: [PATCH 9/9] Fixed test teardowns. --- tests/TestCase.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index 375724f..c888a8f 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -11,14 +11,14 @@ use Illuminate\Contracts\Auth\Factory as AuthManager; use Illuminate\Database\Schema\{Blueprint, Builder as SchemaBuilder}; use Illuminate\Foundation\Auth\User as Authenticatable; -use Illuminate\Foundation\Testing\{RefreshDatabase, WithFaker}; +use Illuminate\Foundation\Testing\{LazilyRefreshDatabase, WithFaker}; use Illuminate\Support\Str; use Mockery; use Orchestra\Testbench\TestCase as OrchestraTestCase; abstract class TestCase extends OrchestraTestCase { - use RefreshDatabase; + use LazilyRefreshDatabase; use WithFaker; /** @@ -27,6 +27,7 @@ abstract class TestCase extends OrchestraTestCase public function tearDown(): void { Mockery::close(); + parent::tearDown(); } /**