diff --git a/.github/workflows/run-tests-with-coverage.yml b/.github/workflows/run-tests-with-coverage.yml index d92083f..9d28788 100644 --- a/.github/workflows/run-tests-with-coverage.yml +++ b/.github/workflows/run-tests-with-coverage.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: shivammathur/setup-php@v2 with: - php-version: '7.4' + php-version: '8.3' - uses: actions/checkout@v3 - name: Validate composer.json and composer.lock run: composer validate diff --git a/.gitignore b/.gitignore index df20591..6049b54 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea vendor/ .phpunit.result.cache +.phpunit.cache diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b110a1b..0000000 --- a/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM webdevops/php-nginx-dev:7.4 - -RUN wget -O "/usr/local/bin/go-replace" "https://github.com/webdevops/goreplace/releases/download/1.1.2/gr-arm64-linux" \ - && chmod +x "/usr/local/bin/go-replace" \ - && "/usr/local/bin/go-replace" --version diff --git a/ReadMe.md b/ReadMe.md index 82f2924..bb36237 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,5 +1,7 @@ # Laravel-Entity-Generator +[![Coverage Status](https://coveralls.io/repos/github/RonasIT/laravel-entity-generator/badge.svg?branch=master)](https://coveralls.io/github/RonasIT/laravel-entity-generator?branch=master) + Laravel-Entity-Generator - This generator is used to create a standard class stack for a new entity. ### Install diff --git a/composer.json b/composer.json index b7d8bcd..25c8ad0 100644 --- a/composer.json +++ b/composer.json @@ -10,20 +10,21 @@ } ], "require": { - "php": ">=7.1.3", - "laravel/framework": ">=5.7.0", - "ronasit/laravel-helpers": ">=2.5", - "laravel/legacy-factories": ">=1.3.0", - "orchestra/testbench": "^6.25", - "ext-json": "*" + "php": "^8.3", + "laravel/framework": "^11.31.0", + "ronasit/laravel-helpers": "^3.0.1-beta", + "laravel/legacy-factories": ">=1.4.0", + "ext-json": "*", + "doctrine/dbal": "^4.2" }, "require-dev": { - "fzaninotto/faker": "~1.4", - "php-coveralls/php-coveralls": "^2.5", - "mockery/mockery": "^1.4", - "phpunit/phpunit": "^8.0", - "mikey179/vfsstream": "^1.6.11", - "php-mock/php-mock": "^2.4.1" + "fakerphp/faker": "^1.24.0", + "mockery/mockery": "^1.6.12", + "phpunit/phpunit": "^10.5.38", + "php-coveralls/php-coveralls": "^2.7", + "orchestra/testbench": "^9.5.2", + "mikey179/vfsstream": "^1.6.12", + "php-mock/php-mock": "^2.5" }, "autoload": { "psr-4": { @@ -36,7 +37,8 @@ "autoload-dev": { "psr-4": { "RonasIT\\Support\\Tests\\": "tests/", - "RonasIT\\Support\\Tests\\Support\\": "tests/Support/" + "RonasIT\\Support\\Tests\\Support\\": "tests/Support/", + "App\\Nova\\": "tests/Support/Nova/" }, "files": [ "tests/TestCase.php" diff --git a/composer.lock b/composer.lock index 4040b09..9ca57c1 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": "97b34c8bcbcf151de11ecad4d0d3838b", + "content-hash": "3ae8814f99b898c358682732ae14648b", "packages": [ { "name": "brick/math", - "version": "0.9.3", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -47,47 +46,48 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "carbonphp/carbon-doctrine-types", - "version": "2.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.7.0 || >=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -117,7 +117,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -133,28 +133,28 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -198,7 +198,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -214,20 +214,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -287,146 +287,48 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/dbal", - "version": "3.7.2", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "php": "^8.1", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.42", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", - "psalm/plugin-phpunit": "0.18.4", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "10.5.30", + "psalm/plugin-phpunit": "0.19.0", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.0" + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.25.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -479,7 +381,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.2" + "source": "https://github.com/doctrine/dbal/tree/4.2.1" }, "funding": [ { @@ -495,20 +397,20 @@ "type": "tidelift" } ], - "time": "2023-11-19T08:06:58+00:00" + "time": "2024-10-10T18:01:27+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -540,114 +442,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" - }, - "time": "2023-09-27T20:04:15+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -709,7 +519,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -725,105 +535,36 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -855,7 +596,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -871,20 +612,20 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -897,10 +638,14 @@ "require-dev": { "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -924,7 +669,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -932,31 +677,30 @@ "type": "github" } ], - "time": "2023-08-10T19:36:49+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.25", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -964,7 +708,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -992,7 +736,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { @@ -1000,24 +744,24 @@ "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2023-10-06T06:47:41+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.17.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1059,44 +803,42 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { - "name": "fakerphp/faker", - "version": "v1.9.2", + "name": "fruitcake/php-cors", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "84220cf137a9344acffb10374e781fed785ff307" + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/84220cf137a9344acffb10374e781fed785ff307", - "reference": "84220cf137a9344acffb10374e781fed785ff307", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" - }, - "conflict": { - "ergebnis/faker": "!=1.9.2", - "fzaninotto/faker": "!=1.9.2" - }, - "replace": { - "ergebnis/faker": "1.9.2", - "fzaninotto/faker": "1.9.2" + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "Fruitcake\\Cors\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1105,41 +847,57 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", "keywords": [ - "data", - "faker", - "fixtures" + "cors", + "laravel", + "symfony" ], "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.9.2" + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" }, - "time": "2020-12-11T14:32:13+00:00" + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -1168,7 +926,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -1180,26 +938,26 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:16:48+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1210,9 +968,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1290,7 +1048,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -1306,20 +1064,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -1327,7 +1085,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1373,7 +1131,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -1389,20 +1147,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -1417,8 +1175,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1489,7 +1247,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -1505,111 +1263,160 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "name": "guzzlehttp/uri-template", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.1-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "This is the PHP port of Hamcrest Matchers", + "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": [ - "test" + "guzzlehttp", + "uri-template" ], "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" }, - "time": "2020-07-09T08:09:16+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/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" }, { "name": "laravel/framework", - "version": "v8.83.27", + "version": "v11.31.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49" + "reference": "365090ed2c68244e3141cdb5e247cdf3dfba2c40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", - "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "url": "https://api.github.com/repos/laravel/framework/zipball/365090ed2c68244e3141cdb5e247cdf3dfba2c40", + "reference": "365090ed2c68244e3141cdb5e247cdf3dfba2c40", "shasum": "" }, "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", + "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": "*", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/log": "^1.0|^2.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.2.2", - "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.4", - "symfony/error-handler": "^5.4", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "symfony/http-kernel": "^5.4", - "symfony/mime": "^5.4", - "symfony/process": "^5.4", - "symfony/routing": "^5.4", - "symfony/var-dumper": "^5.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "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": "^1.6.1" + "voku/portable-ascii": "^2.0" }, "conflict": { + "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { "illuminate/auth": "self.version", @@ -1617,6 +1424,8 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -1634,6 +1443,7 @@ "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", @@ -1642,70 +1452,89 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { - "aws/aws-sdk-php": "^3.198.1", - "doctrine/dbal": "^2.13.3|^3.1.4", - "filp/whoops": "^2.14.3", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.19|^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^5.4" + "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.5", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.11.5", + "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.198.1).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-bcmath": "Required to use the multiple_of validation rule.", + "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.", + "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).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.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, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "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 (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", + "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 (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.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": "8.x-dev" + "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/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" ] } }, @@ -1729,26 +1558,26 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-12-08T15:28:55+00:00" + "time": "2024-11-12T15:36:15+00:00" }, { "name": "laravel/legacy-factories", - "version": "v1.3.2", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/laravel/legacy-factories.git", - "reference": "cc6720da81094c82ea9f4737d615dd3d71f7f43d" + "reference": "6cb79f668fc36b8b396ada1da3ba45867889c30f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/legacy-factories/zipball/cc6720da81094c82ea9f4737d615dd3d71f7f43d", - "reference": "cc6720da81094c82ea9f4737d615dd3d71f7f43d", + "url": "https://api.github.com/repos/laravel/legacy-factories/zipball/6cb79f668fc36b8b396ada1da3ba45867889c30f", + "reference": "6cb79f668fc36b8b396ada1da3ba45867889c30f", "shasum": "" }, "require": { - "illuminate/macroable": "^8.0|^9.0|^10.0", + "illuminate/macroable": "^8.0|^9.0|^10.0|^11.0", "php": "^7.3|^8.0", - "symfony/finder": "^3.4|^4.0|^5.0|^6.0" + "symfony/finder": "^3.4|^4.0|^5.0|^6.0|^7.0" }, "type": "library", "extra": { @@ -1785,30 +1614,90 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-01-09T14:49:00+00:00" + "time": "2024-01-15T13:55:14+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "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": { + "illuminate/collections": "^10.0|^11.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "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.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.2" + }, + "time": "2024-11-12T14:59:47+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.3", + "version": "v1.3.6", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + "reference": "f865a58ea3a0107c336b7045104c75243fa59d96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f865a58ea3a0107c336b7045104c75243fa59d96", + "reference": "f865a58ea3a0107c336b7045104c75243fa59d96", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "nesbot/carbon": "^2.61", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", "pestphp/pest": "^1.21.3", "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, "type": "library", "extra": { @@ -1845,20 +1734,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-11-08T14:08:06+00:00" + "time": "2024-11-11T17:06:04+00:00" }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "d150f911e0079e90ae3c106734c93137c184f932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d150f911e0079e90ae3c106734c93137c184f932", + "reference": "d150f911e0079e90ae3c106734c93137c184f932", "shasum": "" }, "require": { @@ -1871,8 +1760,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -1881,10 +1770,11 @@ "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/process": "^5.4 | ^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" }, @@ -1894,7 +1784,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -1951,7 +1841,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2024-12-07T15:34:16+00:00" }, { "name": "league/config", @@ -2037,54 +1927,55 @@ }, { "name": "league/flysystem", - "version": "1.1.10", + "version": "3.29.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, "conflict": { - "league/flysystem-sftp": "<1.0.6" + "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", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "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": "*", + "ext-mongodb": "^1.3", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2094,53 +1985,90 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "files", "filesystem", "filesystems", "ftp", - "rackspace", - "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" }, - "funding": [ + "time": "2024-10-08T08:58:34+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "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": [ { - "url": "https://offset.earth/frankdejonge", - "type": "other" + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } ], - "time": "2022-10-04T09:16:37+00:00" + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + }, + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/mime-type-detection", - "version": "1.14.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { @@ -2171,7 +2099,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.14.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -2183,32 +2111,33 @@ "type": "tidelift" } ], - "time": "2023-10-17T14:13:20+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "maatwebsite/excel", - "version": "3.1.51", + "version": "3.1.60", "source": { "type": "git", "url": "https://github.com/SpartnerNL/Laravel-Excel.git", - "reference": "6d3c78ce6645abada32e03b40dc7f3c561878bc3" + "reference": "4906dc57fbe6a41c405a77e1f7cac9078982c9c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/6d3c78ce6645abada32e03b40dc7f3c561878bc3", - "reference": "6d3c78ce6645abada32e03b40dc7f3c561878bc3", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/4906dc57fbe6a41c405a77e1f7cac9078982c9c7", + "reference": "4906dc57fbe6a41c405a77e1f7cac9078982c9c7", "shasum": "" }, "require": { "composer/semver": "^3.3", "ext-json": "*", - "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0", + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0", "php": "^7.0||^8.0", - "phpoffice/phpspreadsheet": "^1.18", + "phpoffice/phpspreadsheet": "^1.29.4", "psr/simple-cache": "^1.0||^2.0||^3.0" }, "require-dev": { - "orchestra/testbench": "^6.0||^7.0||^8.0", + "laravel/scout": "^7.0||^8.0||^9.0||^10.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0", "predis/predis": "^1.1" }, "type": "library", @@ -2251,7 +2180,7 @@ ], "support": { "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", - "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.51" + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.60" }, "funding": [ { @@ -2263,36 +2192,39 @@ "type": "github" } ], - "time": "2023-12-08T12:44:49+00:00" + "time": "2024-11-11T12:27:45+00:00" }, { "name": "maennchen/zipstream-php", - "version": "2.2.6", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f" + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f", - "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", "shasum": "" }, "require": { - "myclabs/php-enum": "^1.5", - "php": "^7.4 || ^8.0", - "psr/http-message": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.1" }, "require-dev": { "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.9", - "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4", - "phpunit/phpunit": "^8.5.8 || ^9.4.2", - "vimeo/psalm": "^4.1" + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10.0", + "vimeo/psalm": "^5.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" }, "type": "library", "autoload": { @@ -2329,19 +2261,15 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.2.6" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" }, "funding": [ { "url": "https://github.com/maennchen", "type": "github" - }, - { - "url": "https://opencollective.com/zipstream", - "type": "open_collective" } ], - "time": "2022-11-25T18:57:19+00:00" + "time": "2024-10-10T12:33:01+00:00" }, { "name": "markbaker/complex", @@ -2450,127 +2378,45 @@ }, "time": "2022-12-02T22:17:43+00:00" }, - { - "name": "mockery/mockery", - "version": "1.6.7", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "symplify/easy-coding-standard": "^12.0.8" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2023-12-10T02:24:34+00:00" - }, { "name": "monolog/monolog", - "version": "2.9.2", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", - "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", + "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2593,7 +2439,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2621,7 +2467,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.2" + "source": "https://github.com/Seldaek/monolog/tree/3.8.0" }, "funding": [ { @@ -2633,20 +2479,20 @@ "type": "tidelift" } ], - "time": "2023-10-27T15:25:26+00:00" + "time": "2024-11-12T13:57:08+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -2654,11 +2500,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -2684,7 +2531,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -2692,118 +2539,54 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { - "name": "myclabs/php-enum", - "version": "1.8.4", + "name": "nesbot/carbon", + "version": "3.8.2", "source": { "type": "git", - "url": "https://github.com/myclabs/php-enum.git", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", - "php": "^7.3 || ^8.0" + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.6.2" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "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.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" }, + "bin": [ + "bin/carbon" + ], "type": "library", - "autoload": { - "psr-4": { - "MyCLabs\\Enum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP Enum contributors", - "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" - } - ], - "description": "PHP Enum implementation", - "homepage": "http://github.com/myclabs/php-enum", - "keywords": [ - "enum" - ], - "support": { - "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.4" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", - "type": "tidelift" - } - ], - "time": "2022-08-04T09:53:51+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.72.1", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78", - "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "*", - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "psr/clock": "^1.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", - "doctrine/orm": "^2.7 || ^3.0", - "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" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -2862,35 +2645,35 @@ "type": "tidelift" } ], - "time": "2023-12-08T23:47:49+00:00" + "time": "2024-11-07T17:46:48+00:00" }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "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.4" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.5.2", "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": { @@ -2922,35 +2705,36 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.2" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2024-10-06T23:10:23+00:00" }, { "name": "nette/utils", - "version": "v3.2.10", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", - "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "shasum": "" }, "require": { - "php": ">=7.2 <8.4" + "php": "8.0 - 8.4" }, "conflict": { - "nette/di": "<3.0.6" + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "~2.0", + "nette/tester": "^2.5", "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.3" + "tracy/tracy": "^2.9" }, "suggest": { "ext-gd": "to use Image", @@ -2958,13 +2742,12 @@ "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": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -3008,188 +2791,114 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.10" + "source": "https://github.com/nette/utils/tree/v4.0.5" }, - "time": "2023-07-30T15:38:18+00:00" + "time": "2024-08-07T15:39:19+00:00" }, { - "name": "opis/closure", - "version": "3.6.3", + "name": "nikic/php-parser", + "version": "v5.3.1", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0" + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6.x-dev" + "dev-master": "5.0-dev" } }, "autoload": { - "files": [ - "functions.php" - ], "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.3" - }, - "time": "2022-01-27T09:35:39+00:00" - }, - { - "name": "orchestra/testbench", - "version": "v6.41.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "cca72a23ac93bfab1c88be3ad7590ef8a8c4766a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/cca72a23ac93bfab1c88be3ad7590ef8a8c4766a", - "reference": "cca72a23ac93bfab1c88be3ad7590ef8a8c4766a", - "shasum": "" - }, - "require": { - "laravel/framework": "^8.83.27", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.45", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^8.5.21 || ^9.5.10", - "spatie/laravel-ray": "^1.29.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "Nikita Popov" } ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", + "description": "A PHP parser written in PHP", "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" + "parser", + "php" ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v6.41.0" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" }, - "time": "2023-12-19T00:51:23+00:00" + "time": "2024-10-08T18:51:32+00:00" }, { - "name": "orchestra/testbench-core", - "version": "v6.45.0", + "name": "nunomaduro/termwind", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "b409d050a2366ea2131f919f37c6c0619ccf6395" + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b409d050a2366ea2131f919f37c6c0619ccf6395", - "reference": "b409d050a2366ea2131f919f37c6c0619ccf6395", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", + "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", "shasum": "" }, "require": { - "fakerphp/faker": "^1.9.1", - "php": "^7.3 || ^8.0", - "symfony/yaml": "^5.0", - "vlucas/phpdotenv": "^5.1" - }, - "conflict": { - "brianium/paratest": "<6.4.0 || >=7.0.0", - "laravel/framework": "<8.83.27 || >=9.0.0", - "nunomaduro/collision": "<5.0.0 || >=6.0.0", - "phpunit/phpunit": "<8.5.21 || >=9.0.0 <9.5.10 || >=10.0.0" + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.1.5" }, "require-dev": { - "laravel/framework": "^8.83.27", - "mockery/mockery": "^1.4.4", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^8.5.21 || ^9.5.10", - "spatie/laravel-ray": "^1.7.1", - "symfony/process": "^5.0" - }, - "suggest": { - "brianium/paratest": "Allow using parallel testing (^6.4).", - "laravel/framework": "Required for testing (^8.83.27).", - "mockery/mockery": "Allow using Mockery for testing (^1.4.4).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^5.0).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^6.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^6.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^8.5.21|^9.5.10|^10.0)." + "illuminate/console": "^11.28.0", + "laravel/pint": "^1.18.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", + "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^7.1.5", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, - "bin": [ - "testbench" - ], "type": "library", "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, "branch-alias": { - "dev-master": "6.0-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "files": [ - "src/helpers.php" + "src/Functions.php" ], "psr-4": { - "Orchestra\\Testbench\\": "src/" + "Termwind\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3198,43 +2907,56 @@ ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", + "description": "Its like Tailwind CSS, but for the console.", "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" + "cli", + "console", + "css", + "package", + "php", + "style" ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" }, - "time": "2023-12-19T00:23:23+00:00" + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-10-15T16:15:16+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", @@ -3275,9 +2997,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", @@ -3331,122 +3059,329 @@ "time": "2022-02-21T01:04:05+00:00" }, { - "name": "phpoffice/phpspreadsheet", - "version": "1.29.0", + "name": "php-mock/php-mock", + "version": "2.5.0", "source": { "type": "git", - "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0" + "url": "https://github.com/php-mock/php-mock.git", + "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/fde2ccf55eaef7e86021ff1acce26479160a0fa0", - "reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0", + "url": "https://api.github.com/repos/php-mock/php-mock/zipball/fff1a621ebe54100fa3bd852e7be57773a0c0127", + "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-gd": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "ext-xmlreader": "*", - "ext-xmlwriter": "*", - "ext-zip": "*", - "ext-zlib": "*", - "ezyang/htmlpurifier": "^4.15", - "maennchen/zipstream-php": "^2.1 || ^3.0", - "markbaker/complex": "^3.0", - "markbaker/matrix": "^3.0", - "php": "^7.4 || ^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + "php": "^5.6 || ^7.0 || ^8.0", + "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4" + }, + "replace": { + "malkusch/php-mock": "*" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-main", - "dompdf/dompdf": "^1.0 || ^2.0", - "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.3", - "mpdf/mpdf": "^8.1.1", - "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5 || ^9.0 || ^10.0", - "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "^6.5" + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0 || ^9.0 || ^10.0 || ^11.0", + "squizlabs/php_codesniffer": "^3.8" }, "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer", - "ext-intl": "PHP Internationalization Functions", - "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", - "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + "php-mock/php-mock-phpunit": "Allows integration into PHPUnit testcase with the trait PHPMock." }, "type": "library", "autoload": { + "files": [ + "autoload.php" + ], "psr-4": { - "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + "phpmock\\": [ + "classes/", + "tests/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "WTFPL" ], "authors": [ { - "name": "Maarten Balliauw", - "homepage": "https://blog.maartenballiauw.be" - }, - { - "name": "Mark Baker", - "homepage": "https://markbakeruk.net" - }, - { - "name": "Franck Lefevre", - "homepage": "https://rootslabs.net" - }, - { - "name": "Erik Tilt" - }, - { - "name": "Adrien Crivelli" + "name": "Markus Malkusch", + "email": "markus@malkusch.de", + "homepage": "http://markus.malkusch.de", + "role": "Developer" } ], - "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", - "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "description": "PHP-Mock can mock built-in PHP functions (e.g. time()). PHP-Mock relies on PHP's namespace fallback policy. No further extension is needed.", + "homepage": "https://github.com/php-mock/php-mock", "keywords": [ - "OpenXML", - "excel", - "gnumeric", - "ods", - "php", - "spreadsheet", - "xls", - "xlsx" + "BDD", + "TDD", + "function", + "mock", + "stub", + "test", + "test double", + "testing" ], "support": { - "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.0" + "issues": "https://github.com/php-mock/php-mock/issues", + "source": "https://github.com/php-mock/php-mock/tree/2.5.0" }, - "time": "2023-06-14T22:48:31+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.2", + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2024-02-10T21:07:01+00:00" + }, + { + "name": "php-mock/php-mock-integration", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-mock/php-mock-integration.git", + "reference": "ec6a00a8129d50ed0f07907c91e3274ca4ade877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-mock/php-mock-integration/zipball/ec6a00a8129d50ed0f07907c91e3274ca4ade877", + "reference": "ec6a00a8129d50ed0f07907c91e3274ca4ade877", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "php-mock/php-mock": "^2.5", + "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpmock\\integration\\": "classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "WTFPL" + ], + "authors": [ + { + "name": "Markus Malkusch", + "email": "markus@malkusch.de", + "homepage": "http://markus.malkusch.de", + "role": "Developer" + } + ], + "description": "Integration package for PHP-Mock", + "homepage": "https://github.com/php-mock/php-mock-integration", + "keywords": [ + "BDD", + "TDD", + "function", + "mock", + "stub", + "test", + "test double" + ], + "support": { + "issues": "https://github.com/php-mock/php-mock-integration/issues", + "source": "https://github.com/php-mock/php-mock-integration/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2024-02-10T21:37:25+00:00" + }, + { + "name": "php-mock/php-mock-phpunit", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/php-mock/php-mock-phpunit.git", + "reference": "e1f7e795990b00937376e345883ea68ca3bda7e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/e1f7e795990b00937376e345883ea68ca3bda7e0", + "reference": "e1f7e795990b00937376e345883ea68ca3bda7e0", + "shasum": "" + }, + "require": { + "php": ">=7", + "php-mock/php-mock-integration": "^2.3", + "phpunit/phpunit": "^6 || ^7 || ^8 || ^9 || ^10.0.17 || ^11" + }, + "require-dev": { + "mockery/mockery": "^1.3.6" + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ], + "psr-4": { + "phpmock\\phpunit\\": "classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "WTFPL" + ], + "authors": [ + { + "name": "Markus Malkusch", + "email": "markus@malkusch.de", + "homepage": "http://markus.malkusch.de", + "role": "Developer" + } + ], + "description": "Mock built-in PHP functions (e.g. time()) with PHPUnit. This package relies on PHP's namespace fallback policy. No further extension is needed.", + "homepage": "https://github.com/php-mock/php-mock-phpunit", + "keywords": [ + "BDD", + "TDD", + "function", + "mock", + "phpunit", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/php-mock/php-mock-phpunit/issues", + "source": "https://github.com/php-mock/php-mock-phpunit/tree/2.10.0" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2024-02-11T07:24:16+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.29.4", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "7ca7e325dca3adb6a598385aab81f527b8d6c75d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/7ca7e325dca3adb6a598385aab81f527b8d6c75d", + "reference": "7ca7e325dca3adb6a598385aab81f527b8d6c75d", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.4" + }, + "time": "2024-11-10T16:26:22+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -3454,13 +3389,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -3496,7 +3431,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -3508,44 +3443,48 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "7.0.15", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "819f92bba8b001d4363065928088de22f25a3a48" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", - "reference": "819f92bba8b001d4363065928088de22f25a3a48", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.3 || ^4.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -3573,7 +3512,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -3581,32 +3521,32 @@ "type": "github" } ], - "time": "2021-07-26T12:20:09+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.5", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", - "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3633,7 +3573,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -3641,26 +3582,38 @@ "type": "github" } ], - "time": "2021-12-02T12:42:26+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -3677,41 +3630,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.3", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3730,14 +3689,15 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -3745,33 +3705,32 @@ "type": "github" } ], - "time": "2020-11-30T08:20:02+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "4.0.4", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", - "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.3 || ^8.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3786,17 +3745,18 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -3804,53 +3764,52 @@ "type": "github" } ], - "abandoned": true, - "time": "2020-08-04T08:28:15+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.36", + "version": "10.5.38", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9652df58e06a681429d8cfdaec3c43d6de581d5a" + "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9652df58e06a681429d8cfdaec3c43d6de581d5a", - "reference": "9652df58e06a681429d8cfdaec3c43d6de581d5a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a86773b9e887a67bc53efa9da9ad6e3f2498c132", + "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.2", - "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.4", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.5", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.5", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.3", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage", - "phpunit/php-invoker": "To allow enforcing time limits" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -3858,10 +3817,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-main": "10.5-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -3887,7 +3849,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.36" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.38" }, "funding": [ { @@ -3903,77 +3865,24 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:52:15+00:00" - }, - { - "name": "pimple/pimple", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" - }, - "time": "2021-10-28T11:13:42+00:00" + "time": "2024-10-28T13:06:21+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -3993,7 +3902,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -4003,9 +3912,9 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/clock", @@ -4057,22 +3966,27 @@ }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -4099,9 +4013,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -4207,20 +4121,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -4244,7 +4158,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -4256,22 +4170,22 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -4280,7 +4194,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4295,7 +4209,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -4309,36 +4223,36 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4359,31 +4273,31 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -4398,7 +4312,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -4410,9 +4324,9 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -4460,21 +4374,20 @@ }, { "name": "ramsey/collection", - "version": "1.3.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { "captainhook/plugin-composer": "^5.3", @@ -4534,7 +4447,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.3.0" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -4546,29 +4459,27 @@ "type": "tidelift" } ], - "time": "2022-12-27T19:12:24+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -4580,24 +4491,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -4605,9 +4515,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } @@ -4632,7 +4539,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -4644,38 +4551,40 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "ronasit/laravel-helpers", - "version": "2.5", + "version": "3.0.1-beta", "source": { "type": "git", "url": "https://github.com/RonasIT/laravel-helpers.git", - "reference": "259760ffae2282ff3a683eb9bf33f836c92bc94a" + "reference": "5bf2992029c1f71269d0fddd036a102822399925" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/RonasIT/laravel-helpers/zipball/259760ffae2282ff3a683eb9bf33f836c92bc94a", - "reference": "259760ffae2282ff3a683eb9bf33f836c92bc94a", + "url": "https://api.github.com/repos/RonasIT/laravel-helpers/zipball/5bf2992029c1f71269d0fddd036a102822399925", + "reference": "5bf2992029c1f71269d0fddd036a102822399925", "shasum": "" }, "require": { - "doctrine/dbal": "^3.6", - "guzzlehttp/guzzle": ">=6.0", - "laravel/framework": ">=5.5.0", - "maatwebsite/excel": "3.*", - "php": ">=7.4", - "tecnickcom/tcpdf": "~6.2.22" + "ext-json": "*", + "guzzlehttp/guzzle": "^7.9.2", + "laravel/framework": "^11.20", + "maatwebsite/excel": "^3.1.55", + "php": ">=8.3", + "php-mock/php-mock-phpunit": "^2.10", + "tecnickcom/tcpdf": "^6.7.5" }, "require-dev": { - "ext-json": "*", - "fzaninotto/faker": "~1.4", - "mockery/mockery": "1.*", - "mpyw/laravel-database-mock": "0.0.1-alpha4", - "orchestra/testbench": "^6.25", - "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "9.*" + "brainmaestro/composer-git-hooks": "^3.0", + "fakerphp/faker": "^1.23.1", + "friendsofphp/php-cs-fixer": "^3.62", + "mockery/mockery": "^1.6.12", + "mpyw/laravel-database-mock": "^0.0.1-alpha5", + "orchestra/testbench": "^9.3", + "php-coveralls/php-coveralls": "^2.7", + "phpunit/phpunit": "^10.5.30" }, "type": "library", "extra": { @@ -4683,6 +4592,16 @@ "providers": [ "RonasIT\\Support\\HelpersServiceProvider" ] + }, + "hooks": { + "config": { + "stop-on-failure": [ + "pre-commit" + ] + }, + "pre-commit": [ + "docker-compose up -d php && docker-compose exec -T php vendor/bin/php-cs-fixer fix && docker-compose exec -T php vendor/bin/tlint" + ] } }, "autoload": { @@ -4712,34 +4631,147 @@ ], "support": { "issues": "https://github.com/RonasIT/laravel-helpers/issues", - "source": "https://github.com/RonasIT/laravel-helpers/tree/2.5" + "source": "https://github.com/RonasIT/laravel-helpers/tree/3.0.1-beta" + }, + "time": "2024-11-04T10:52:30+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, - "time": "2023-12-19T07:25:09+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4761,7 +4793,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -4769,34 +4801,36 @@ "type": "github" } ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.5", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770" + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770", - "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4835,7 +4869,66 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-18T14:56:07+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -4843,33 +4936,33 @@ "type": "github" } ], - "time": "2022-09-14T12:31:48+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "3.0.4", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae", - "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4901,7 +4994,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -4909,27 +5003,27 @@ "type": "github" } ], - "time": "2023-05-07T05:30:20+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "4.2.4", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -4937,7 +5031,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -4956,7 +5050,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4964,7 +5058,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -4972,34 +5067,34 @@ "type": "github" } ], - "time": "2020-11-30T07:53:42+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.5", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -5034,14 +5129,15 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -5049,38 +5145,35 @@ "type": "github" } ], - "time": "2022-09-14T06:00:17+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.3", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "66783ce213de415b451b904bfef9dda0cf9aeae0" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/66783ce213de415b451b904bfef9dda0cf9aeae0", - "reference": "66783ce213de415b451b904bfef9dda0cf9aeae0", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -5099,13 +5192,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/3.0.3" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -5113,34 +5207,33 @@ "type": "github" } ], - "time": "2023-08-02T09:23:32+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.4", + "name": "sebastian/lines-of-code", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -5155,14 +5248,16 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -5170,32 +5265,34 @@ "type": "github" } ], - "time": "2020-11-30T07:40:27+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { - "name": "sebastian/object-reflector", - "version": "1.1.2", + "name": "sebastian/object-enumerator", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5213,11 +5310,11 @@ "email": "sebastian@phpunit.de" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -5225,32 +5322,32 @@ "type": "github" } ], - "time": "2020-11-30T07:37:18+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { - "name": "sebastian/recursion-context", - "version": "3.0.1", + "name": "sebastian/object-reflector", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -5266,21 +5363,13 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -5288,29 +5377,32 @@ "type": "github" } ], - "time": "2020-11-30T07:34:24+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { - "name": "sebastian/resource-operations", - "version": "2.0.2", + "name": "sebastian/recursion-context", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5326,13 +5418,21 @@ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -5340,32 +5440,32 @@ "type": "github" } ], - "time": "2020-11-30T07:30:19+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "1.1.4", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5388,7 +5488,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -5396,29 +5496,29 @@ "type": "github" } ], - "time": "2020-11-30T07:25:11+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5441,38 +5541,49 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "spatie/backtrace", - "version": "1.5.3", + "name": "symfony/clock", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab" + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab", - "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, - "require-dev": { - "ext-json": "*", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" + "provide": { + "psr/clock-implementation": "1.0" }, "type": "library", "autoload": { + "files": [ + "Resources/now.php" + ], "psr-4": { - "Spatie\\Backtrace\\": "src" - } + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5480,83 +5591,91 @@ ], "authors": [ { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", "keywords": [ - "Backtrace", - "spatie" + "clock", + "psr20", + "time" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.5.3" + "source": "https://github.com/symfony/clock/tree/v7.2.0-RC1" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-06-28T12:59:17+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "spatie/laravel-ray", - "version": "1.33.0", + "name": "symfony/console", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-ray.git", - "reference": "5028ae44a09451b26eb44490e3471998650788e3" + "url": "https://github.com/symfony/console.git", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/5028ae44a09451b26eb44490e3471998650788e3", - "reference": "5028ae44a09451b26eb44490e3471998650788e3", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", "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", - "php": "^7.4|^8.0", - "spatie/backtrace": "^1.0", - "spatie/ray": "^1.37", - "symfony/stopwatch": "4.2|^5.1|^6.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "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": { - "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" + "psr/log": "^1|^2|^3", + "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", - "extra": { - "branch-alias": { - "dev-main": "1.29.x-dev" - }, - "laravel": { - "providers": [ - "Spatie\\LaravelRay\\RayServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "Spatie\\LaravelRay\\": "src" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5564,59 +5683,66 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Easily debug Laravel apps", - "homepage": "https://github.com/spatie/laravel-ray", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "laravel-ray", - "spatie" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.33.0" + "source": "https://github.com/symfony/console/tree/v7.2.0-RC1" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-09-04T10:16:53+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { - "name": "spatie/macroable", - "version": "1.0.1", + "name": "symfony/css-selector", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/spatie/macroable.git", - "reference": "7a99549fc001c925714b329220dea680c04bfa48" + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/7a99549fc001c925714b329220dea680c04bfa48", - "reference": "7a99549fc001c925714b329220dea680c04bfa48", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { - "php": "^7.2|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.3" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { - "Spatie\\Macroable\\": "src" - } + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5624,65 +5750,70 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A trait to dynamically add methods to a class", - "homepage": "https://github.com/spatie/macroable", - "keywords": [ - "macroable", - "spatie" - ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/1.0.1" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0-RC1" }, - "time": "2020-11-03T10:15:05+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "spatie/ray", - "version": "1.40.1", + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", "source": { "type": "git", - "url": "https://github.com/spatie/ray.git", - "reference": "8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f", - "reference": "8e6547ff47aae2e4f615a5dcea1e5e4911b1dc9f", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "php": "^7.3|^8.0", - "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" - }, - "require-dev": { - "illuminate/support": "6.x|^8.18|^9.0", - "nesbot/carbon": "^2.63", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5", - "spatie/phpunit-snapshot-assertions": "^4.2", - "spatie/test-time": "^1.2" + "php": ">=8.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, "autoload": { "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\Ray\\": "src" - } + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5690,71 +5821,73 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Debug with Ray to fix problems faster", - "homepage": "https://github.com/spatie/ray", - "keywords": [ - "ray", - "spatie" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.40.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { - "url": "https://github.com/sponsors/spatie", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://spatie.be/open-source/support-us", - "type": "other" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-11-20T08:20:15+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", + "name": "symfony/error-handler", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + "url": "https://github.com/symfony/error-handler.git", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", "shasum": "" }, "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" + "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" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, "autoload": { - "files": [ - "lib/swift_required.php" + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5762,91 +5895,76 @@ "MIT" ], "authors": [ - { - "name": "Chris Corbyn" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + "source": "https://github.com/symfony/error-handler/tree/v7.2.0-RC1" }, "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, { "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2024-11-05T15:35:02+00:00" }, { - "name": "symfony/console", - "version": "v5.4.32", + "name": "symfony/event-dispatcher", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c70df1ffaf23a8d340bded3cfab1b86752ad6ed7", - "reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "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": { "psr-4": { - "Symfony\\Component\\Console\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5866,16 +5984,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.32" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0-RC1" }, "funding": [ { @@ -5891,34 +6003,40 @@ "type": "tidelift" } ], - "time": "2023-11-18T18:23:04+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "symfony/css-selector", - "version": "v5.4.26", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", - "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "psr/event-dispatcher": "^1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5926,22 +6044,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Converts CSS selectors to XPath expressions", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.26" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -5957,38 +6079,35 @@ "type": "tidelift" } ], - "time": "2023-07-07T06:10:25+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "name": "symfony/finder", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "url": "https://github.com/symfony/finder.git", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" }, + "type": "library", "autoload": { - "files": [ - "function.php" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5997,18 +6116,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A generic function and convention to trigger deprecation notices", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/finder/tree/v7.2.0-RC1" }, "funding": [ { @@ -6024,39 +6143,46 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { - "name": "symfony/error-handler", - "version": "v5.4.29", + "name": "symfony/http-foundation", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "b77b5a8295ea945ae6f4f91adc5204a2405cc579" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/328c6fcfd2f90b64c16efaf0ea67a311d672f078", - "reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b77b5a8295ea945ae6f4f91adc5204a2405cc579", + "reference": "b77b5a8295ea945ae6f4f91adc5204a2405cc579", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "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" }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" + "Symfony\\Component\\HttpFoundation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6076,10 +6202,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools to manage errors and ease debugging PHP code", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.29" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0-RC1" }, "funding": [ { @@ -6095,53 +6221,82 @@ "type": "tidelift" } ], - "time": "2023-09-06T21:54:06+00:00" + "time": "2024-11-09T09:29:03+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v5.4.26", + "name": "symfony/http-kernel", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "ad175ab2d5a75702194b5336556a348717a39f0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad175ab2d5a75702194b5336556a348717a39f0f", + "reference": "ad175ab2d5a75702194b5336556a348717a39f0f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "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/dependency-injection": "<4.4" + "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.12" }, "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "psr/cache": "^1.0|^2.0|^3.0", + "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": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "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-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\HttpKernel\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6161,10 +6316,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.0-RC1" }, "funding": [ { @@ -6180,43 +6335,52 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:34:20+00:00" + "time": "2024-11-13T14:53:30+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "name": "symfony/mailer", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "url": "https://github.com/symfony/mailer.git", + "reference": "abbcc8b84a81d08ee1a0e6ca60a90d0aaf24e79b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/mailer/zipball/abbcc8b84a81d08ee1a0e6ca60a90d0aaf24e79b", + "reference": "abbcc8b84a81d08ee1a0e6ca60a90d0aaf24e79b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "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": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6224,26 +6388,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Helps sending emails", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/mailer/tree/v7.2.0-RC1" }, "funding": [ { @@ -6259,31 +6415,48 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-11-09T06:58:08+00:00" }, { - "name": "symfony/finder", - "version": "v5.4.27", + "name": "symfony/mime", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" + "url": "https://github.com/symfony/mime.git", + "reference": "f31946de86ef8fcf48ae76652542f29df2ef4428" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "url": "https://api.github.com/repos/symfony/mime/zipball/f31946de86ef8fcf48ae76652542f29df2ef4428", + "reference": "f31946de86ef8fcf48ae76652542f29df2ef4428", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "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": "^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.3|^7.0.3" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" + "Symfony\\Component\\Mime\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6303,10 +6476,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Finds files and directories via an intuitive fluent interface", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.27" + "source": "https://github.com/symfony/mime/tree/v7.2.0-RC1" }, "funding": [ { @@ -6322,48 +6499,45 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:02:31+00:00" + "time": "2024-11-10T09:50:45+00:00" }, { - "name": "symfony/http-foundation", - "version": "v5.4.32", + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cbcd80a4c36f59772d62860fdb0cb6a38da63fd2", - "reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.2" }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "provide": { + "ext-ctype": "*" }, "suggest": { - "symfony/mime": "To use the file extension guesser" + "ext-ctype": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6371,18 +6545,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Defines an object-oriented layer for the HTTP specification", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.32" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -6398,164 +6578,42 @@ "type": "tidelift" } ], - "time": "2023-11-20T15:40:25+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/http-kernel", - "version": "v5.4.33", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "892636f9279f953dc266dc088f900b03eecb4ffa" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/892636f9279f953dc266dc088f900b03eecb4ffa", - "reference": "892636f9279f953dc266dc088f900b03eecb4ffa", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.4.21|^6.2.7", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.2" }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "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/v5.4.33" - }, - "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" + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } - ], - "time": "2023-12-01T16:51:11+00:00" - }, - { - "name": "symfony/mime", - "version": "v5.4.26", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2ea06dfeee20000a319d8407cea1d47533d5a9d2", - "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4", - "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2" - }, - "type": "library", "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6563,22 +6621,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Allows manipulating MIME messages", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ - "mime", - "mime-type" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.26" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -6594,36 +6656,31 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:29:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "name": "symfony/polyfill-intl-idn", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { - "ext-ctype": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6634,7 +6691,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -6643,24 +6700,30 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "ctype", + "idn", + "intl", "polyfill", - "portable" + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -6676,36 +6739,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.28.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" + "php": ">=7.2" }, "suggest": { - "ext-iconv": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6716,8 +6773,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6733,17 +6793,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Iconv extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "iconv", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -6759,33 +6820,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { - "ext-intl": "For best performance" + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6796,7 +6857,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -6813,18 +6874,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "grapheme", - "intl", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -6840,38 +6900,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "name": "symfony/polyfill-php80", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6879,8 +6931,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6888,30 +6943,28 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" }, { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "idn", - "intl", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -6927,33 +6980,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "name": "symfony/polyfill-php83", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6964,7 +7011,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -6984,18 +7031,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "intl", - "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -7011,36 +7056,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "name": "symfony/polyfill-uuid", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { - "ext-mbstring": "*" + "ext-uuid": "*" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-uuid": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7051,7 +7093,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Uuid\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7060,25 +7102,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", "polyfill", "portable", - "shim" + "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -7094,42 +7135,33 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "name": "symfony/process", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "url": "https://github.com/symfony/process.git", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7137,24 +7169,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/process/tree/v7.2.0-RC1" }, "funding": [ { @@ -7170,44 +7196,46 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.28.0", + "name": "symfony/routing", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" + "url": "https://github.com/symfony/routing.git", + "reference": "0782e32f411cf1c4a1ab3f5c074a9b61f3df8e5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "url": "https://api.github.com/repos/symfony/routing/zipball/0782e32f411cf1c4a1ab3f5c074a9b61f3df8e5a", + "reference": "0782e32f411cf1c4a1ab3f5c074a9b61f3df8e5a", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "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": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Component\\Routing\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7216,24 +7244,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "router", + "routing", + "uri", + "url" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" + "source": "https://github.com/symfony/routing/tree/v7.2.0-RC1" }, "funding": [ { @@ -7249,44 +7277,46 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-11-06T08:41:34+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "name": "symfony/service-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "3.5-dev" }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Contracts\\Service\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7294,10 +7324,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -7307,16 +7333,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -7332,44 +7360,50 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", + "name": "symfony/string", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + "url": "https://github.com/symfony/string.git", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=7.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" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" }, + "type": "library", "autoload": { "files": [ - "bootstrap.php" + "Resources/functions.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Component\\String\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7386,78 +7420,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.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": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", - "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.28" + "source": "https://github.com/symfony/string/tree/v7.2.0-RC1" }, "funding": [ { @@ -7473,52 +7447,63 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:36:04+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { - "name": "symfony/routing", - "version": "v5.4.33", + "name": "symfony/translation", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "5b5b86670f947db92ab54cdcff585e76064d0b04" + "url": "https://github.com/symfony/translation.git", + "reference": "f1faf9a381d39d0bf8ca1c10cab7dcf41fba50dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5b5b86670f947db92ab54cdcff585e76064d0b04", - "reference": "5b5b86670f947db92ab54cdcff585e76064d0b04", + "url": "https://api.github.com/repos/symfony/translation/zipball/f1faf9a381d39d0bf8ca1c10cab7dcf41fba50dc", + "reference": "f1faf9a381d39d0bf8ca1c10cab7dcf41fba50dc", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.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": { - "doctrine/annotations": "^1.12|^2", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^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/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": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\Routing\\": "" + "Symfony\\Component\\Translation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7538,16 +7523,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Maps an HTTP request to a set of configuration variables", + "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.33" + "source": "https://github.com/symfony/translation/tree/v7.2.0-RC1" }, "funding": [ { @@ -7563,37 +7542,29 @@ "type": "tidelift" } ], - "time": "2023-12-01T09:28:00+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.5.2", + "name": "symfony/translation-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7602,8 +7573,11 @@ }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7619,7 +7593,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Generic abstractions related to translation", "homepage": "https://symfony.com", "keywords": [ "abstractions", @@ -7630,7 +7604,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -7646,30 +7620,33 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/stopwatch", - "version": "v5.4.21", + "name": "symfony/uid", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee" + "url": "https://github.com/symfony/uid.git", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f83692cd869a6f2391691d40a01e8acb89e76fee", - "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "Symfony\\Component\\Uid\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7681,18 +7658,27 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a way to profile code", + "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.21" + "source": "https://github.com/symfony/uid/tree/v7.2.0-RC1" }, "funding": [ { @@ -7708,46 +7694,47 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:03:56+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "symfony/string", - "version": "v5.4.32", + "name": "symfony/var-dumper", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "91bf4453d65d8231688a04376c3a40efe0770f04" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/91bf4453d65d8231688a04376c3a40efe0770f04", - "reference": "91bf4453d65d8231688a04376c3a40efe0770f04", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "ext-iconv": "*", + "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.12" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "autoload": { "files": [ - "Resources/functions.php" + "Resources/functions/dump.php" ], "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\VarDumper\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7767,18 +7754,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "debug", + "dump" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.32" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0-RC1" }, "funding": [ { @@ -7794,311 +7777,1640 @@ "type": "tidelift" } ], - "time": "2023-11-26T13:43:46+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { - "name": "symfony/translation", - "version": "v5.4.31", + "name": "tecnickcom/tcpdf", + "version": "6.7.7", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f" + "url": "https://github.com/tecnickcom/TCPDF.git", + "reference": "cfbc0028cc23f057f2baf9e73bdc238153c22086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/ba72f72fceddf36f00bd495966b5873f2d17ad8f", - "reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/cfbc0028cc23f057f2baf9e73bdc238153c22086", + "reference": "cfbc0028cc23f057f2baf9e73bdc238153c22086", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "php": ">=5.5.0" }, - "provide": { - "symfony/translation-implementation": "2.3" + "type": "library", + "autoload": { + "classmap": [ + "config", + "include", + "tcpdf.php", + "tcpdf_parser.php", + "tcpdf_import.php", + "tcpdf_barcodes_1d.php", + "tcpdf_barcodes_2d.php", + "include/tcpdf_colors.php", + "include/tcpdf_filters.php", + "include/tcpdf_font_data.php", + "include/tcpdf_fonts.php", + "include/tcpdf_images.php", + "include/tcpdf_static.php", + "include/barcodes/datamatrix.php", + "include/barcodes/pdf417.php", + "include/barcodes/qrcode.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Nicola Asuni", + "email": "info@tecnick.com", + "role": "lead" + } + ], + "description": "TCPDF is a PHP class for generating PDF documents and barcodes.", + "homepage": "http://www.tcpdf.org/", + "keywords": [ + "PDFD32000-2008", + "TCPDF", + "barcodes", + "datamatrix", + "pdf", + "pdf417", + "qrcode" + ], + "support": { + "issues": "https://github.com/tecnickcom/TCPDF/issues", + "source": "https://github.com/tecnickcom/TCPDF/tree/6.7.7" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tcpdf%20project", + "type": "custom" + } + ], + "time": "2024-10-26T12:15:02+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "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 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "a136842a532bac9ecd8a1c723852b09915d7db50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/a136842a532bac9ecd8a1c723852b09915d7db50", + "reference": "a136842a532bac9ecd8a1c723852b09915d7db50", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.0" + }, + "time": "2024-11-07T15:11:20+00:00" + }, + { + "name": "filp/whoops", + "version": "2.16.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.16.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2024-09-25T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "353ac12134b98e2e7c3333d916bd3e523931e583" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/353ac12134b98e2e7c3333d916bd3e523931e583", + "reference": "353ac12134b98e2e7c3333d916bd3e523931e583", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0", + "illuminate/contracts": "^10.24|^11.0", + "illuminate/log": "^10.24|^11.0", + "illuminate/process": "^10.24|^11.0", + "illuminate/support": "^10.24|^11.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.12|^9.0", + "pestphp/pest": "^2.20", + "pestphp/pest-plugin-type-coverage": "^2.3", + "phpstan/phpstan": "^1.10", + "symfony/var-dumper": "^6.3|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2024-10-23T12:56:23+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "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.10.0" + }, + "time": "2024-09-23T13:32:56+00:00" + }, + { + "name": "mikey179/vfsstream", + "version": "v1.6.12", + "source": { + "type": "git", + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.5||^8.5||^9.6", + "yoast/phpunit-polyfills": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } + ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "support": { + "issues": "https://github.com/bovigo/vfsStream/issues", + "source": "https://github.com/bovigo/vfsStream/tree/master", + "wiki": "https://github.com/bovigo/vfsStream/wiki" + }, + "time": "2024-08-29T18:43:31+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.5.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.16.0", + "nunomaduro/termwind": "^2.1.0", + "php": "^8.2.0", + "symfony/console": "^7.1.5" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.28.0", + "laravel/pint": "^1.18.1", + "laravel/sail": "^1.36.0", + "laravel/sanctum": "^4.0.3", + "laravel/tinker": "^2.10.0", + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-10-15T16:06:32+00:00" + }, + { + "name": "orchestra/canvas", + "version": "v9.1.3", + "source": { + "type": "git", + "url": "https://github.com/orchestral/canvas.git", + "reference": "dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d", + "reference": "dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "composer/semver": "^3.0", + "illuminate/console": "^11.26", + "illuminate/database": "^11.26", + "illuminate/filesystem": "^11.26", + "illuminate/support": "^11.26", + "orchestra/canvas-core": "^9.0", + "orchestra/testbench-core": "^9.2", + "php": "^8.2", + "symfony/polyfill-php83": "^1.28", + "symfony/yaml": "^7.0" + }, + "require-dev": { + "laravel/framework": "^11.26", + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.11", + "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.1.3" + }, + "time": "2024-10-02T01:00:54+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": "2024-03-06T10:00:21+00:00" + }, + { + "name": "orchestra/testbench", + "version": "v9.5.2", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench.git", + "reference": "bc404d840ffbb722bf0bbb042251ef83223482f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/bc404d840ffbb722bf0bbb042251ef83223482f9", + "reference": "bc404d840ffbb722bf0bbb042251ef83223482f9", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "mockery/mockery": "^1.6", + "orchestra/testbench-core": "^9.5.3", + "orchestra/workbench": "^9.6", + "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.5.2" + }, + "time": "2024-10-06T13:07:57+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v9.5.6", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "26860d007c9316a20b1e9986dadb38f3ffb35433" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/26860d007c9316a20b1e9986dadb38f3ffb35433", + "reference": "26860d007c9316a20b1e9986dadb38f3ffb35433", + "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.11.0 || >=12.0.0", + "laravel/serializable-closure": "<1.3.0 || >=2.0.0", + "nunomaduro/collision": "<8.0.0 || >=9.0.0", + "phpunit/phpunit": "<10.5.0 || 11.0.0 || >=11.5.0" + }, + "require-dev": { + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.11", + "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" + }, + "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.11).", + "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" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Testing Helper for Laravel 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-core" + }, + "time": "2024-10-30T23:18:34+00:00" + }, + { + "name": "orchestra/workbench", + "version": "v9.7.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/workbench.git", + "reference": "1744d07bfeee488270039b3b21605f528c3b696d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/1744d07bfeee488270039b3b21605f528c3b696d", + "reference": "1744d07bfeee488270039b3b21605f528c3b696d", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "laravel/pail": "^1.2", + "laravel/tinker": "^2.9", + "nunomaduro/collision": "^8.0", + "orchestra/canvas": "^9.1", + "orchestra/testbench-core": "^9.5.3", + "php": "^8.2", + "spatie/laravel-ray": "^1.35", + "symfony/polyfill-php83": "^1.31", + "symfony/polyfill-php84": "^1.31", + "symfony/yaml": "^7.0.3" + }, + "require-dev": { + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6.10", + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^10.5.35 || ^11.3.6", + "symfony/process": "^7.0.3" + }, + "suggest": { + "ext-pcntl": "Required to use all features of the console signal trapping." + }, + "type": "library", + "autoload": { + "psr-4": { + "Orchestra\\Workbench\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com" + } + ], + "description": "Workbench Companion for Laravel Packages Development", + "keywords": [ + "dev", + "laravel", + "laravel-packages", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/workbench/issues", + "source": "https://github.com/orchestral/workbench/tree/v9.7.0" + }, + "time": "2024-10-24T06:22:45+00:00" + }, + { + "name": "php-coveralls/php-coveralls", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "b36fa4394e519dafaddc04ae03976bc65a25ba15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/b36fa4394e519dafaddc04ae03976bc65a25ba15", + "reference": "b36fa4394e519dafaddc04ae03976bc65a25ba15", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "php": "^7.0 || ^8.0", + "psr/log": "^1.0 || ^2.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || >=8.0 <8.5.29 || >=9.0 <9.5.23", + "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/php-coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "support": { + "issues": "https://github.com/php-coveralls/php-coveralls/issues", + "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.7.0" }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "time": "2023-11-22T10:21:01+00:00" + }, + { + "name": "php-di/invoker", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86" }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/33234b32dafa8eb69202f950a1fc92055ed76a86", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Invoker\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.31" + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/mnapoli", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-11-03T16:16:43+00:00" + "time": "2023-09-08T09:24:21+00:00" }, { - "name": "symfony/translation-contracts", - "version": "v2.5.2", + "name": "php-di/php-di", + "version": "7.0.7", "source": { "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", "shasum": "" }, "require": { - "php": ">=7.2.5" + "laravel/serializable-closure": "^1.0", + "php": ">=8.0", + "php-di/invoker": "^2.0", + "psr/container": "^1.1 || ^2.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/proxy-manager-lts": "^1", + "mnapoli/phpunit-easymock": "^1.3", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.6" }, "suggest": { - "symfony/translation-implementation": "" + "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Symfony\\Contracts\\Translation\\": "" + "DI\\": "src/" } }, "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": "Generic abstractions related to translation", - "homepage": "https://symfony.com", + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.7" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/mnapoli", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2024-07-21T15:55:45+00:00" }, { - "name": "symfony/var-dumper", - "version": "v5.4.29", + "name": "phpstan/phpstan", + "version": "1.12.10", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "fc463b5d0fe906dcf19689be692c65c50406a071" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6172e4ae3534d25ee9e07eb487c20be7760fcc65", - "reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/fc463b5d0fe906dcf19689be692c65c50406a071", + "reference": "fc463b5d0fe906dcf19689be692c65c50406a071", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": "^7.2|^8.0" }, "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^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" + "phpstan/phpstan-shim": "*" }, "bin": [ - "Resources/bin/var-dump-server" + "phpstan", + "phpstan.phar" ], "type": "library", "autoload": { "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "debug", - "dump" + "dev", + "static analysis" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.29" + "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://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/ondrejmirtes", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://github.com/phpstan", + "type": "github" } ], - "time": "2023-09-12T10:09:58+00:00" + "time": "2024-11-11T15:37:09+00:00" }, { - "name": "symfony/yaml", - "version": "v5.4.31", + "name": "psy/psysh", + "version": "v0.12.4", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "f387675d7f5fc4231f7554baa70681f222f73563" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f387675d7f5fc4231f7554baa70681f222f73563", - "reference": "f387675d7f5fc4231f7554baa70681f222f73563", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "^1.8" + "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" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "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": [ - "Resources/bin/yaml-lint" + "bin/psysh" ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8106,314 +9418,333 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" } ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.31" + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" }, - "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": "2023-11-03T14:41:28+00:00" + "time": "2024-06-10T01:18:23+00:00" }, { - "name": "tecnickcom/tcpdf", - "version": "6.2.26", + "name": "rector/rector", + "version": "1.2.10", "source": { "type": "git", - "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "367241059ca166e3a76490f4448c284e0a161f15" + "url": "https://github.com/rectorphp/rector.git", + "reference": "40f9cf38c05296bd32f444121336a521a293fa61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/367241059ca166e3a76490f4448c284e0a161f15", - "reference": "367241059ca166e3a76490f4448c284e0a161f15", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/40f9cf38c05296bd32f444121336a521a293fa61", + "reference": "40f9cf38c05296bd32f444121336a521a293fa61", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.12.5" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" }, + "bin": [ + "bin/rector" + ], "type": "library", "autoload": { - "classmap": [ - "config", - "include", - "tcpdf.php", - "tcpdf_parser.php", - "tcpdf_import.php", - "tcpdf_barcodes_1d.php", - "tcpdf_barcodes_2d.php", - "include/tcpdf_colors.php", - "include/tcpdf_filters.php", - "include/tcpdf_font_data.php", - "include/tcpdf_fonts.php", - "include/tcpdf_images.php", - "include/tcpdf_static.php", - "include/barcodes/datamatrix.php", - "include/barcodes/pdf417.php", - "include/barcodes/qrcode.php" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Nicola Asuni", - "email": "info@tecnick.com", - "role": "lead" - } + "MIT" ], - "description": "TCPDF is a PHP class for generating PDF documents and barcodes.", - "homepage": "http://www.tcpdf.org/", + "description": "Instant Upgrade and Automated Refactoring of any PHP code", "keywords": [ - "PDFD32000-2008", - "TCPDF", - "barcodes", - "datamatrix", - "pdf", - "pdf417", - "qrcode" + "automation", + "dev", + "migration", + "refactoring" ], "support": { - "source": "https://github.com/tecnickcom/TCPDF/tree/master" + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/1.2.10" }, - "time": "2018-10-16T17:24:05+00:00" + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2024-11-08T13:59:10+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.2", + "name": "spatie/backtrace", + "version": "1.6.2", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "url": "https://github.com/spatie/backtrace.git", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Spatie\\Backtrace\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", "role": "Developer" } ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, "funding": [ { - "url": "https://github.com/theseer", + "url": "https://github.com/sponsors/spatie", "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-07-22T08:21:24+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "name": "spatie/laravel-ray", + "version": "1.37.1", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "url": "https://github.com/spatie/laravel-ray.git", + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", "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 || ^7.0" + "ext-json": "*", + "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.41.1", + "symfony/stopwatch": "4.2|^5.1|^6.0|^7.0", + "zbateson/mail-mime-parser": "^1.3.1|^2.0|^3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "guzzlehttp/guzzle": "^7.3", + "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-master": "2.2.x-dev" + "dev-main": "1.x-dev" + }, + "laravel": { + "providers": [ + "Spatie\\LaravelRay\\RayServiceProvider" + ] } }, "autoload": { "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" + "Spatie\\LaravelRay\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", "role": "Developer" } ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "description": "Easily debug Laravel apps", + "homepage": "https://github.com/spatie/laravel-ray", + "keywords": [ + "laravel-ray", + "spatie" + ], "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "issues": "https://github.com/spatie/laravel-ray/issues", + "source": "https://github.com/spatie/laravel-ray/tree/1.37.1" }, - "time": "2023-12-08T13:03:43+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2024-07-12T12:35:17+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "name": "spatie/macroable", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "url": "https://github.com/spatie/macroable.git", + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", "shasum": "" }, "require": { - "ext-pcre": "*", - "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" + "php": "^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-filter": "*", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." + "phpunit/phpunit": "^8.0|^9.3" }, "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "5.6-dev" - } - }, "autoload": { "psr-4": { - "Dotenv\\": "src/" + "Spatie\\Macroable\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "A trait to dynamically add methods to a class", + "homepage": "https://github.com/spatie/macroable", "keywords": [ - "dotenv", - "env", - "environment" + "macroable", + "spatie" ], "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "issues": "https://github.com/spatie/macroable/issues", + "source": "https://github.com/spatie/macroable/tree/2.0.0" }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2021-03-26T22:39:02+00:00" }, { - "name": "voku/portable-ascii", - "version": "1.6.1", + "name": "spatie/ray", + "version": "1.41.2", "source": { "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + "url": "https://github.com/spatie/ray.git", + "reference": "c44f8cfbf82c69909b505de61d8d3f2d324e93fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "url": "https://api.github.com/repos/spatie/ray/zipball/c44f8cfbf82c69909b505de61d8d3f2d324e93fc", + "reference": "c44f8cfbf82c69909b505de61d8d3f2d324e93fc", "shasum": "" }, "require": { - "php": ">=7.0.0" + "ext-curl": "*", + "ext-json": "*", + "php": "^7.3|^8.0", + "ramsey/uuid": "^3.0|^4.1", + "spatie/backtrace": "^1.1", + "spatie/macroable": "^1.0|^2.0", + "symfony/stopwatch": "^4.0|^5.1|^6.0|^7.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0|^7.0.3" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" + "illuminate/support": "6.x|^8.18|^9.0", + "nesbot/carbon": "^2.63", + "pestphp/pest": "^1.22", + "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", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { + "files": [ + "src/helpers.php" + ], "psr-4": { - "voku\\": "src/voku/" + "Spatie\\Ray\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -8422,80 +9753,73 @@ ], "authors": [ { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", + "description": "Debug with Ray to fix problems faster", + "homepage": "https://github.com/spatie/ray", "keywords": [ - "ascii", - "clean", - "php" + "ray", + "spatie" ], "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + "issues": "https://github.com/spatie/ray/issues", + "source": "https://github.com/spatie/ray/tree/1.41.2" }, "funding": [ { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", + "url": "https://github.com/sponsors/spatie", "type": "github" }, { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" + "url": "https://spatie.be/open-source/support-us", + "type": "other" } ], - "time": "2022-01-24T18:55:24+00:00" + "time": "2024-04-24T14:21:46+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "symfony/config", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/symfony/config.git", + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/symfony/config/zipball/bcd3c4adf0144dee5011bb35454728c38adec055", + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8503,322 +9827,355 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/symfony/config/tree/v7.2.0-RC1" }, - "time": "2022-06-03T18:03:27+00:00" + "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-11-04T11:36:24+00:00" }, { - "name": "zbateson/mail-mime-parser", - "version": "2.4.0", + "name": "symfony/filesystem", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a" + "url": "https://github.com/symfony/filesystem.git", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/20b3e48eb799537683780bc8782fbbe9bc25934a", - "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { - "ZBateson\\MailMimeParser\\": "src/" - } + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Zaahid Bateson" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Contributors", - "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "MIME email message parser", - "homepage": "https://mail-mime-parser.org", - "keywords": [ - "MimeMailParser", - "email", - "mail", - "mailparse", - "mime", - "mimeparse", - "parser", - "php-imap" - ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "docs": "https://mail-mime-parser.org/#usage-guide", - "issues": "https://github.com/zbateson/mail-mime-parser/issues", - "source": "https://github.com/zbateson/mail-mime-parser" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0-RC1" }, "funding": [ { - "url": "https://github.com/zbateson", + "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": "2023-02-14T22:58:03+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { - "name": "zbateson/mb-wrapper", - "version": "1.2.0", + "name": "symfony/polyfill-iconv", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-iconv": "^1.9", - "symfony/polyfill-mbstring": "^1.9" + "php": ">=7.2" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" + "provide": { + "ext-iconv": "*" }, "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" + "ext-iconv": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "ZBateson\\MbWrapper\\": "src/" + "Symfony\\Polyfill\\Iconv\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Zaahid Bateson" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", "keywords": [ - "charset", - "encoding", - "http", + "compatibility", "iconv", - "mail", - "mb", - "mb_convert_encoding", - "mbstring", - "mime", - "multibyte", - "string" + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0" }, "funding": [ { - "url": "https://github.com/zbateson", + "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": "2023-01-11T23:05:44+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "zbateson/stream-decorators", - "version": "1.2.1", + "name": "symfony/polyfill-php84", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/e5493eb51311ab0b1cc2243416613f06ed8f18bd", + "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "php": ">=7.2" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "ZBateson\\StreamDecorators\\": "src/" - } + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Zaahid Bateson" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP psr7 stream decorators for mime message part streams", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "base64", - "charset", - "decorators", - "mail", - "mime", - "psr7", - "quoted-printable", - "stream", - "uuencode" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.31.0" }, "funding": [ { - "url": "https://github.com/zbateson", + "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": "2023-05-30T22:51:52+00:00" - } - ], - "packages-dev": [ + "time": "2024-09-09T12:04:04+00:00" + }, { - "name": "mikey179/vfsstream", - "version": "v1.6.11", + "name": "symfony/stopwatch", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "696f418b0d722a4225e1c3d95489d262971ca924" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/696f418b0d722a4225e1c3d95489d262971ca924", + "reference": "696f418b0d722a4225e1c3d95489d262971ca924", "shasum": "" }, "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.2.0-RC1" + }, + "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" } ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2022-02-23T02:02:42+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "php-coveralls/php-coveralls", - "version": "v2.7.0", + "name": "symfony/yaml", + "version": "v7.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/php-coveralls/php-coveralls.git", - "reference": "b36fa4394e519dafaddc04ae03976bc65a25ba15" + "url": "https://github.com/symfony/yaml.git", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/b36fa4394e519dafaddc04ae03976bc65a25ba15", - "reference": "b36fa4394e519dafaddc04ae03976bc65a25ba15", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", "shasum": "" }, "require": { - "ext-json": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.0 || ^7.0", - "php": "^7.0 || ^8.0", - "psr/log": "^1.0 || ^2.0", - "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || >=8.0 <8.5.29 || >=9.0 <9.5.23", - "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0" + "conflict": { + "symfony/console": "<6.4" }, - "suggest": { - "symfony/http-kernel": "Allows Symfony integration" + "require-dev": { + "symfony/console": "^6.4|^7.0" }, "bin": [ - "bin/php-coveralls" + "Resources/bin/yaml-lint" ], "type": "library", "autoload": { "psr-4": { - "PhpCoveralls\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8826,269 +10183,253 @@ ], "authors": [ { - "name": "Kitamura Satoshi", - "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp", - "role": "Original creator" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Takashi Matsuo", - "email": "tmatsuo@google.com" - }, + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.2.0-RC1" + }, + "funding": [ { - "name": "Google Inc" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Dariusz Ruminski", - "email": "dariusz.ruminski@gmail.com", - "homepage": "https://github.com/keradus" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Contributors", - "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/php-coveralls/php-coveralls", - "keywords": [ - "ci", - "coverage", - "github", - "test" - ], - "support": { - "issues": "https://github.com/php-coveralls/php-coveralls/issues", - "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.7.0" - }, - "time": "2023-11-22T10:21:01+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { - "name": "php-mock/php-mock", - "version": "2.4.1", + "name": "zbateson/mail-mime-parser", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/php-mock/php-mock.git", - "reference": "6240b6f0a76d7b9d1ee4d70e686a7cc711619a9d" + "url": "https://github.com/zbateson/mail-mime-parser.git", + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-mock/php-mock/zipball/6240b6f0a76d7b9d1ee4d70e686a7cc711619a9d", - "reference": "6240b6f0a76d7b9d1ee4d70e686a7cc711619a9d", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/e0d4423fe27850c9dd301190767dbc421acc2f19", + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0 || ^8.0", - "phpunit/php-text-template": "^1 || ^2 || ^3" - }, - "replace": { - "malkusch/php-mock": "*" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "php-di/php-di": "^6.0|^7.0", + "psr/log": "^1|^2|^3", + "zbateson/mb-wrapper": "^2.0", + "zbateson/stream-decorators": "^2.1" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0 || ^9.0 || ^10.0", - "squizlabs/php_codesniffer": "^3.5" + "friendsofphp/php-cs-fixer": "*", + "monolog/monolog": "^2|^3", + "phpstan/phpstan": "*", + "phpunit/phpunit": "^9.6" }, "suggest": { - "php-mock/php-mock-phpunit": "Allows integration into PHPUnit testcase with the trait PHPMock." + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" }, "type": "library", "autoload": { - "files": [ - "autoload.php" - ], "psr-4": { - "phpmock\\": [ - "classes/", - "tests/" - ] + "ZBateson\\MailMimeParser\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "WTFPL" + "BSD-2-Clause" ], "authors": [ { - "name": "Markus Malkusch", - "email": "markus@malkusch.de", - "homepage": "http://markus.malkusch.de", - "role": "Developer" + "name": "Zaahid Bateson" + }, + { + "name": "Contributors", + "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" } ], - "description": "PHP-Mock can mock built-in PHP functions (e.g. time()). PHP-Mock relies on PHP's namespace fallback policy. No further extension is needed.", - "homepage": "https://github.com/php-mock/php-mock", + "description": "MIME email message parser", + "homepage": "https://mail-mime-parser.org", "keywords": [ - "BDD", - "TDD", - "function", - "mock", - "stub", - "test", - "test double", - "testing" + "MimeMailParser", + "email", + "mail", + "mailparse", + "mime", + "mimeparse", + "parser", + "php-imap" ], "support": { - "issues": "https://github.com/php-mock/php-mock/issues", - "source": "https://github.com/php-mock/php-mock/tree/2.4.1" + "docs": "https://mail-mime-parser.org/#usage-guide", + "issues": "https://github.com/zbateson/mail-mime-parser/issues", + "source": "https://github.com/zbateson/mail-mime-parser" }, "funding": [ { - "url": "https://github.com/michalbundyra", + "url": "https://github.com/zbateson", "type": "github" } ], - "time": "2023-06-12T20:48:52+00:00" + "time": "2024-08-10T18:44:09+00:00" }, { - "name": "symfony/config", - "version": "v5.4.31", + "name": "zbateson/mb-wrapper", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9" + "url": "https://github.com/zbateson/mb-wrapper.git", + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/dd5ea39de228813aba0c23c3a4153da2a4cf3cd9", - "reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/9e4373a153585d12b6c621ac4a6bb143264d4619", + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" - }, - "conflict": { - "symfony/finder": "<4.4" + "php": ">=8.0", + "symfony/polyfill-iconv": "^1.9", + "symfony/polyfill-mbstring": "^1.9" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "<10.0" }, "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "ZBateson\\MbWrapper\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Zaahid Bateson" } ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", + "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", + "keywords": [ + "charset", + "encoding", + "http", + "iconv", + "mail", + "mb", + "mb_convert_encoding", + "mbstring", + "mime", + "multibyte", + "string" + ], "support": { - "source": "https://github.com/symfony/config/tree/v5.4.31" + "issues": "https://github.com/zbateson/mb-wrapper/issues", + "source": "https://github.com/zbateson/mb-wrapper/tree/2.0.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/zbateson", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-11-09T08:22:43+00:00" + "time": "2024-03-20T01:38:07+00:00" }, { - "name": "symfony/filesystem", - "version": "v5.4.25", + "name": "zbateson/stream-decorators", + "version": "2.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364" + "url": "https://github.com/zbateson/stream-decorators.git", + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0ce3a62c9579a53358d3a7eb6b3dfb79789a6364", - "reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/32a2a62fb0f26313395c996ebd658d33c3f9c4e5", + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "zbateson/mb-wrapper": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "^9.6|^10.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "ZBateson\\StreamDecorators\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Zaahid Bateson" } ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", + "description": "PHP psr7 stream decorators for mime message part streams", + "keywords": [ + "base64", + "charset", + "decorators", + "mail", + "mime", + "psr7", + "quoted-printable", + "stream", + "uuencode" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.25" + "issues": "https://github.com/zbateson/stream-decorators/issues", + "source": "https://github.com/zbateson/stream-decorators/tree/2.1.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/zbateson", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-05-31T13:04:02+00:00" + "time": "2024-04-29T21:42:39+00:00" } ], "aliases": [], "minimum-stability": "beta", - "stability-flags": [], + "stability-flags": { + "ronasit/laravel-helpers": 10 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.1.3", + "php": "^8.3", "ext-json": "*" }, "platform-dev": [], diff --git a/config/entity-generator.php b/config/entity-generator.php index bff879b..2ecdfe4 100644 --- a/config/entity-generator.php +++ b/config/entity-generator.php @@ -7,16 +7,12 @@ 'requests' => 'app/Http/Requests', 'controllers' => 'app/Http/Controllers', 'migrations' => 'database/migrations', - 'seeders' => (version_compare(app()->version(), '8', '>=')) - ? 'database/seeders' - : 'database/seeds', - 'database_seeder' => (version_compare(app()->version(), '8', '>=')) - ? 'database/seeders/DatabaseSeeder.php' - : 'database/seeds/DatabaseSeeder.php', + 'seeders' => 'database/seeders', + 'database_seeder' => 'database/seeders/DatabaseSeeder.php', 'repositories' => 'app/Repositories', 'tests' => 'tests', 'routes' => 'routes/api.php', - 'factory' => 'database/factories/ModelFactory.php', + 'factories' => 'database/factories', 'translations' => 'resources/lang/en/validation.php', 'resources' => 'app/Http/Resources', 'nova' => 'app/Nova', @@ -32,10 +28,7 @@ 'routes' => 'entity-generator::routes', 'use_routes' => 'entity-generator::use_routes', 'factory' => 'entity-generator::factory', - 'legacy_factory' => 'entity-generator::legacy_factory', - 'legacy_empty_factory' => 'entity-generator::legacy_empty_factory', 'seeder' => 'entity-generator::seeder', - 'legacy_seeder' => 'entity-generator::legacy_seeder', 'database_empty_seeder' => 'entity-generator::database_empty_seeder', 'migration' => 'entity-generator::migration', 'dump' => 'entity-generator::dumps.pgsql', diff --git a/docker-compose.yml b/docker-compose.yml index b33a639..7fe2aba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,6 @@ -version: '3' - services: nginx: - build: . + image: ghcr.io/ronasit/php-nginx-dev:8.3 working_dir: /app ports: - 80:80 diff --git a/phpunit.xml b/phpunit.xml index 8eb603e..6f1b3b0 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,27 +1,19 @@ - + - ./tests + ./tests - - - ./src - - ./tests - - - - + + + ./src + + diff --git a/src/Commands/MakeEntityCommand.php b/src/Commands/MakeEntityCommand.php index a3d714a..f300ff5 100644 --- a/src/Commands/MakeEntityCommand.php +++ b/src/Commands/MakeEntityCommand.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Config; use Illuminate\Support\Str; use RonasIT\Support\Events\SuccessCreateMessage; +use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Exceptions\ClassNotExistsException; use RonasIT\Support\Exceptions\EntityCreateException; use RonasIT\Support\Generators\ControllerGenerator; @@ -160,13 +161,22 @@ public function __construct() /** * Execute the console command. * - * @return mixed + * @return void */ - public function handle() + public function handle(): void { $this->validateInput(); $this->checkConfigs(); - $this->eventDispatcher->listen(SuccessCreateMessage::class, $this->getSuccessMessageCallback()); + + $this->eventDispatcher->listen( + events: SuccessCreateMessage::class, + listener: fn (SuccessCreateMessage $event) => $this->info($event->message), + ); + + $this->eventDispatcher->listen( + events: WarningEvent::class, + listener: fn (WarningEvent $event) => $this->warn($event->message), + ); try { $this->generate(); @@ -206,10 +216,9 @@ protected function outputNewConfig($packageConfigs, $projectConfigs) } $factories = 'database/factories'; - $factories = (version_compare(app()->version(), '8', '>=')) ? $factories : "{$factories}/ModelFactory.php"; - if ($newConfig['paths.factory'] !== $factories) { - $newConfig['paths.factory'] = $factories; + if ($newConfig['paths.factories'] !== $factories) { + $newConfig['paths.factories'] = $factories; } $differences = array_diff_key($newConfig, $flattenedProjectConfigs); @@ -299,13 +308,6 @@ protected function getRelations() ]; } - protected function getSuccessMessageCallback() - { - return function (SuccessCreateMessage $event) { - $this->info($event->message); - }; - } - protected function getFields() { return Arr::only($this->options(), EntityGenerator::AVAILABLE_FIELDS); diff --git a/src/EntityGeneratorServiceProvider.php b/src/EntityGeneratorServiceProvider.php index c8342a3..c263714 100644 --- a/src/EntityGeneratorServiceProvider.php +++ b/src/EntityGeneratorServiceProvider.php @@ -9,8 +9,10 @@ class EntityGeneratorServiceProvider extends ServiceProvider { public function boot() { + $this->mergeConfigFrom(__DIR__ . '/../config/entity-generator.php', 'entity-generator'); + $this->commands([ - MakeEntityCommand::class + MakeEntityCommand::class, ]); $this->publishes([ diff --git a/src/Events/WarningEvent.php b/src/Events/WarningEvent.php new file mode 100644 index 0000000..b8f4c5a --- /dev/null +++ b/src/Events/WarningEvent.php @@ -0,0 +1,15 @@ +typeName} in {$this->generatorName}."); + } } diff --git a/src/Generators/AbstractTestsGenerator.php b/src/Generators/AbstractTestsGenerator.php index 2397a86..3afb313 100644 --- a/src/Generators/AbstractTestsGenerator.php +++ b/src/Generators/AbstractTestsGenerator.php @@ -3,27 +3,25 @@ namespace RonasIT\Support\Generators; use DateTime; -use Illuminate\Database\Eloquent\Factory as LegacyFactories; use Illuminate\Support\Arr; use Illuminate\Support\Str; use RonasIT\Support\Events\SuccessCreateMessage; use RonasIT\Support\Exceptions\CircularRelationsFoundedException; -use RonasIT\Support\Exceptions\ClassNotExistsException; abstract class AbstractTestsGenerator extends EntityGenerator { - protected $fakerProperties = []; - protected $getFields = []; - protected $withAuth = false; + protected array $fakerProperties = []; + protected array $getFields = []; + protected bool $withAuth = false; - const FIXTURE_TYPES = [ + const array FIXTURE_TYPES = [ 'create' => ['request', 'response'], 'update' => ['request'], ]; - const EMPTY_GUARDED_FIELD = '*'; - const UPDATED_AT = 'updated_at'; - const CREATED_AT = 'created_at'; + const string EMPTY_GUARDED_FIELD = '*'; + const string UPDATED_AT = 'updated_at'; + const string CREATED_AT = 'created_at'; public function generate(): void { @@ -45,20 +43,27 @@ protected function getFixturesPath($fileName = null): string protected function createDump(): void { + if (!$this->isStubExists('dump')) { + return; + } + $content = $this->getStub('dump', [ 'inserts' => $this->getInserts() ]); - $fixturePath = $this->getFixturesPath(); + $this->createFixtureFolder(); - if (!file_exists($fixturePath)) { - mkdir_recursively($fixturePath); - } + $dumpName = $this->getDumpName(); - file_put_contents($this->getFixturesPath('dump.sql'), $content); + file_put_contents($this->getFixturesPath($dumpName), $content); event(new SuccessCreateMessage("Created a new Test dump on path: " - . "{$this->paths['tests']}/fixtures/{$this->getTestClassName()}/dump.sql")); + . "{$this->paths['tests']}/fixtures/{$this->getTestClassName()}/{$dumpName}")); + } + + protected function getDumpName(): string + { + return 'dump.sql'; } protected function getInserts(): array @@ -83,14 +88,11 @@ protected function getInserts(): array }, $this->buildRelationsTree($arrayModels)); } - protected function isFactoryExists($modelName): bool + protected function isFactoryExists(string $modelName): bool { - $factory = app(LegacyFactories::class); $modelClass = $this->getModelClass($modelName); - $isNewStyleFactoryExists = $this->classExists('factory', "{$modelName}Factory") && method_exists($modelClass, 'factory'); - - return $isNewStyleFactoryExists || !empty($factory[$this->getModelClass($modelName)]); + return $this->classExists('factories', "{$modelName}Factory") && method_exists($modelClass, 'factory'); } protected function isMethodExists($modelName, $method): bool @@ -155,11 +157,6 @@ protected function buildEntityObject($model): array return $result; } - protected function getModelClass($model): string - { - return "App\\Models\\{$model}"; - } - protected function getModelFields($model): array { $modelClass = $this->getModelClass($model); @@ -169,13 +166,14 @@ protected function getModelFields($model): array protected function getMockModel($model): array { - if (!$this->isFactoryExists($model)) { + $hasFactory = $this->isFactoryExists($model); + + if (!$hasFactory) { return []; } $modelClass = $this->getModelClass($model); - $hasFactory = method_exists($modelClass, 'factory') && $this->classExists('factory', "{$model}Factory"); - $factory = ($hasFactory) ? $modelClass::factory() : factory($modelClass); + $factory = $modelClass::factory(); return $factory ->make() @@ -187,6 +185,8 @@ protected function generateFixtures(): void $object = $this->getFixtureValuesList($this->model); $entity = Str::snake($this->model); + $this->createFixtureFolder(); + foreach (self::FIXTURE_TYPES as $type => $modifications) { if ($this->isFixtureNeeded($type)) { foreach ($modifications as $modification) { @@ -212,7 +212,7 @@ protected function generateFixture($fixtureName, $data): void protected function buildRelationsTree($models): array { foreach ($models as $model) { - $relations = $this->getRelatedModels($model); + $relations = $this->getRelatedModels($model, $this->getTestClassName()); $relationsWithFactories = $this->getModelsWithFactories($relations); if (empty($relationsWithFactories)) { @@ -235,35 +235,19 @@ protected function buildRelationsTree($models): array return array_unique($models); } - protected function getRelatedModels($model) + protected function canGenerateUserData(): bool { - $content = $this->getModelClassContent($model); - - preg_match_all('/(?<=belongsTo\().*(?=::class)/', $content, $matches); - - return head($matches); + return $this->classExists('models', 'User') + && $this->isMethodExists('User', 'getFields'); } - protected function getModelClassContent($model): string + protected function createFixtureFolder(): void { - $path = base_path("{$this->paths['models']}/{$model}.php"); - - if (!$this->classExists('models', $model)) { - $this->throwFailureException( - ClassNotExistsException::class, - "Cannot create {$model} Model cause {$model} Model does not exists.", - "Create a {$model} Model by himself or run command 'php artisan make:entity {$model} --only-model'." - ); - } - - return file_get_contents($path); - } + $fixturePath = $this->getFixturesPath(); - protected function canGenerateUserData(): bool - { - return $this->classExists('models', 'User') - && $this->isFactoryExists('User') - && $this->isMethodExists('User', 'getFields'); + if (!file_exists($fixturePath)) { + mkdir($fixturePath, 0777, true); + } } abstract protected function getTestClassName(): string; @@ -277,7 +261,7 @@ private function filterBadModelField($fields): array return array_diff($fields, [ self::EMPTY_GUARDED_FIELD, self::CREATED_AT, - self::UPDATED_AT + self::UPDATED_AT, ]); } } diff --git a/src/Generators/ControllerGenerator.php b/src/Generators/ControllerGenerator.php index d03e825..945ba85 100644 --- a/src/Generators/ControllerGenerator.php +++ b/src/Generators/ControllerGenerator.php @@ -15,19 +15,22 @@ public function generate(): void $this->throwFailureException( ClassAlreadyExistsException::class, "Cannot create {$this->model}Controller cause {$this->model}Controller already exists.", - "Remove {$this->model}Controller." + "Remove {$this->model}Controller.", ); - } if (!$this->classExists('services', "{$this->model}Service")) { $this->throwFailureException( ClassNotExistsException::class, - "Cannot create {$this->model}Service cause {$this->model}Service does not exists.", - "Create a {$this->model}Service by himself." + "Cannot create {$this->model}Controller cause {$this->model}Service does not exists.", + "Create a {$this->model}Service by himself.", ); } + if (!$this->isStubExists('controller')) { + return; + } + $controllerContent = $this->getControllerContent($this->model); $this->saveClass('controllers', "{$this->model}Controller", $controllerContent); @@ -41,7 +44,7 @@ protected function getControllerContent($model): string { return $this->getStub('controller', [ 'entity' => $model, - 'requestsFolder' => $this->getPluralName($model), + 'requestsFolder' => $model, 'namespace' => $this->getOrCreateNamespace('controllers'), 'requestsNamespace' => $this->getOrCreateNamespace('requests'), 'resourcesNamespace' => $this->getOrCreateNamespace('resources'), @@ -57,12 +60,14 @@ protected function createRoutes(): void $this->throwFailureException( FileNotFoundException::class, "Not found file with routes.", - "Create a routes file on path: '{$routesPath}'." + "Create a routes file on path: '{$routesPath}'.", ); } - $this->addUseController($routesPath); - $this->addRoutes($routesPath); + if ($this->isStubExists('routes') && $this->isStubExists('use_routes')) { + $this->addUseController($routesPath); + $this->addRoutes($routesPath); + } } protected function addRoutes($routesPath): string @@ -73,9 +78,12 @@ protected function addRoutes($routesPath): string ]); $routes = explode("\n", $routesContent); + $routes = array_slice($routes, 1, array_key_last($routes) - 1); foreach ($routes as $route) { if (!empty($route)) { + $route = trim($route); + $createMessage = "Created a new Route: $route"; event(new SuccessCreateMessage($createMessage)); @@ -98,4 +106,4 @@ protected function addUseController(string $routesPath): void file_put_contents($routesPath, $routesFileContent); } -} \ No newline at end of file +} diff --git a/src/Generators/EntityGenerator.php b/src/Generators/EntityGenerator.php index 97ddd3c..faf4c2f 100644 --- a/src/Generators/EntityGenerator.php +++ b/src/Generators/EntityGenerator.php @@ -2,9 +2,16 @@ namespace RonasIT\Support\Generators; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Arr; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; +use RonasIT\Support\Events\WarningEvent; +use RonasIT\Support\Exceptions\ClassNotExistsException; +use Throwable; +use ReflectionMethod; +use ReflectionClass; /** * @property Filesystem $fs @@ -93,7 +100,7 @@ protected function getOrCreateNamespace(string $path): string $fullPath = base_path($path); if (!file_exists($fullPath)) { - mkdir_recursively($fullPath); + mkdir($fullPath, 0777, true); } return implode('\\', $namespace); @@ -126,7 +133,7 @@ protected function saveClass($path, $name, $content, $additionalEntityFolder = f } if (!file_exists($entitiesPath)) { - mkdir_recursively($entitiesPath); + mkdir($entitiesPath, 0777, true); } return file_put_contents($classPath, $content); @@ -157,4 +164,71 @@ protected function throwFailureException($exceptionClass, $failureMessage, $reco { throw new $exceptionClass("{$failureMessage} {$recommendedMessage}"); } + + protected function getRelatedModels(string $model, string $creatableClass): array + { + $modelClass = $this->getModelClass($model); + + if (!class_exists($modelClass)) { + $this->throwFailureException( + exceptionClass: ClassNotExistsException::class, + failureMessage: "Cannot create {$creatableClass} cause {$model} Model does not exists.", + recommendedMessage: "Create a {$model} Model by himself or run command 'php artisan make:entity {$model} --only-model'.", + ); + } + + $instance = new $modelClass(); + + $publicMethods = (new ReflectionClass($modelClass))->getMethods(ReflectionMethod::IS_PUBLIC); + + $methods = array_filter($publicMethods, fn ($method) => $method->class === $modelClass && !$method->getParameters()); + + $relatedModels = []; + + DB::beginTransaction(); + + foreach ($methods as $method) { + try { + $result = call_user_func([$instance, $method->getName()]); + + if (!$result instanceof BelongsTo) { + continue; + } + } catch (Throwable) { + continue; + } + + $relatedModels[] = class_basename(get_class($result->getRelated())); + } + + DB::rollBack(); + + return $relatedModels; + } + + protected function getModelClass(string $model): string + { + $modelNamespace = $this->getOrCreateNamespace('models'); + + return "{$modelNamespace}\\{$model}"; + } + + protected function isStubExists(string $stubName): bool + { + $config = "entity-generator.stubs.{$stubName}"; + + $stubPath = config($config); + + if (!view()->exists($stubPath)) { + $generationType = Str::replace('_', ' ', $stubName); + + $message = "Generation of {$generationType} has been skipped cause the view {$stubPath} from the config {$config} is not exists. Please check that config has the correct view name value."; + + event(new WarningEvent($message)); + + return false; + } + + return true; + } } diff --git a/src/Generators/FactoryGenerator.php b/src/Generators/FactoryGenerator.php index b3876f5..fe18caf 100644 --- a/src/Generators/FactoryGenerator.php +++ b/src/Generators/FactoryGenerator.php @@ -7,15 +7,13 @@ use Illuminate\Support\Str; use InvalidArgumentException; use RonasIT\Support\Exceptions\FakerMethodNotFoundException; -use RonasIT\Support\Exceptions\ModelFactoryNotFound; use RonasIT\Support\Exceptions\ClassNotExistsException; -use RonasIT\Support\Exceptions\ModelFactoryNotFoundedException; use RonasIT\Support\Exceptions\ClassAlreadyExistsException; use RonasIT\Support\Events\SuccessCreateMessage; class FactoryGenerator extends EntityGenerator { - const FAKERS_METHODS = [ + const array FAKERS_METHODS = [ 'integer' => 'randomNumber()', 'boolean' => 'boolean', 'string' => 'word', @@ -23,121 +21,41 @@ class FactoryGenerator extends EntityGenerator 'timestamp' => 'dateTime', ]; - const CUSTOM_METHODS = [ - 'json' => '[]' + const array CUSTOM_METHODS = [ + 'json' => '[]', ]; - protected function generateSeparateClass(): string + public function generate(): void { if (!$this->classExists('models', $this->model)) { $this->throwFailureException( - ClassNotExistsException::class, - "Cannot create {$this->model}Factory cause {$this->model} Model does not exists.", - "Create a {$this->model} Model by itself or run command 'php artisan make:entity {$this->model} --only-model'." + exceptionClass: ClassNotExistsException::class, + failureMessage: "Cannot create {$this->model}Factory cause {$this->model} Model does not exists.", + recommendedMessage: "Create a {$this->model} Model by itself or run command 'php artisan make:entity {$this->model} --only-model'.", ); } - if ($this->classExists('factory', "{$this->model}Factory")) { + if ($this->classExists('factories', "{$this->model}Factory")) { $this->throwFailureException( - ClassAlreadyExistsException::class, - "Cannot create {$this->model}Factory cause {$this->model}Factory already exists.", - "Remove {$this->model}Factory." + exceptionClass: ClassAlreadyExistsException::class, + failureMessage: "Cannot create {$this->model}Factory cause {$this->model}Factory already exists.", + recommendedMessage: "Remove {$this->model}Factory.", ); } + if (!$this->isStubExists('factory')) { + return; + } + $factoryContent = $this->getStub('factory', [ - 'namespace' => $this->getOrCreateNamespace('factory'), + 'namespace' => $this->getOrCreateNamespace('factories'), 'entity' => $this->model, - 'fields' => $this->prepareFields() + 'fields' => $this->prepareFields(), ]); - $this->saveClass('factory', "{$this->model}Factory", $factoryContent); - - return "Created a new Factory: {$this->model}Factory"; - } - - protected function generateToGenericClass(): string - { - if (!file_exists($this->paths['factory'])) { - $this->prepareEmptyFactory(); - } - - if (!$this->checkExistModelFactory() && $this->checkExistRelatedModelsFactories()) { - $stubPath = config("entity-generator.stubs.legacy_factory"); - - $content = view($stubPath)->with([ - 'entity' => $this->model, - 'fields' => $this->prepareFields(), - 'modelsNamespace' => $this->getOrCreateNamespace('models') - ])->render(); - - $content = "\n\n" . $content; - - $createMessage = "Created a new Test factory for {$this->model} model in '{$this->paths['factory']}'"; - - file_put_contents(base_path($this->paths['factory']), $content, FILE_APPEND); - - $this->prepareRelatedFactories(); - } else { - $createMessage = "Factory for {$this->model} model has already created, so new factory not necessary create."; - } - - return $createMessage; - } - - public function generate(): void - { - $createMessage = ($this->allowedToCreateFactoryInSeparateClass()) - ? $this->generateSeparateClass() - : $this->generateToGenericClass(); - - event(new SuccessCreateMessage($createMessage)); - } - - protected function allowedToCreateFactoryInSeparateClass(): bool - { - return version_compare(app()->version(), '8', '>='); - } - - protected function prepareEmptyFactory(): void - { - $stubPath = config('entity-generator.stubs.legacy_empty_factory'); - $content = " $this->getOrCreateNamespace('models') - ])->render(); - - list($basePath, $databaseFactoryDir) = extract_last_part(config('entity-generator.paths.factory'), '/'); - - $databaseFactoryDir = base_path($databaseFactoryDir); - - if (!is_dir($databaseFactoryDir)) { - mkdir($databaseFactoryDir); - } - - file_put_contents(base_path($this->paths['factory']), $content); - } - - protected function checkExistRelatedModelsFactories(): bool - { - $modelFactoryContent = file_get_contents(base_path($this->paths['factory'])); - $relatedModels = $this->getRelatedModels($this->model); - $modelNamespace = $this->getOrCreateNamespace('models'); + $this->saveClass('factories', "{$this->model}Factory", $factoryContent); - foreach ($relatedModels as $relatedModel) { - $relatedFactoryClass = "{$modelNamespace}\\$relatedModel::class"; - $existModelFactory = strpos($modelFactoryContent, $relatedFactoryClass); - - if (!$existModelFactory) { - $this->throwFailureException( - ModelFactoryNotFoundedException::class, - "Not found {$relatedModel} factory for {$relatedModel} model in '{$this->paths['factory']}", - "Please declare a factory for {$relatedModel} model on '{$this->paths['factory']}' " - . "path and run your command with option '--only-tests'." - ); - } - } - - return true; + event(new SuccessCreateMessage("Created a new Factory: {$this->model}Factory")); } protected static function getFakerMethod($field): string @@ -161,40 +79,6 @@ protected static function getCustomMethod($field): string throw new FakerMethodNotFoundException($message); } - protected function prepareRelatedFactories(): void - { - $relations = array_merge( - $this->relations['hasOne'], - $this->relations['hasMany'] - ); - - foreach ($relations as $relation) { - $modelFactoryContent = file_get_contents(base_path($this->paths['factory'])); - - if (!Str::contains($modelFactoryContent, $this->getModelClass($relation))) { - $this->throwFailureException( - ModelFactoryNotFound::class, - "Model factory for model {$relation} not found.", - "Please create it and after thar you can run this command with flag '--only-tests'." - ); - } - - $matches = []; - - preg_match($this->getFactoryPattern($relation), $modelFactoryContent, $matches); - - foreach ($matches as $match) { - $field = Str::snake($this->model) . '_id'; - - $newField = "\n \"{$field}\" => 1,"; - - $modelFactoryContent = str_replace($match, $match . $newField, $modelFactoryContent); - } - - file_put_contents(base_path($this->paths['factory']), $modelFactoryContent); - } - } - public static function getFactoryFieldsContent($field): string { /** @var Faker $faker */ @@ -218,69 +102,19 @@ public static function getFactoryFieldsContent($field): string return self::getFakerMethod($field); } - protected function checkExistModelFactory(): int - { - $modelFactoryContent = file_get_contents(base_path($this->paths['factory'])); - $modelNamespace = $this->getOrCreateNamespace('models'); - $factoryClass = "{$modelNamespace}\\$this->model::class"; - - return strpos($modelFactoryContent, $factoryClass); - } - protected function prepareFields(): array { $result = []; foreach ($this->fields as $type => $fields) { foreach ($fields as $field) { - $explodedType = explode('-', $type); - $result[] = [ 'name' => $field, - 'type' => head($explodedType) + 'type' => Str::before($type, '-'), ]; } } return $result; } - - protected function getFactoryPattern($model): string - { - $modelNamespace = "App\\\\Models\\\\" . $model; - $return = "return \\["; - - return "/{$modelNamespace}.*{$return}/sU"; - } - - protected function getModelClass($model): string - { - $modelNamespace = $this->getOrCreateNamespace('models'); - - return "{$modelNamespace}\\{$model}"; - } - - protected function getRelatedModels($model) - { - $content = $this->getModelClassContent($model); - - preg_match_all('/(?<=belongsTo\().*(?=::class)/', $content, $matches); - - return head($matches); - } - - protected function getModelClassContent($model): string - { - $path = base_path("{$this->paths['models']}/{$model}.php"); - - if (!$this->classExists('models', $model)) { - $this->throwFailureException( - ClassNotExistsException::class, - "Cannot get {$model} Model class content cause {$model} Model does not exists.", - "Create a {$model} Model by itself or run command 'php artisan make:entity {$model} --only-model'." - ); - } - - return file_get_contents($path); - } -} +} \ No newline at end of file diff --git a/src/Generators/MigrationGenerator.php b/src/Generators/MigrationGenerator.php index c020bd9..64566c4 100644 --- a/src/Generators/MigrationGenerator.php +++ b/src/Generators/MigrationGenerator.php @@ -3,7 +3,7 @@ namespace RonasIT\Support\Generators; use Carbon\Carbon; -use Illuminate\Support\Arr; +use Illuminate\Support\Str; use RonasIT\Support\Events\SuccessCreateMessage; use RonasIT\Support\Exceptions\UnknownFieldTypeException; @@ -11,6 +11,10 @@ class MigrationGenerator extends EntityGenerator { public function generate(): void { + if (!$this->isStubExists('migration')) { + return; + } + $entities = $this->getTableName($this->model); $content = $this->getStub('migration', [ @@ -21,6 +25,7 @@ public function generate(): void 'fields' => $this->fields, 'table' => $this->generateTable($this->fields) ]); + $now = Carbon::now()->format('Y_m_d_His'); $this->saveClass('migrations', "{$now}_{$entities}_create_table", $content); @@ -28,22 +33,22 @@ public function generate(): void event(new SuccessCreateMessage("Created a new Migration: {$entities}_create_table")); } - protected function isJson($typeName): bool + protected function isJson(string $typeName): bool { - return $typeName == 'json'; + return $typeName === 'json'; } - protected function isRequired($typeName): bool + protected function isRequired(string $typeName): bool { - return Arr::get(explode('-', $typeName), 1) === 'required'; + return Str::afterLast($typeName, '-') === 'required'; } - protected function isNullable($typeName): bool + protected function isNullable(string $typeName): bool { return empty(explode('-', $typeName)[1]); } - protected function getJsonLine($fieldName): string + protected function getJsonLine(string $fieldName): string { if (env("DB_CONNECTION") == "mysql") { return "\$table->json('{$fieldName}')->nullable();"; @@ -52,7 +57,7 @@ protected function getJsonLine($fieldName): string return "\$table->jsonb('{$fieldName}')->default(\"{}\");"; } - protected function getRequiredLine($fieldName, $typeName): string + protected function getRequiredLine(string $fieldName, string $typeName): string { $type = explode('-', $typeName)[0]; @@ -63,27 +68,27 @@ protected function getRequiredLine($fieldName, $typeName): string return "\$table->{$type}('{$fieldName}');"; } - protected function getNonRequiredLine($fieldName, $typeName): string + protected function getNonRequiredLine(string $fieldName, string $typeName): string { $type = explode('-', $typeName)[0]; return "\$table->{$type}('{$fieldName}')->nullable();"; } - protected function generateTable($fields): array + protected function generateTable(array $fields): array { $resultTable = []; foreach ($fields as $typeName => $fieldNames) { foreach ($fieldNames as $fieldName) { - array_push($resultTable, $this->getTableRow($fieldName, $typeName)); + $resultTable[] = $this->getTableRow($fieldName, $typeName); } } return $resultTable; } - protected function getTableRow($fieldName, $typeName): string + protected function getTableRow(string $fieldName, string $typeName): string { if ($this->isJson($typeName)) { return $this->getJsonLine($fieldName); @@ -97,6 +102,6 @@ protected function getTableRow($fieldName, $typeName): string return $this->getNonRequiredLine($fieldName, $typeName); } - throw new UnknownFieldTypeException("Unknown field type {$typeName} in MigrationGenerator."); + throw new UnknownFieldTypeException($typeName, 'MigrationGenerator'); } } \ No newline at end of file diff --git a/src/Generators/ModelGenerator.php b/src/Generators/ModelGenerator.php index c8c49fc..1a1c44d 100644 --- a/src/Generators/ModelGenerator.php +++ b/src/Generators/ModelGenerator.php @@ -10,27 +10,29 @@ class ModelGenerator extends EntityGenerator { - CONST PLURAL_NUMBER_REQUIRED = [ + protected const array PLURAL_NUMBER_REQUIRED = [ 'belongsToMany', - 'hasMany' + 'hasMany', ]; public function generate(): void { if ($this->classExists('models', $this->model)) { $this->throwFailureException( - ClassAlreadyExistsException::class, - "Cannot create {$this->model} Model cause {$this->model} Model already exists.", - "Remove {$this->model} Model." + exceptionClass: ClassAlreadyExistsException::class, + failureMessage: "Cannot create {$this->model} Model cause {$this->model} Model already exists.", + recommendedMessage: "Remove {$this->model} Model.", ); } - $this->prepareRelatedModels(); - $modelContent = $this->getNewModelContent(); + if ($this->isStubExists('model') && ($this->isStubExists('relation') || empty($this->relations))) { + $this->prepareRelatedModels(); + $modelContent = $this->getNewModelContent(); - $this->saveClass('models', $this->model, $modelContent); + $this->saveClass('models', $this->model, $modelContent); - event(new SuccessCreateMessage("Created a new Model: {$this->model}")); + event(new SuccessCreateMessage("Created a new Model: {$this->model}")); + } } protected function getNewModelContent(): string @@ -40,7 +42,7 @@ protected function getNewModelContent(): string 'fields' => Arr::collapse($this->fields), 'relations' => $this->prepareRelations(), 'casts' => $this->getCasts($this->fields), - 'namespace' => $this->getOrCreateNamespace('models') + 'namespace' => $this->getOrCreateNamespace('models'), ]); } @@ -68,7 +70,7 @@ public function prepareRelatedModels(): void $newRelation = $this->getStub('relation', [ 'name' => $this->getRelationName($this->model, $types[$type]), 'type' => $types[$type], - 'entity' => $this->model + 'entity' => $this->model, ]); $fixedContent = preg_replace('/\}$/', "\n {$newRelation}\n}", $content); @@ -78,9 +80,9 @@ public function prepareRelatedModels(): void } } - public function getModelContent($model): string + public function getModelContent(string $model): string { - $modelPath = base_path($this->paths['models'] . "/{$model}.php"); + $modelPath = base_path("{$this->paths['models']}/{$model}.php"); return file_get_contents($modelPath); } @@ -95,7 +97,7 @@ public function prepareRelations(): array $result[] = [ 'name' => $this->getRelationName($relation, $type), 'type' => $type, - 'entity' => $relation + 'entity' => $relation, ]; } } @@ -104,7 +106,7 @@ public function prepareRelations(): array return $result; } - protected function getCasts($fields): array + protected function getCasts(array $fields): array { $casts = [ 'boolean-required' => 'boolean', @@ -127,7 +129,7 @@ protected function getCasts($fields): array return $result; } - private function getRelationName($relation, $type): string + private function getRelationName(string $relation, string $type): string { $relationName = Str::snake($relation); diff --git a/src/Generators/NovaResourceGenerator.php b/src/Generators/NovaResourceGenerator.php index c1d68bd..ae6a061 100644 --- a/src/Generators/NovaResourceGenerator.php +++ b/src/Generators/NovaResourceGenerator.php @@ -70,6 +70,10 @@ public function generate(): void ); } + if (!$this->isStubExists('nova_resource')) { + return; + } + $novaFields = $this->prepareNovaFields(); $fileContent = $this->getStub('nova_resource', [ diff --git a/src/Generators/NovaTestGenerator.php b/src/Generators/NovaTestGenerator.php index ba79c09..080336b 100644 --- a/src/Generators/NovaTestGenerator.php +++ b/src/Generators/NovaTestGenerator.php @@ -40,14 +40,19 @@ public function generate(): void public function generateTests(): void { + if (!$this->isStubExists('nova_test')) { + return; + } + $actions = $this->getActions(); $filters = $this->collectFilters(); $fileContent = $this->getStub('nova_test', [ - 'url_path' => $this->getPluralName(Str::kebab($this->model)), + 'url_path' => Str::kebab($this->model) . '-resources', 'entity' => $this->model, 'entities' => $this->getPluralName($this->model), - 'lower_entity' => Str::snake($this->model), + 'snake_entity' => Str::snake($this->model), + 'dromedary_entity' => Str::lcfirst($this->model), 'lower_entities' => $this->getPluralName(Str::snake($this->model)), 'actions' => $actions, 'filters' => $filters, @@ -70,7 +75,7 @@ protected function getActions(): array $actionClass = class_basename($action); return [ - 'url' => Str::kebab($actionClass), + 'className' => $actionClass, 'fixture' => Str::snake($actionClass), ]; }, $actions); @@ -167,4 +172,11 @@ protected function getFilters(): array return $filters; } + + protected function getDumpName(): string + { + $modelName = Str::snake($this->model); + + return "nova_{$modelName}_dump.sql"; + } } diff --git a/src/Generators/RepositoryGenerator.php b/src/Generators/RepositoryGenerator.php index fc639a6..a046397 100644 --- a/src/Generators/RepositoryGenerator.php +++ b/src/Generators/RepositoryGenerator.php @@ -17,6 +17,10 @@ public function generate(): void ); } + if (!$this->isStubExists('repository')) { + return; + } + $repositoryContent = $this->getStub('repository', [ 'entity' => $this->model, 'namespace' => $this->getOrCreateNamespace('repositories'), diff --git a/src/Generators/RequestsGenerator.php b/src/Generators/RequestsGenerator.php index 302f6b1..1c3d30d 100644 --- a/src/Generators/RequestsGenerator.php +++ b/src/Generators/RequestsGenerator.php @@ -27,6 +27,10 @@ public function setRelations($relations) public function generate(): void { + if (!$this->isStubExists('request')) { + return; + } + if (in_array('R', $this->crudOptions)) { $this->createRequest( self::GET_METHOD, @@ -63,7 +67,7 @@ public function generate(): void protected function createRequest($method, $needToValidate = true, $parameters = []): void { - $requestsFolder = $this->getPluralName($this->model); + $requestsFolder = $this->model; $modelName = $this->getEntityName($method); $content = $this->getStub('request', [ @@ -120,10 +124,14 @@ protected function getSearchValidationParameters(): array 'timestamp', 'timestamp-required', 'string-required', 'integer-required', 'boolean-required' ]); - $parameters['boolean'] = array_merge($this->fields['boolean-required'], ['desc']); + $parameters['boolean'] = array_merge($this->fields['boolean-required'], [ + 'desc', + 'all', + ]); $parameters['integer'] = array_merge($this->fields['integer'], [ - 'page', 'per_page', 'all', + 'page', + 'per_page', ]); $parameters['array'] = ['with']; diff --git a/src/Generators/ResourceGenerator.php b/src/Generators/ResourceGenerator.php index 4ac24cf..6e509fc 100644 --- a/src/Generators/ResourceGenerator.php +++ b/src/Generators/ResourceGenerator.php @@ -9,8 +9,13 @@ class ResourceGenerator extends EntityGenerator { public function generate(): void { - $this->generateResource(); - $this->generateCollectionResource(); + if ($this->isStubExists('resource')) { + $this->generateResource(); + + if ($this->isStubExists('collection_resource')) { + $this->generateCollectionResource(); + } + } } public function generateCollectionResource(): void @@ -31,7 +36,7 @@ public function generateCollectionResource(): void 'namespace' => $this->getOrCreateNamespace('resources') ]); - $this->saveClass('resources', "{$pluralName}CollectionResource", $collectionResourceContent); + $this->saveClass('resources', "{$pluralName}CollectionResource", $collectionResourceContent, $this->model); event(new SuccessCreateMessage("Created a new CollectionResource: {$pluralName}CollectionResource")); } @@ -48,11 +53,12 @@ public function generateResource(): void $resourceContent = $this->getStub('resource', [ 'entity' => $this->model, - 'namespace' => $this->getOrCreateNamespace('resources') + 'namespace' => $this->getOrCreateNamespace('resources'), + 'model_namespace' => $this->getOrCreateNamespace('models'), ]); - $this->saveClass('resources', "{$this->model}Resource", $resourceContent); + $this->saveClass('resources', "{$this->model}Resource", $resourceContent, $this->model); event(new SuccessCreateMessage("Created a new Resource: {$this->model}Resource")); } -} \ No newline at end of file +} diff --git a/src/Generators/SeederGenerator.php b/src/Generators/SeederGenerator.php index 20ec21f..5872e11 100644 --- a/src/Generators/SeederGenerator.php +++ b/src/Generators/SeederGenerator.php @@ -4,6 +4,7 @@ use Illuminate\Support\Arr; use RonasIT\Support\Events\SuccessCreateMessage; +use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Exceptions\EntityCreateException; class SeederGenerator extends EntityGenerator @@ -15,13 +16,19 @@ public function __construct() { parent::__construct(); - $this->seedsPath = Arr::get($this->paths, 'seeders', 'database/seeders'); - $this->databaseSeederPath = Arr::get($this->paths, 'database_seeder', 'database/seeders/DatabaseSeeder.php'); + $this->seedsPath = base_path(Arr::get($this->paths, 'seeders', 'database/seeders')); + $this->databaseSeederPath = base_path(Arr::get($this->paths, 'database_seeder', 'database/seeders/DatabaseSeeder.php')); } public function generate(): void { - $this->checkConfigs(); + if (!$this->isStubExists('seeder') || !$this->isStubExists('database_empty_seeder')) { + return; + } + + if (!file_exists($this->seedsPath)) { + mkdir($this->seedsPath); + } if (!file_exists($this->databaseSeederPath)) { list($basePath, $databaseSeederDir) = extract_last_part($this->databaseSeederPath, '/'); @@ -33,10 +40,6 @@ public function generate(): void $this->createDatabaseSeeder(); } - if (!is_dir($this->seedsPath)) { - mkdir($this->seedsPath); - } - $this->createEntitySeeder(); $this->appendSeederToList(); @@ -44,11 +47,9 @@ public function generate(): void protected function createDatabaseSeeder(): void { - $stubPath = config('entity-generator.stubs.database_empty_seeder'); - - $content = "getStub('database_empty_seeder', [ 'namespace' => $this->getOrCreateNamespace('seeders') - ])->render(); + ]); file_put_contents($this->databaseSeederPath, $content); @@ -59,18 +60,14 @@ protected function createDatabaseSeeder(): void protected function createEntitySeeder(): void { - $seeder = (version_compare(app()->version(), '8', '>=')) ? 'seeder' : 'legacy_seeder'; - - $stubPath = config("entity-generator.stubs.{$seeder}"); - - $content = "with([ + $content = "getStub('seeder', [ 'entity' => $this->model, 'relations' => $this->relations, 'namespace' => $this->getOrCreateNamespace('seeders'), - 'modelsNamespace' => $this->getOrCreateNamespace('models') - ])->render(); + 'modelsNamespace' => $this->getOrCreateNamespace('models'), + ]); - $seederPath = base_path("{$this->seedsPath}/{$this->model}Seeder.php"); + $seederPath = "{$this->seedsPath}/{$this->model}Seeder.php"; file_put_contents($seederPath, $content); @@ -83,20 +80,10 @@ protected function appendSeederToList(): void { $content = file_get_contents($this->databaseSeederPath); - $insertContent = "\n \$this->call({$this->model}Seeder::class);\n }\n}"; + $insertContent = " \$this->call({$this->model}Seeder::class);\n }\n}"; $fixedContent = preg_replace('/\}\s*\}\s*\z/', $insertContent, $content); file_put_contents($this->databaseSeederPath, $fixedContent); } - - protected function checkConfigs(): void - { - if (empty(config('entity-generator.stubs.seeder')) || empty(config('entity-generator.stubs.legacy_seeder'))) { - throw new EntityCreateException(' - Looks like you have deprecated configs. - Please follow instructions(https://github.com/RonasIT/laravel-entity-generator/blob/master/ReadMe.md#13) - '); - } - } } \ No newline at end of file diff --git a/src/Generators/ServiceGenerator.php b/src/Generators/ServiceGenerator.php index b59652b..df12632 100644 --- a/src/Generators/ServiceGenerator.php +++ b/src/Generators/ServiceGenerator.php @@ -36,6 +36,10 @@ public function generate(): void } } + if (!$this->isStubExists($stub)) { + return; + } + $serviceContent = $this->getStub($stub, [ 'entity' => $this->model, 'fields' => $this->getFields(), diff --git a/src/Generators/TestsGenerator.php b/src/Generators/TestsGenerator.php index e4696ac..25ddbf3 100644 --- a/src/Generators/TestsGenerator.php +++ b/src/Generators/TestsGenerator.php @@ -50,12 +50,17 @@ protected function generateFixture($fixtureName, $data): void protected function generateTests(): void { + if (!$this->isStubExists('test')) { + return; + } + $content = $this->getStub('test', [ 'entity' => $this->model, 'databaseTableName' => $this->getTableName($this->model), 'entities' => $this->getTableName($this->model, '-'), 'withAuth' => $this->withAuth, - 'modelsNamespace' => $this->getOrCreateNamespace('models') + 'modelsNamespace' => $this->getOrCreateNamespace('models'), + 'hasModificationEndpoints' => !empty(array_intersect($this->crudOptions, ['C', 'U', 'D'])), ]); $testName = $this->getTestClassName(); diff --git a/src/Generators/TranslationsGenerator.php b/src/Generators/TranslationsGenerator.php index 30b54a3..155e37f 100644 --- a/src/Generators/TranslationsGenerator.php +++ b/src/Generators/TranslationsGenerator.php @@ -18,11 +18,11 @@ public function __construct() public function generate(): void { - if (!file_exists($this->translationPath)) { + if (!file_exists($this->translationPath) && $this->isStubExists('validation')) { $this->createTranslate(); } - if ($this->isTranslationMissed('validation.exceptions.not_found')) { + if ($this->isTranslationMissed('validation.exceptions.not_found') && $this->isStubExists('translation_not_found')) { $this->appendNotFoundException(); } } diff --git a/src/Support/DatabaseNovaField.php b/src/Support/DatabaseNovaField.php index bfa7bd6..d303362 100644 --- a/src/Support/DatabaseNovaField.php +++ b/src/Support/DatabaseNovaField.php @@ -9,7 +9,7 @@ class DatabaseNovaField extends AbstractNovaField public function __construct(Column $field) { $this->isRequired = $field->getNotNull(); - $this->type = $field->getType()->getName(); + $this->type = strtolower($field->getType()->getBindingType()->name); $this->name = $field->getName(); } } diff --git a/stubs/collection_resource.blade.php b/stubs/collection_resource.blade.php index 0996813..eb060d9 100644 --- a/stubs/collection_resource.blade.php +++ b/stubs/collection_resource.blade.php @@ -1,8 +1,8 @@ -namespace {{$namespace}}; +namespace {{$namespace}}\{{$singular_name}}; use Illuminate\Http\Resources\Json\ResourceCollection; class {{$plural_name}}CollectionResource extends ResourceCollection { public $collects = {{$singular_name}}Resource::class; -} \ No newline at end of file +} diff --git a/stubs/controller.blade.php b/stubs/controller.blade.php index 57af6ed..4912363 100644 --- a/stubs/controller.blade.php +++ b/stubs/controller.blade.php @@ -1,7 +1,7 @@ namespace {{$namespace}}; @inject('str', 'Illuminate\Support\Str') -use {{$resourcesNamespace}}\{{$str::plural($entity)}}CollectionResource; +use {{$resourcesNamespace}}\{{$entity}}\{{$str::plural($entity)}}CollectionResource; @if (in_array('C', $options)) use {{$requestsNamespace}}\{{$requestsFolder}}\Create{{$entity}}Request; @endif @@ -15,16 +15,16 @@ @if (in_array('U', $options)) use {{$requestsNamespace}}\{{$requestsFolder}}\Update{{$entity}}Request; @endif -use {{$resourcesNamespace}}\{{$entity}}Resource; +use {{$resourcesNamespace}}\{{$entity}}\{{$entity}}Resource; use {{$servicesNamespace}}\{{$entity}}Service; @if (in_array('D', $options) || in_array('U', $options)) use Symfony\Component\HttpFoundation\Response; - @endif + class {{$entity}}Controller extends Controller { @if (in_array('C', $options)) - public function create(Create{{$entity}}Request $request, {{$entity}}Service $service) + public function create(Create{{$entity}}Request $request, {{$entity}}Service $service): {{$entity}}Resource { $data = $request->onlyValidated(); @@ -35,7 +35,7 @@ public function create(Create{{$entity}}Request $request, {{$entity}}Service $se @endif @if (in_array('R', $options)) - public function get(Get{{$entity}}Request $request, {{$entity}}Service $service, $id) + public function get(Get{{$entity}}Request $request, {{$entity}}Service $service, $id): {{$entity}}Resource { $result = $service ->with($request->input('with', [])) @@ -45,7 +45,7 @@ public function get(Get{{$entity}}Request $request, {{$entity}}Service $service, return {{$entity}}Resource::make($result); } - public function search(Search{{$str::plural($entity)}}Request $request, {{$entity}}Service $service) + public function search(Search{{$str::plural($entity)}}Request $request, {{$entity}}Service $service): {{$str::plural($entity)}}CollectionResource { $result = $service->search($request->onlyValidated()); @@ -54,7 +54,7 @@ public function search(Search{{$str::plural($entity)}}Request $request, {{$entit @endif @if (in_array('U', $options)) - public function update(Update{{$entity}}Request $request, {{$entity}}Service $service, $id) + public function update(Update{{$entity}}Request $request, {{$entity}}Service $service, $id): Response { $service->update($id, $request->onlyValidated()); @@ -63,11 +63,11 @@ public function update(Update{{$entity}}Request $request, {{$entity}}Service $se @endif @if (in_array('D', $options)) - public function delete(Delete{{$entity}}Request $request, {{$entity}}Service $service, $id) + public function delete(Delete{{$entity}}Request $request, {{$entity}}Service $service, $id): Response { $service->delete($id); return response('', Response::HTTP_NO_CONTENT); } @endif -} \ No newline at end of file +} diff --git a/stubs/dumps/mysql.blade.php b/stubs/dumps/mysql.blade.php index 8a7ed74..cd06d2d 100644 --- a/stubs/dumps/mysql.blade.php +++ b/stubs/dumps/mysql.blade.php @@ -1,6 +1,6 @@ @foreach($inserts as $entities) @foreach($entities['items'] as $entity) -INSERT INTO {{$entities['name']}}({!! implode(', ', $entity['fields']) !!}, created_at, updated_at) VALUES +INSERT INTO "{{$entities['name']}}"({!! implode(', ', $entity['fields']) !!}, created_at, updated_at) VALUES ({!! implode(', ', $entity['values']) !!}, '2016-10-20 11:05:00', '2016-10-20 11:05:00'); @endforeach diff --git a/stubs/dumps/pgsql.blade.php b/stubs/dumps/pgsql.blade.php index 8a7ed74..cd06d2d 100644 --- a/stubs/dumps/pgsql.blade.php +++ b/stubs/dumps/pgsql.blade.php @@ -1,6 +1,6 @@ @foreach($inserts as $entities) @foreach($entities['items'] as $entity) -INSERT INTO {{$entities['name']}}({!! implode(', ', $entity['fields']) !!}, created_at, updated_at) VALUES +INSERT INTO "{{$entities['name']}}"({!! implode(', ', $entity['fields']) !!}, created_at, updated_at) VALUES ({!! implode(', ', $entity['values']) !!}, '2016-10-20 11:05:00', '2016-10-20 11:05:00'); @endforeach diff --git a/stubs/factory.blade.php b/stubs/factory.blade.php index 2511cd6..bedba55 100644 --- a/stubs/factory.blade.php +++ b/stubs/factory.blade.php @@ -17,4 +17,4 @@ public function definition(): array @endforeach ]; } -} \ No newline at end of file +} diff --git a/stubs/legacy_empty_factory.blade.php b/stubs/legacy_empty_factory.blade.php deleted file mode 100644 index af39da4..0000000 --- a/stubs/legacy_empty_factory.blade.php +++ /dev/null @@ -1,30 +0,0 @@ -use Illuminate\Support\Str; - -/* -|-------------------------------------------------------------------------- -| Model Factories -|-------------------------------------------------------------------------- -| -| Here you may define all of your model factories. Model factories give -| you a convenient way to create models for testing and seeding your -| database. Just tell the factory how a default model should look. -| -*/ - -/** @var \Illuminate\Database\Eloquent\Factory $factory */ -$factory->define({{$modelsNamespace}}\User::class, function (Faker\Generator $faker) { - static $password; - - return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, - 'password' => $password ?: $password = bcrypt('secret'), - 'remember_token' => Str::random(10), - ]; -}); - -$factory->define({{$modelsNamespace}}\Role::class, function () { - return [ - 'name' => 'user' - ]; -}); diff --git a/stubs/legacy_factory.blade.php b/stubs/legacy_factory.blade.php deleted file mode 100644 index 7756e2e..0000000 --- a/stubs/legacy_factory.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -$factory->define({{$modelsNamespace}}\{{$entity}}::class, function (Faker\Generator $faker) { - return [ -@foreach($fields as $field) - '{{$field['name']}}' => {!! \RonasIT\Support\Generators\FactoryGenerator::getFactoryFieldsContent($field) !!}, -@endforeach - ]; -}); \ No newline at end of file diff --git a/stubs/legacy_seeder.blade.php b/stubs/legacy_seeder.blade.php deleted file mode 100644 index 50a5c6d..0000000 --- a/stubs/legacy_seeder.blade.php +++ /dev/null @@ -1,44 +0,0 @@ -namespace {{$namespace}}; - -use Illuminate\Database\Seeder; - -class {{$entity}}Seeder extends Seeder -{ - public function run() - { -@if (empty($relations['belongsTo'])) -@if(empty(array_filter($relations))) - factory(\{{$modelsNamespace}}\{{$entity}}::class)->create([]); -@else - ${{strtolower($entity)}} = factory(\{{$modelsNamespace}}\{{$entity}}::class)->create([]); -@endif -@else -@if(empty(array_filter($relations))) - ${{strtolower($entity)}} = factory(\{{$modelsNamespace}}\{{$entity}}::class)->create([ -@else - factory(\{{$modelsNamespace}}\{{$entity}}::class)->create([ -@endif -@foreach($relations['belongsTo'] as $relation) - '{{strtolower($relation)}}_id' => factory(\{{$modelsNamespace}}\{{$relation}}::class)->create()->id, -@endforeach - ]); -@endif - -@foreach($relations['hasOne'] as $relation) - factory(\{{$modelsNamespace}}\{{$relation}}::class)->create([ - '{{strtolower($entity)}}_id' => ${{strtolower($entity)}}->id, - ]); - -@endforeach -@foreach($relations['hasMany'] as $relation) - factory(\{{$modelsNamespace}}\{{$relation}}::class, 10)->create()->each([ - '{{strtolower($entity)}}_id' => ${{strtolower($entity)}}->id, - ]); - -@endforeach -@foreach($relations['belongsToMany'] as $relation) - $list = factory(\{{$modelsNamespace}}\{{$relation}}::class, 10)->create()->pluck('id'); - ${{strtolower($entity)}}->{{strtolower($relation)}}s()->sync($list); -@endforeach - } -} \ No newline at end of file diff --git a/stubs/migration.blade.php b/stubs/migration.blade.php index 50aa88b..747e72b 100644 --- a/stubs/migration.blade.php +++ b/stubs/migration.blade.php @@ -3,15 +3,11 @@ use Illuminate\Support\Facades\Schema; use RonasIT\Support\Traits\MigrationTrait; -@if (version_compare(app()->version(), '9', '>=')) return new class extends Migration -@else -class {{$class}}CreateTable extends Migration -@endif { use MigrationTrait; - public function up() + public function up(): void { @if(!empty($relations['belongsToMany']) || !empty($relations['belongsTo']) || !empty($relations['hasOne']) || !empty($relations['hasMany'])) $this->createTable(); @@ -42,7 +38,7 @@ public function up() @endforeach } - public function down() + public function down(): void { @foreach($relations['hasOne'] as $relation) $this->dropForeignKey('{{$relation}}', '{{$entity}}', true); @@ -60,7 +56,7 @@ public function down() } @if(!empty($relations['belongsToMany']) || !empty($relations['belongsTo']) || !empty($relations['hasOne']) || !empty($relations['hasMany'])) - public function createTable() + public function createTable(): void { Schema::create('{{\Illuminate\Support\Str::plural(\Illuminate\Support\Str::snake($entity))}}', function (Blueprint $table) { $table->increments('id'); @@ -71,4 +67,4 @@ public function createTable() }); } @endif -}; \ No newline at end of file +}; diff --git a/stubs/model.blade.php b/stubs/model.blade.php index 682f363..03d1b33 100644 --- a/stubs/model.blade.php +++ b/stubs/model.blade.php @@ -1,18 +1,12 @@ namespace {{$namespace}}; -@if(version_compare(app()->version(), '8', '>=')) use Illuminate\Database\Eloquent\Factories\HasFactory; -@endif use Illuminate\Database\Eloquent\Model; use RonasIT\Support\Traits\ModelTrait; class {{$entity}} extends Model { -@if(version_compare(app()->version(), '8', '>=')) - use ModelTrait, HasFactory; -@else - use ModelTrait; -@endif + use HasFactory, ModelTrait; protected $fillable = [ @foreach($fields as $field) diff --git a/stubs/nova_test.blade.php b/stubs/nova_test.blade.php index ca2da6b..e89cc04 100644 --- a/stubs/nova_test.blade.php +++ b/stubs/nova_test.blade.php @@ -1,261 +1,181 @@ -@php($shouldUseStatus = version_compare(app()->version(), '7', '<')) namespace App\Tests; use App\Models\{{$entity}}; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Tests\ModelTestState; -use RonasIT\Support\Traits\AuthTestTrait; -@if($shouldUseStatus) -use Symfony\Component\HttpFoundation\Response; -@endif +use RonasIT\Support\Traits\NovaTestTrait; class Nova{{$entity}}Test extends TestCase { - use AuthTestTrait; + use NovaTestTrait; - protected static $user; - protected static ${{$lower_entity}}State; + protected static User $user; + protected static ModelTestState ${{$dromedary_entity}}State; public function setUp(): void { parent::setUp(); - self::$user = 1; - self::${{$lower_entity}}State ??= new ModelTestState({{$entity}}::class); + self::$user ??= User::find(1); + self::${{$dromedary_entity}}State ??= new ModelTestState({{$entity}}::class); $this->skipDocumentationCollecting(); } public function testCreate(): void { - $data = $this->getJsonFixture('create_{{$lower_entity}}_request.json'); + $data = $this->getJsonFixture('create_{{$snake_entity}}_request.json'); - $response = $this->actingViaSession(self::$user)->json('post', '/nova-api/{{$url_path}}', $data); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall({{$entity}}::class, $data); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_CREATED); -@else $response->assertCreated(); -@endif - $this->assertEqualsFixture('create_{{$lower_entity}}_response.json', $response->json()); + $this->assertEqualsFixture('create_{{$snake_entity}}_response.json', $response->json()); - // TODO: Need to remove after first successful start - self::${{$lower_entity}}State->assertChangesEqualsFixture('create_{{$lower_entities}}_state.json', true); + // TODO: Need to remove last argument after first successful start + self::${{$dromedary_entity}}State->assertChangesEqualsFixture('create_{{$lower_entities}}_state.json', true); } public function testCreateNoAuth(): void { - $data = $this->getJsonFixture('create_{{$lower_entity}}_request.json'); + $response = $this->novaCreateResourceAPICall({{$entity}}::class); - $response = $this->json('post', '/nova-api/{{$url_path}}', $data); - -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif - self::${{$lower_entity}}State->assertNotChanged(); -} + self::${{$dromedary_entity}}State->assertNotChanged(); + } public function testCreateValidationError(): void { - $response = $this->actingViaSession(self::$user)->json('post', '/nova-api/{{$url_path}}'); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall({{$entity}}::class); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); -@else $response->assertUnprocessable(); -@endif - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('create_validation_response.json', $response->json(), true); - self::${{$lower_entity}}State->assertNotChanged(); + self::${{$dromedary_entity}}State->assertNotChanged(); } public function testUpdate(): void { - $data = $this->getJsonFixture('update_{{$lower_entity}}_request.json'); + $data = $this->getJsonFixture('update_{{$snake_entity}}_request.json'); - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/{{$url_path}}/1', $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall({{$entity}}::class, 1, $data); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NO_CONTENT); -@else $response->assertNoContent(); -@endif - // TODO: Need to remove after first successful start - self::${{$lower_entity}}State->assertChangesEqualsFixture('update_{{$lower_entities}}_state.json', true); + // TODO: Need to remove last argument after first successful start + self::${{$dromedary_entity}}State->assertChangesEqualsFixture('update_{{$lower_entities}}_state.json', true); } public function testUpdateNotExists(): void { - $data = $this->getJsonFixture('update_{{$lower_entity}}_request.json'); + $data = $this->getJsonFixture('update_{{$snake_entity}}_request.json'); - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/{{$url_path}}/0', $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall({{$entity}}::class, 0, $data); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif } public function testUpdateNoAuth(): void { - $data = $this->getJsonFixture('update_{{$lower_entity}}_request.json'); + $response = $this->novaUpdateResourceAPICall({{$entity}}::class, 1); - $response = $this->json('put', '/nova-api/{{$url_path}}/1', $data); - -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif } public function testUpdateValidationError(): void { - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/{{$url_path}}/4'); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall({{$entity}}::class, 4); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); -@else $response->assertUnprocessable(); -@endif - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('update_validation_response.json', $response->json(), true); } public function testGetUpdatableFields(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}/1/update-fields'); + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall({{$entity}}::class, 1); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('get_updatable_fields_response.json', $response->json(), true); } public function testDelete(): void { - $response = $this->actingViaSession(self::$user)->json('delete', '/nova-api/{{$url_path}}', [ - 'resources' => [1, 2] - ]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall({{$entity}}::class, [1, 2]); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start - self::${{$lower_entity}}State->assertChangesEqualsFixture('delete_{{$lower_entities}}_state.json', true); + // TODO: Need to remove last argument after first successful start + self::${{$dromedary_entity}}State->assertChangesEqualsFixture('delete_{{$lower_entities}}_state.json', true); } public function testDeleteNotExists(): void { - $response = $this->actingViaSession(self::$user)->json('delete', '/nova-api/{{$url_path}}', [ - 'resources' => [0] - ]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall({{$entity}}::class, [0]); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif } public function testDeleteNoAuth(): void { - $response = $this->json('delete', '/nova-api/{{$url_path}}', [ - 'resources' => [1, 2] - ]); + $response = $this->novaDeleteResourceAPICall({{$entity}}::class, [1, 2]); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif } public function testGet(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}/1'); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall({{$entity}}::class, 1); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start - $this->assertEqualsFixture('get_{{$lower_entity}}_response.json', $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_{{$snake_entity}}_response.json', $response->json(), true); } public function testGetNotExists(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}/0'); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall({{$entity}}::class, 0); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif } public function testGetNoAuth(): void { - $response = $this->json('get', '/nova-api/{{$url_path}}/1'); + $response = $this->novaGetResourceAPICall({{$entity}}::class, 1); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif } public function testSearchUnauthorized(): void { - $response = $this->json('get', '/nova-api/{{$url_path}}', [ - 'orderBy' => 'id', - 'orderByDirection' => 'asc' - ]); - -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else + $response = $this->novaSearchResourceAPICall({{$entity}}::class); + $response->assertUnauthorized(); -@endif } public function testGetFieldsVisibleOnCreate(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}/creation-fields'); + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall({{$entity}}::class); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('get_fields_visible_on_create_response.json', $response->json(), true); } - public function getRun{{$entity}}ActionsData(): array + public static function getRun{{$entity}}ActionsData(): array { return [ @foreach($actions as $action) [ - 'action' => '{{$action['url']}}', + 'action' => {{$action['className']}}::class, 'request' => [ 'resources' => '1,2', ], @@ -265,87 +185,64 @@ public function getRun{{$entity}}ActionsData(): array ]; } - /** - * @dataProvider getRun{{$entity}}ActionsData - */ - public function testRun{{$entity}}Actions($action, $request, ${{$lower_entities}}StateFixture): void + #[DataProvider('getRun{{$entity}}ActionsData')] + public function testRun{{$entity}}Actions($action, $request, $state): void { - $request['action'] = $action; - $response = $this->actingViaSession(self::$user)->json('post', "/nova-api/{{$url_path}}/action", $request); + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall({{$entity}}::class, $action, $request); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif $this->assertEmpty($response->getContent()); - // TODO: Need to remove after first successful start - self::${{$lower_entity}}State->assertChangesEqualsFixture(${{$lower_entities}}StateFixture, true); + // TODO: Need to remove last argument after first successful start + self::${{$dromedary_entity}}State->assertChangesEqualsFixture($state, true); } - public function get{{$entity}}ActionsData(): array + public static function get{{$entity}}ActionsData(): array { return [ @foreach($actions as $action) [ - 'request' => [ - 'resources' => '1,2', - ], - 'response_fixture' => 'get_{{$lower_entity}}_actions_{{$action['fixture']}}.json', + 'resources' => [1, 2], + 'fixture' => 'get_{{$snake_entity}}_actions_{{$action['fixture']}}.json', ], @endforeach ]; } - /** - * @dataProvider get{{$entity}}ActionsData - */ - public function testGet{{$entity}}Actions(array $request, string $responseFixture): void + #[DataProvider('get{{$entity}}ActionsData')] + public function testGet{{$entity}}Actions(array $resources, string $fixture): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}/actions', $request); + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall({{$entity}}::class, $resources); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start - $this->assertEqualsFixture($responseFixture, $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); } - public function get{{$entity}}FiltersData(): array + public static function get{{$entity}}FiltersData(): array { return [ @foreach($filters as $filter) [ - 'filters' => [ - '{{$filter['name']}}' => 'search term', + 'request' => [ + '{{$filter['name']}}' => $this->novaSearchParams(['search term']), ], - 'response_fixture' => 'filter_{{$lower_entity}}_by_{{$filter['fixture_name']}}.json', + 'fixture' => 'filter_{{$snake_entity}}_by_{{$filter['fixture_name']}}.json', ], @endforeach ]; } - /** - * @dataProvider get{{$entity}}FiltersData - */ - public function testFilter{{$entity}}(array $filters, string $responseFixture): void + #[DataProvider('get{{$entity}}FiltersData')] + public function testFilter{{$entity}}(array $request, string $fixture): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/{{$url_path}}', [ - 'filters' => base64_encode(json_encode($filters)) - ]); + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall({{$entity}}::class, $request); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif - // TODO: Need to remove after first successful start - $this->assertEqualsFixture($responseFixture, $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); } } diff --git a/stubs/request.blade.php b/stubs/request.blade.php index 91c3a4c..603354f 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -24,20 +24,10 @@ public function rules(): array } @endif @if($needToValidate) -@if($method !== $requestsGenerator::DELETE_METHOD) - -@endif -@if(version_compare(app()->version(), '5.6', '<')) - public function validate() - { - parent::validate(); - -@else - public function validateResolved() + public function validateResolved(): void { parent::validateResolved(); -@endif $service = app({{$entity}}Service::class); if (!$service->exists($this->route('id'))) { diff --git a/stubs/resource.blade.php b/stubs/resource.blade.php index 88dac15..564d95b 100644 --- a/stubs/resource.blade.php +++ b/stubs/resource.blade.php @@ -1,12 +1,18 @@ -namespace {{$namespace}}; +namespace {{$namespace}}\{{$entity}}; use Illuminate\Http\Resources\Json\JsonResource; +use {{$model_namespace}}\{{$entity}}; +/** + * @property {{$entity}} $resource + */ class {{$entity}}Resource extends JsonResource { + public static $wrap = null; + //TODO implement custom serialization logic or remove method redefining public function toArray($request): array { return parent::toArray($request); } -} \ No newline at end of file +} diff --git a/stubs/routes.blade.php b/stubs/routes.blade.php index db40743..8adf963 100644 --- a/stubs/routes.blade.php +++ b/stubs/routes.blade.php @@ -1,13 +1,15 @@ +Route::controller({{$entity}}Controller::class)->group(function () { @if (in_array('C', $options)) -Route::post('{{$entities}}', [{{$entity}}Controller::class, 'create']); + Route::post('{{$entities}}', 'create'); @endif @if (in_array('U', $options)) -Route::put('{{$entities}}/{id}', [{{$entity}}Controller::class, 'update']); + Route::put('{{$entities}}/{id}', 'update'); @endif @if (in_array('D', $options)) -Route::delete('{{$entities}}/{id}', [{{$entity}}Controller::class, 'delete']); + Route::delete('{{$entities}}/{id}', 'delete'); @endif @if (in_array('R', $options)) -Route::get('{{$entities}}/{id}', [{{$entity}}Controller::class, 'get']); -Route::get('{{$entities}}', [{{$entity}}Controller::class, 'search']); -@endif \ No newline at end of file + Route::get('{{$entities}}/{id}', 'get'); + Route::get('{{$entities}}', 'search'); +@endif +}); \ No newline at end of file diff --git a/stubs/service.blade.php b/stubs/service.blade.php index 010b3f7..b4557b7 100644 --- a/stubs/service.blade.php +++ b/stubs/service.blade.php @@ -3,6 +3,7 @@ use {{$repositoriesNamespace}}\{{$entity}}Repository; use Illuminate\Support\Arr; use RonasIT\Support\Services\EntityService; +use Illuminate\Pagination\LengthAwarePaginator; {{-- Laravel inserts two spaces between @property and type, so we are forced to use hack here to preserve one space @@ -23,7 +24,7 @@ public function __construct() $this->setRepository({{$entity}}Repository::class); } - public function search($filters) + public function search(array $filters = []): LengthAwarePaginator { return $this ->with(Arr::get($filters, 'with', [])) diff --git a/stubs/test.blade.php b/stubs/test.blade.php index ab3c999..068cc57 100644 --- a/stubs/test.blade.php +++ b/stubs/test.blade.php @@ -1,25 +1,36 @@ -@php($shouldUseStatus = version_compare(app()->version(), '7', '<')) namespace App\Tests; +@if ($hasModificationEndpoints && (!$withAuth || $entity !== 'User')) +use RonasIT\Support\Tests\ModelTestState; +use {{$modelsNamespace}}\{{$entity}}; +@endif @if ($withAuth) use {{$modelsNamespace}}\User; @endif -@if($shouldUseStatus) -use Symfony\Component\HttpFoundation\Response; +@if (in_array('R', $options)) +use PHPUnit\Framework\Attributes\DataProvider; @endif class {{$entity}}Test extends TestCase { @if ($withAuth) - protected $user; + protected static User $user; + +@endif +@if ($hasModificationEndpoints) + protected static ModelTestState ${{\Illuminate\Support\Str::camel($entity)}}State; @endif - public function setUp() : void + public function setUp(): void { parent::setUp(); @if ($withAuth) - $this->user = User::find(1); + self::$user ??= User::find(1); +@endif +@if ($hasModificationEndpoints) + + self::${{\Illuminate\Support\Str::camel($entity)}}State ??= new ModelTestState({{$entity}}::class); @endif } @@ -31,17 +42,16 @@ public function testCreate() @if (!$withAuth) $response = $this->json('post', '/{{$entities}}', $data); @else - $response = $this->actingAs($this->user)->json('post', '/{{$entities}}', $data); + $response = $this->actingAs(self::$user)->json('post', '/{{$entities}}', $data); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_CREATED); -@else $response->assertCreated(); -@endif - $this->assertEqualsFixture('create_{{\Illuminate\Support\Str::snake($entity)}}_response.json', $response->json()); - $this->assertDatabaseHas('{{$databaseTableName}}', $this->getJsonFixture('create_{{\Illuminate\Support\Str::snake($entity)}}_response.json')); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('create_{{\Illuminate\Support\Str::snake($entity)}}_response.json', $response->json(), true); + + // TODO: Need to remove last argument after first successful start + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertChangesEqualsFixture('create_{{\Illuminate\Support\Str::snake($entity)}}_state.json', true); } @if ($withAuth) @@ -51,11 +61,7 @@ public function testCreateNoAuth() $response = $this->json('post', '/{{$entities}}', $data); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif } @endif @@ -68,16 +74,13 @@ public function testUpdate() @if (!$withAuth) $response = $this->json('put', '/{{$entities}}/1', $data); @else - $response = $this->actingAs($this->user)->json('put', '/{{$entities}}/1', $data); + $response = $this->actingAs(self::$user)->json('put', '/{{$entities}}/1', $data); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NO_CONTENT); -@else $response->assertNoContent(); -@endif - $this->assertDatabaseHas('{{$databaseTableName}}', $data); + // TODO: Need to remove last argument after first successful start + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertChangesEqualsFixture('update_{{\Illuminate\Support\Str::snake($entity)}}_state.json', true); } public function testUpdateNotExists() @@ -87,14 +90,12 @@ public function testUpdateNotExists() @if (!$withAuth) $response = $this->json('put', '/{{$entities}}/0', $data); @else - $response = $this->actingAs($this->user)->json('put', '/{{$entities}}/0', $data); + $response = $this->actingAs(self::$user)->json('put', '/{{$entities}}/0', $data); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif + + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertNotChanged(); } @if ($withAuth) @@ -104,11 +105,9 @@ public function testUpdateNoAuth() $response = $this->json('put', '/{{$entities}}/1', $data); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif + + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertNotChanged(); } @endif @@ -119,17 +118,13 @@ public function testDelete() @if (!$withAuth) $response = $this->json('delete', '/{{$entities}}/1'); @else - $response = $this->actingAs($this->user)->json('delete', '/{{$entities}}/1'); + $response = $this->actingAs(self::$user)->json('delete', '/{{$entities}}/1'); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NO_CONTENT); -@else $response->assertNoContent(); -@endif - $this->assertDatabaseMissing('{{$databaseTableName}}', [ - 'id' => 1 - ]); + + // TODO: Need to remove last argument after first successful start + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertChangesEqualsFixture('delete_{{\Illuminate\Support\Str::snake($entity)}}_state.json', true); } public function testDeleteNotExists() @@ -137,18 +132,12 @@ public function testDeleteNotExists() @if (!$withAuth) $response = $this->json('delete', '/{{$entities}}/0'); @else - $response = $this->actingAs($this->user)->json('delete', '/{{$entities}}/0'); + $response = $this->actingAs(self::$user)->json('delete', '/{{$entities}}/0'); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif - $this->assertDatabaseMissing('{{$databaseTableName}}', [ - 'id' => 0 - ]); + self::${{\Illuminate\Support\Str::camel($entity)}}State->assertNotChanged(); } @if ($withAuth) @@ -156,11 +145,7 @@ public function testDeleteNoAuth() { $response = $this->json('delete', '/{{$entities}}/1'); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_UNAUTHORIZED); -@else $response->assertUnauthorized(); -@endif } @endif @@ -171,14 +156,10 @@ public function testGet() @if (!$withAuth) $response = $this->json('get', '/{{$entities}}/1'); @else - $response = $this->actingAs($this->user)->json('get', '/{{$entities}}/1'); + $response = $this->actingAs(self::$user)->json('get', '/{{$entities}}/1'); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif // TODO: Need to remove after first successful start $this->exportJson('get_{{\Illuminate\Support\Str::snake($entity)}}.json', $response->json()); @@ -191,48 +172,44 @@ public function testGetNotExists() @if (!$withAuth) $response = $this->json('get', '/{{$entities}}/0'); @else - $response = $this->actingAs($this->user)->json('get', '/{{$entities}}/0'); + $response = $this->actingAs(self::$user)->json('get', '/{{$entities}}/0'); @endif -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_NOT_FOUND); -@else $response->assertNotFound(); -@endif } +@if ($withAuth) - public function getSearchFilters() + public function testGetNoAuth() + { + $response = $this->json('get', '/{{$entities}}/1'); + + $response->assertUnauthorized(); + } +@endif + + public static function getSearchFilters(): array { return [ [ 'filter' => ['all' => 1], - 'result' => 'search_all.json' + 'fixture' => 'search_all.json', ], [ 'filter' => [ 'page' => 2, - 'per_page' => 2 + 'per_page' => 2, ], - 'result' => 'search_by_page_per_page.json' + 'fixture' => 'search_by_page_per_page.json', ], ]; } - /** - * @dataProvider getSearchFilters - * - * @param array $filter - * @param string $fixture - */ - public function testSearch($filter, $fixture) + #[DataProvider('getSearchFilters')] + public function testSearch(array $filter, string $fixture) { - $response = $this->json('get', '/{{$entities}}', $filter); + $response = $this->actingAs(self::$user)->json('get', '/{{$entities}}', $filter); -@if($shouldUseStatus) - $response->assertStatus(Response::HTTP_OK); -@else $response->assertOk(); -@endif // TODO: Need to remove after first successful start $this->exportJson($fixture, $response->json()); @@ -240,5 +217,13 @@ public function testSearch($filter, $fixture) $this->assertEqualsFixture($fixture, $response->json()); } +@if ($withAuth) + public function testSearchNoAuth() + { + $response = $this->json('get', '/{{$entities}}'); + + $response->assertUnauthorized(); + } +@endif @endif } diff --git a/tests/ControllerGeneratorTest.php b/tests/ControllerGeneratorTest.php index cdbe876..ac9f248 100644 --- a/tests/ControllerGeneratorTest.php +++ b/tests/ControllerGeneratorTest.php @@ -3,23 +3,36 @@ namespace RonasIT\Support\Tests; use Illuminate\Contracts\Filesystem\FileNotFoundException; +use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\View; use RonasIT\Support\Events\SuccessCreateMessage; +use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Exceptions\ClassAlreadyExistsException; use RonasIT\Support\Exceptions\ClassNotExistsException; use RonasIT\Support\Generators\ControllerGenerator; -use RonasIT\Support\Tests\Support\Controller\ControllerMockTrait; +use RonasIT\Support\Tests\Support\ControllerGeneratorTest\ControllerGeneratorMockTrait; class ControllerGeneratorTest extends TestCase { - use ControllerMockTrait; + use ControllerGeneratorMockTrait; + + public function setUp(): void + { + parent::setUp(); + + Event::fake(); + } public function testControllerAlreadyExists() { - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ClassAlreadyExistsException::class); - $this->expectErrorMessage('Cannot create PostController cause PostController already exists. Remove PostController.'); + $this->mockClass(ControllerGenerator::class, [ + $this->classExistsMethodCall(['controllers', 'PostController']), + ]); - $this->mockControllerGeneratorForExistingController(); + $this->assertExceptionThrew( + className: ClassAlreadyExistsException::class, + message: 'Cannot create PostController cause PostController already exists. Remove PostController.', + ); app(ControllerGenerator::class) ->setModel('Post') @@ -28,11 +41,15 @@ public function testControllerAlreadyExists() public function testModelServiceNotExists() { - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage('Cannot create PostService cause PostService does not exists. Create a PostService by himself.'); + $this->mockClass(ControllerGenerator::class, [ + $this->classExistsMethodCall(['controllers', 'PostController'], false), + $this->classExistsMethodCall(['services', 'PostService'], false), + ]); - $this->mockControllerGeneratorForNotExistingService(); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: 'Cannot create PostController cause PostService does not exists. Create a PostService by himself.', + ); app(ControllerGenerator::class) ->setModel('Post') @@ -41,12 +58,12 @@ public function testModelServiceNotExists() public function testRouteFileNotExists() { - $this->expectException(FileNotFoundException::class); - $this->expectErrorMessage("Not found file with routes. Create a routes file on path: 'vfs://root/routes/api.php'"); - $this->mockFilesystemWithoutRoutesFile(); - $this->mockConfigurations(); - $this->mockViewsNamespace(); + + $this->assertExceptionThrew( + className: FileNotFoundException::class, + message: "Not found file with routes. Create a routes file on path: 'vfs://root/routes/api.php'", + ); app(ControllerGenerator::class) ->setModel('Post') @@ -54,44 +71,90 @@ public function testRouteFileNotExists() ->generate(); } - public function testCreate() + public function testControllerStubNotExist() { - $this->expectsEvents(SuccessCreateMessage::class); - $this->mockFilesystem(); - $this->mockConfigurations(); - $this->mockViewsNamespace(); + + View::shouldReceive('exists') + ->with('entity-generator::controller') + ->once() + ->andReturnFalse(); app(ControllerGenerator::class) ->setModel('Post') ->setCrudOptions(['C', 'R', 'U', 'D']) ->generate(); - $this->rollbackToDefaultBasePath(); + $this->assertGeneratedFileEquals('empty_api.php', 'routes/api.php'); + $this->assertFileDoesNotExist('app/Http/Controllers/PostController.php'); - $this->assertGeneratedFileEquals('created_controller.php', 'app/Controllers/PostController.php'); - $this->assertGeneratedFileEquals('api.php', 'routes/api.php'); + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of controller has been skipped cause the view entity-generator::controller from the config entity-generator.stubs.controller is not exists. Please check that config has the correct view name value.', + ); + } + + public function testRoutesStubNotExist() + { + $this->mockFilesystem(); + + config(['entity-generator.stubs.routes' => 'incorrect_stub']); + + app(ControllerGenerator::class) + ->setModel('Post') + ->setCrudOptions(['C', 'R', 'U', 'D']) + ->generate(); - $this->removeRecursivelyGeneratedFolders(getcwd() . '/vfs:'); - $this->removeRecursivelyGeneratedFolders(getcwd() . '/tests/vfs:'); + $this->assertGeneratedFileEquals('created_controller.php', 'app/Http/Controllers/PostController.php'); + $this->assertGeneratedFileEquals('empty_api.php', 'routes/api.php'); + + $this->assertEventPushedChain([ + WarningEvent::class => ['Generation of routes has been skipped cause the view incorrect_stub from the config entity-generator.stubs.routes is not exists. Please check that config has the correct view name value.'], + SuccessCreateMessage::class => ['Created a new Controller: PostController'], + ]); } - protected function removeRecursivelyGeneratedFolders(string $path): void + public function testUseRoutesStubNotExist() { - $dirs = glob($path . '/*'); + $this->mockFilesystem(); + + config(['entity-generator.stubs.use_routes' => 'incorrect_stub']); + + app(ControllerGenerator::class) + ->setModel('Post') + ->setCrudOptions(['C', 'R', 'U', 'D']) + ->generate(); + + $this->assertGeneratedFileEquals('created_controller.php', 'app/Http/Controllers/PostController.php'); + $this->assertGeneratedFileEquals('empty_api.php', 'routes/api.php'); - foreach($dirs as $dir) { - $scan = glob(rtrim($dir, '/').'/*'); + $this->assertEventPushedChain([ + WarningEvent::class => ['Generation of use routes has been skipped cause the view incorrect_stub from the config entity-generator.stubs.use_routes is not exists. Please check that config has the correct view name value.'], + SuccessCreateMessage::class => ['Created a new Controller: PostController'], + ]); + } - foreach($scan as $nestedDirPath) { - $this->removeRecursivelyGeneratedFolders($nestedDirPath); - } + public function testSuccess() + { + $this->mockFilesystem(); - rmdir($dir); - } + app(ControllerGenerator::class) + ->setModel('Post') + ->setCrudOptions(['C', 'R', 'U', 'D']) + ->generate(); + + $this->assertGeneratedFileEquals('created_controller.php', 'app/Http/Controllers/PostController.php'); + $this->assertGeneratedFileEquals('api.php', 'routes/api.php'); - if (file_exists($path)) { - rmdir($path); - } + $this->assertEventPushedChain([ + SuccessCreateMessage::class => [ + "Created a new Route: Route::post('posts', 'create');", + "Created a new Route: Route::put('posts/{id}', 'update');", + "Created a new Route: Route::delete('posts/{id}', 'delete');", + "Created a new Route: Route::get('posts/{id}', 'get');", + "Created a new Route: Route::get('posts', 'search');", + 'Created a new Controller: PostController', + ], + ]); } } diff --git a/tests/FactoryGeneratorTest.php b/tests/FactoryGeneratorTest.php index 60cd1d4..1bd4d67 100644 --- a/tests/FactoryGeneratorTest.php +++ b/tests/FactoryGeneratorTest.php @@ -2,12 +2,11 @@ namespace RonasIT\Support\Tests; +use Illuminate\Support\Facades\Event; use Illuminate\View\ViewException; use RonasIT\Support\Events\SuccessCreateMessage; use RonasIT\Support\Exceptions\ClassAlreadyExistsException; use RonasIT\Support\Exceptions\ClassNotExistsException; -use RonasIT\Support\Exceptions\ModelFactoryNotFound; -use RonasIT\Support\Exceptions\ModelFactoryNotFoundedException; use RonasIT\Support\Generators\FactoryGenerator; use RonasIT\Support\Tests\Support\Factory\FactoryMockTrait; @@ -15,164 +14,57 @@ class FactoryGeneratorTest extends TestCase { use FactoryMockTrait; - public function testModelNotExists() + public function setUp(): void { - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage("Cannot create PostFactory cause Post Model does not exists. " - . "Create a Post Model by itself or run command 'php artisan make:entity Post --only-model'."); - - $this->getFactoryGeneratorMockForMissingModel(); + parent::setUp(); - app(FactoryGenerator::class) - ->setModel('Post') - ->generate(); + Event::fake(); } - public function testFactoryClassExists() + public function testModelNotExists() { - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ClassAlreadyExistsException::class); - $this->expectErrorMessage("Cannot create PostFactory cause PostFactory already exists. Remove PostFactory."); - - $this->getFactoryGeneratorMockForExistingFactory(); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: "Cannot create PostFactory cause Post Model does not exists. " + . "Create a Post Model by itself or run command 'php artisan make:entity Post --only-model'.", + ); app(FactoryGenerator::class) ->setModel('Post') ->generate(); - } - - public function testCannotGetContentForGenericFactory() - { - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage("Cannot get Post Model class content cause Post Model does not exists. " - . "Create a Post Model by itself or run command 'php artisan make:entity Post --only-model'."); - - $funMock = $this->getMockForFileExists(); - - $this->mockConfigurations(); - $this->mockFilesystem(); - $this->mockFactoryGenerator(); - - try { - app(FactoryGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $funMock->disable(); - } - } - - public function testRelatedModelWithoutFactory() - { - $mock = $this->getMockForFileExists(); - - $this->getFiredEvents([SuccessCreateMessage::class]); - $this->expectException(ModelFactoryNotFoundedException::class); - $this->expectErrorMessage("Not found User factory for User model in 'database/factories/ModelFactory.php " - . "Please declare a factory for User model on 'database/factories/ModelFactory.php' path and run your command with option '--only-tests'."); - - $this->mockConfigurations(); - $this->mockFilesystemForNonExistingRelatedModelFactory(); - $this->mockFactoryGeneratorForMissingRelatedModelFactory(); - - try { - app(FactoryGenerator::class) - ->setModel('Post') - ->setFields([ - 'integer-required' => ['author_id'], - 'string' => ['title'] - ]) - ->generate(); - } finally { - $mock->disable(); - } - } - - public function testRevertedModelFactoryNotExists() - { - $this->expectException(ModelFactoryNotFound::class); - $this->expectErrorMessage("Model factory for model comment not found. " - . "Please create it and after thar you can run this command with flag '--only-tests'."); - - $mock = $this->getMockForFileExists(); - $this->mockConfigurations(); - $this->mockViewsNamespace(); - $this->mockGeneratorForMissingRevertedRelationModelFactory(); - $this->mockFilesystemForMissingRevertedRelationModelFactory(); - - try { - app(FactoryGenerator::class) - ->setRelations([ - 'hasOne' => ['comment'], - 'hasMany' => ['comment'], - 'belongsTo' => ['user'] - ]) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } + Event::assertNothingDispatched(); } - public function testAlreadyExistsFactory() - { - $this->expectsEvents([SuccessCreateMessage::class]); - - $this->mockConfigurations(); - $this->mockFactoryGeneratorForAlreadyExistsFactory(); - - $mock = $this->getMockForFileExists(); - - try { - app(FactoryGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } - } - - public function testCreateGenericFactory() + public function testFactoryClassExists() { - $this->expectsEvents([SuccessCreateMessage::class]); + $this->assertExceptionThrew( + className: ClassAlreadyExistsException::class, + message: "Cannot create PostFactory cause PostFactory already exists. Remove PostFactory.", + ); - $this->mockConfigurations(); - $this->mockViewsNamespace(); - $this->mockFilesystemForGenericStyleCreation(); - $this->mockFactoryGeneratorForGenericTypeCreation(); + $this->mockFactoryGenerator( + $this->classExistsMethodCall(['models', 'Post']), + $this->classExistsMethodCall(['factories', 'PostFactory']), + ); app(FactoryGenerator::class) - ->setFields([ - 'integer-required' => ['author_id'], - 'string' => ['title', 'iban', 'something'], - 'json' => ['json_text'], - ]) - ->setRelations([ - 'hasOne' => ['User'], - 'hasMany' => [], - 'belongsTo' => ['user'] - ]) ->setModel('Post') ->generate(); - $this->rollbackToDefaultBasePath(); - - $this->assertGeneratedFileEquals('model_factory.php', '/database/factories/ModelFactory.php'); + Event::assertNothingDispatched(); } public function testProcessUnknownFieldType() { $this->mockConfigurations(); - $this->mockViewsNamespace(); - $this->mockFilesystemForGenericStyleCreation(); - $this->mockFactoryGeneratorForGenericTypeCreation(); + $this->mockFilesystem(); - $this->expectException(ViewException::class); - $this->expectErrorMessage("Cannot generate fake data for unsupported another_type field type. " - . "Supported custom field types are json"); + $this->assertExceptionThrew( + className: ViewException::class, + message: "Cannot generate fake data for unsupported another_type field type. " + . "Supported custom field types are json", + ); app(FactoryGenerator::class) ->setFields([ @@ -181,20 +73,16 @@ public function testProcessUnknownFieldType() ->setRelations([ 'hasOne' => [], 'hasMany' => [], - 'belongsTo' => [] + 'belongsTo' => [], ]) ->setModel('Post') ->generate(); } - public function testCreateClassStyleFactory() + public function testCreateSuccess() { - $this->expectsEvents([SuccessCreateMessage::class]); - - $this->mockConfigurationsForClassStyleFactory(); - $this->mockViewsNamespace(); - $this->mockFilesystemForClassStyleFactoryCreation(); - $this->mockFactoryGeneratorForClassTypeCreation(); + $this->mockConfigurations(); + $this->mockFilesystem(); app(FactoryGenerator::class) ->setFields([ @@ -203,15 +91,18 @@ public function testCreateClassStyleFactory() 'json' => ['json_text'], ]) ->setRelations([ - 'hasOne' => ['User'], + 'hasOne' => ['user'], 'hasMany' => [], - 'belongsTo' => ['user'] + 'belongsTo' => ['user'], ]) ->setModel('Post') ->generate(); - $this->rollbackToDefaultBasePath(); - $this->assertGeneratedFileEquals('post_factory.php', '/database/factories/PostFactory.php'); + + $this->assertEventPushed( + className: SuccessCreateMessage::class, + message: 'Created a new Factory: PostFactory', + ); } } diff --git a/tests/MigrationGeneratorTest.php b/tests/MigrationGeneratorTest.php index 42990e5..ac272a4 100644 --- a/tests/MigrationGeneratorTest.php +++ b/tests/MigrationGeneratorTest.php @@ -3,7 +3,6 @@ namespace RonasIT\Support\Tests; use Illuminate\Support\Carbon; -use ReflectionClass; use RonasIT\Support\Exceptions\UnknownFieldTypeException; use RonasIT\Support\Generators\MigrationGenerator; use RonasIT\Support\Tests\Support\Migration\MigrationMockTrait; @@ -14,11 +13,12 @@ class MigrationGeneratorTest extends TestCase public function testSetUnknownFieldType() { - $this->mockViewsNamespace(); $this->setupConfigurations(); - $this->expectException(UnknownFieldTypeException::class); - $this->expectErrorMessage('Unknown field type unknown-type in MigrationGenerator.'); + $this->assertExceptionThrew( + className: UnknownFieldTypeException::class, + message: 'Unknown field type unknown-type in MigrationGenerator.', + ); app(MigrationGenerator::class) ->setModel('Post') @@ -30,7 +30,7 @@ public function testSetUnknownFieldType() ]) ->setFields([ 'integer-required' => ['media_id', 'user_id'], - 'unknown-type' => ['title'] + 'unknown-type' => ['title'], ]) ->generate(); } @@ -40,7 +40,6 @@ public function testCreateMigration() Carbon::setTestNow('2022-02-02'); $this->mockFilesystem(); - $this->mockViewsNamespace(); $this->setupConfigurations(); app(MigrationGenerator::class) @@ -55,32 +54,38 @@ public function testCreateMigration() 'integer-required' => ['media_id', 'user_id'], 'string' => ['title', 'body'], 'json' => ['meta'], - 'timestamp' => ['created_at'] + 'timestamp' => ['created_at'], ]) ->generate(); - $this->rollbackToDefaultBasePath(); - $this->assertGeneratedFileEquals('migrations.php', 'database/migrations/2022_02_02_000000_posts_create_table.php'); } - public function testMethodForMYSQLConnection() + public function testCreateMigrationMYSQL() { putenv('DB_CONNECTION=mysql'); - $generator = app(MigrationGenerator::class); - - $reflectionClass = new ReflectionClass(MigrationGenerator::class); - $jsonLineMethod = $reflectionClass->getMethod('getJsonLine'); - $requiredLineMethod = $reflectionClass->getMethod('getRequiredLine'); + Carbon::setTestNow('2022-02-02'); - $jsonLineMethod->setAccessible(true); - $requiredLineMethod->setAccessible(true); + $this->mockFilesystem(); + $this->setupConfigurations(); - $jsonLineResult = $jsonLineMethod->invoke($generator, 'meta'); - $requiredLineResult = $requiredLineMethod->invoke($generator, 'created_at', 'timestamp-required'); + app(MigrationGenerator::class) + ->setModel('Post') + ->setRelations([ + 'belongsTo' => [], + 'belongsToMany' => [], + 'hasOne' => [], + 'hasMany' => [], + ]) + ->setFields([ + 'integer-required' => ['media_id', 'user_id'], + 'string' => ['title', 'body'], + 'json' => ['meta'], + 'timestamp' => ['created_at'], + ]) + ->generate(); - $this->assertEquals("\$table->json('meta')->nullable();", $jsonLineResult); - $this->assertEquals("\$table->timestamp('created_at')->nullable();", $requiredLineResult); + $this->assertGeneratedFileEquals('migrations_mysql.php', 'database/migrations/2022_02_02_000000_posts_create_table.php'); } } diff --git a/tests/ModelGeneratorTest.php b/tests/ModelGeneratorTest.php index 76b6340..d1904e8 100644 --- a/tests/ModelGeneratorTest.php +++ b/tests/ModelGeneratorTest.php @@ -6,17 +6,20 @@ use RonasIT\Support\Exceptions\ClassNotExistsException; use RonasIT\Support\Generators\ModelGenerator; use RonasIT\Support\Tests\Support\Model\ModelMockTrait; +use RonasIT\Support\Traits\MockTrait; class ModelGeneratorTest extends TestCase { - use ModelMockTrait; + use ModelMockTrait, MockTrait; public function testModelAlreadyExists() { $this->mockGeneratorForExistingModel(); - $this->expectException(ClassAlreadyExistsException::class); - $this->expectErrorMessage('Cannot create Post Model cause Post Model already exists. Remove Post Model.'); + $this->assertExceptionThrew( + className: ClassAlreadyExistsException::class, + message: 'Cannot create Post Model cause Post Model already exists. Remove Post Model.', + ); app(ModelGenerator::class) ->setModel('Post') @@ -25,11 +28,11 @@ public function testModelAlreadyExists() public function testRelationModelMissing() { - $this->mockGeneratorForMissingRelationModel(); - - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage("Cannot create Post Model cause relation model Comment does not exist. " - . "Create the Comment Model by himself or run command 'php artisan make:entity Comment --only-model'."); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: "Cannot create Post Model cause relation model Comment does not exist. " + . "Create the Comment Model by himself or run command 'php artisan make:entity Comment --only-model'.", + ); app(ModelGenerator::class) ->setModel('Post') @@ -44,8 +47,6 @@ public function testRelationModelMissing() public function testCreateModel() { - $this->setupConfigurations(); - $this->mockViewsNamespace(); $this->mockFilesystem(); app(ModelGenerator::class) @@ -62,8 +63,6 @@ public function testCreateModel() ]) ->generate(); - $this->rollbackToDefaultBasePath(); - $this->assertGeneratedFileEquals('new_model.php', 'app/Models/Post.php'); $this->assertGeneratedFileEquals('comment_relation_model.php', 'app/Models/Comment.php'); $this->assertGeneratedFileEquals('user_relation_model.php', 'app/Models/User.php'); diff --git a/tests/NovaResourceGeneratorTest.php b/tests/NovaResourceGeneratorTest.php index 9999d59..4e7710e 100644 --- a/tests/NovaResourceGeneratorTest.php +++ b/tests/NovaResourceGeneratorTest.php @@ -2,146 +2,138 @@ namespace RonasIT\Support\Tests; -use Doctrine\DBAL\Schema\Column; -use Doctrine\DBAL\Types\DateTimeType; -use Doctrine\DBAL\Types\IntegerType; -use Doctrine\DBAL\Types\StringType; -use ReflectionClass; +use Illuminate\Support\Facades\Event; use RonasIT\Support\Events\SuccessCreateMessage; +use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Exceptions\ClassAlreadyExistsException; use RonasIT\Support\Exceptions\ClassNotExistsException; use RonasIT\Support\Generators\NovaResourceGenerator; -use RonasIT\Support\Support\DatabaseNovaField; -use RonasIT\Support\Tests\Support\NovaResource\NovaResourceMockTrait; +use RonasIT\Support\Tests\Support\NovaResourceGeneratorTest\NovaResourceGeneratorMockTrait; class NovaResourceGeneratorTest extends TestCase { - use NovaResourceMockTrait; + use NovaResourceGeneratorMockTrait; - public function testCreateWithMissingNovaPackage() + public function setUp(): void { - $this->expectsEvents([SuccessCreateMessage::class]); + parent::setUp(); + + Event::fake(); + } - $functionMock = $this->mockCheckingNonExistentNovaPackageExistence(); + public function testCreateWithMissingNovaPackage() + { + $this->mockNovaServiceProviderExists(false); app(NovaResourceGenerator::class) ->setModel('Post') ->generate(); - $functionMock->disable(); + $this->assertEventPushed( + className: SuccessCreateMessage::class, + message: 'Nova is not installed and NovaResource is skipped', + ); } public function testCreateNovaResourceWithMissingModel() { - $mock = $this->mockClassExistsFunction(); + $this->mockNovaServiceProviderExists(); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage('Cannot create Post Nova resource cause Post Model does not exists. ' - . "Create a Post Model by himself or run command 'php artisan make:entity Post --only-model'"); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: 'Cannot create Post Nova resource cause Post Model does not exists. ' + . "Create a Post Model by himself or run command 'php artisan make:entity Post --only-model'" + ); - $this->mockResourceGeneratorForNonExistingNovaResource(); - - try { - app(NovaResourceGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } + app(NovaResourceGenerator::class) + ->setModel('Post') + ->generate(); } public function testCreateNovaTestAlreadyExists() { - $mock = $this->mockClassExistsFunction(); + $this->mockNovaServiceProviderExists(); - $this->expectException(ClassAlreadyExistsException::class); - $this->expectErrorMessage("Cannot create PostResource cause PostResource already exists. Remove PostResource."); + $this->mockClass(NovaResourceGenerator::class, [ + $this->classExistsMethodCall(['models', 'Post']), + $this->classExistsMethodCall(['nova', 'PostResource']), + ]); - $this->mockResourceGeneratorForExistingNovaResource(); + $this->assertExceptionThrew( + className: ClassAlreadyExistsException::class, + message: 'Cannot create PostResource cause PostResource already exists. Remove PostResource.', + ); - try { - app(NovaResourceGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } + app(NovaResourceGenerator::class) + ->setModel('Post') + ->generate(); } - public function testCreate() + public function testNovaResourceStubNotExist() { - $this->expectsEvents(SuccessCreateMessage::class); - - $functionMock = $this->mockClassExistsFunction(); + $this->mockNovaServiceProviderExists(); $this->mockFilesystem(); - $this->setupConfigurations(); - $this->mockViewsNamespace(); + + $fields = $this->getJsonFixture('command_line_fields.json'); + + config(['entity-generator.stubs.nova_resource' => 'incorrect_stub']); app(NovaResourceGenerator::class) ->setModel('Post') - ->setFields($this->getFieldsMock()) + ->setFields($fields) ->generate(); - $this->rollbackToDefaultBasePath(); + $this->assertFileDoesNotExist('app/Nova/PostResource.php'); - $this->assertGeneratedFileEquals('created_resource.php', 'app/Nova/PostResource.php'); - - $functionMock->disable(); + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of nova resource has been skipped cause the view incorrect_stub from the config entity-generator.stubs.nova_resource is not exists. Please check that config has the correct view name value.', + ); } - public function testGetModelFieldsFromDatabase() + public function testSuccess() { - $this->mockGettingModelInstance(); + $this->mockNovaServiceProviderExists(); - $reflectionClass = new ReflectionClass(NovaResourceGenerator::class); - $method = $reflectionClass->getMethod('getFieldsForCreation'); - $method->setAccessible(true); + $this->mockFilesystem(); - $generator = (new NovaResourceGenerator) - ->setFields([]) - ->setModel('Post'); + $fields = $this->getJsonFixture('command_line_fields.json'); - $fields = $method->invokeArgs($generator, []); + app(NovaResourceGenerator::class) + ->setModel('Post') + ->setFields($fields) + ->generate(); - $this->assertEquals($this->getDatabaseAssertionData(), $fields); - } + $this->assertGeneratedFileEquals('created_resource.php', 'app/Nova/PostResource.php'); - public function getFieldsMock(): array - { - return [ - 'boolean' => ['is_published'], - 'string-required' => ['title', 'body'], - 'integer' => ['id'], - 'non_existing_type' => ['comment'], - 'json' => [], - 'timestamp-required' => [], - ]; + $this->assertEventPushed( + className: SuccessCreateMessage::class, + message: 'Created a new Nova Resource: PostResource', + ); } - public function getDatabaseAssertionData(): array + public function testSuccessWithoutCommandLineFields() { - return [ - [ - new DatabaseNovaField(new Column('id', new IntegerType)), - new DatabaseNovaField(new Column('title', new StringType)), - new DatabaseNovaField(new Column('created_at', new DatetimeType)), - ], - [ - 'integer' => 'Number', - 'smallint' => 'Number', - 'bigint' => 'Number', - 'float' => 'Number', - 'decimal' => 'Number', - 'string' => 'Text', - 'text' => 'Text', - 'guid' => 'Text', - 'json' => 'Text', - 'date' => 'Date', - 'datetime' => 'DateTime', - 'datetimetz' => 'DateTime', - 'boolean' => 'Boolean', - ] - ]; + $this->mockNovaServiceProviderExists(); + + $this->mockGettingModelInstance(); + + $this->mockFilesystem(); + + app(NovaResourceGenerator::class) + ->setModel('Post') + ->setFields([]) + ->generate(); + + $this->assertGeneratedFileEquals( + fixtureName: 'created_resource_without_command_line_fields.php', + filePath: 'app/Nova/PostResource.php', + ); + + $this->assertEventPushed( + className: SuccessCreateMessage::class, + message: 'Created a new Nova Resource: PostResource', + ); } } diff --git a/tests/NovaTestGeneratorTest.php b/tests/NovaTestGeneratorTest.php index 7c1acf6..be1a052 100644 --- a/tests/NovaTestGeneratorTest.php +++ b/tests/NovaTestGeneratorTest.php @@ -2,88 +2,171 @@ namespace RonasIT\Support\Tests; +use RonasIT\Support\Tests\Support\Models\WelcomeBonus; +use Illuminate\Support\Facades\Event; use RonasIT\Support\Events\SuccessCreateMessage; +use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Exceptions\ClassAlreadyExistsException; use RonasIT\Support\Exceptions\ClassNotExistsException; use RonasIT\Support\Generators\NovaTestGenerator; -use RonasIT\Support\Tests\Support\NovaTest\NovaTestMockTrait; +use RonasIT\Support\Tests\Support\NovaTestGeneratorTest\NovaTestGeneratorMockTrait; +use Laravel\Nova\NovaServiceProvider; +use Mockery; class NovaTestGeneratorTest extends TestCase { - use NovaTestMockTrait; + use NovaTestGeneratorMockTrait; - public function testCreateNovaTestsResourceNotExists() + public function testGenerateResourceNotExists() { - $mock = $this->mockClassExistsFunction(); + $this->mockNovaServiceProviderExists(); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage("Cannot create NovaPostTest cause Post Nova resource does not exist. Create Post Nova resource."); + $this->mockClass(NovaTestGenerator::class, [ + $this->classExistsMethodCall(['nova', 'PostNovaResource'], false), + $this->classExistsMethodCall(['nova', 'PostResource'], false), + $this->classExistsMethodCall(['nova', 'Post'], false), + ]); - $this->mockTestGeneratorForNonExistingNovaResource(); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: 'Cannot create NovaPostTest cause Post Nova resource does not exist. Create Post Nova resource.', + ); - try { - app(NovaTestGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } + app(NovaTestGenerator::class) + ->setModel('Post') + ->generate(); + } + + public function testGenerateNovaTestAlreadyExists() + { + $this->mockNovaServiceProviderExists(); + + $this->mockClass(NovaTestGenerator::class, [ + $this->classExistsMethodCall(['nova', 'PostNovaResource']), + $this->classExistsMethodCall(['nova', 'NovaPostTest']) + ]); + + $this->assertExceptionThrew( + className: ClassAlreadyExistsException::class, + message: "Cannot create NovaPostTest cause it's already exist. Remove NovaPostTest.", + ); + + app(NovaTestGenerator::class) + ->setModel('Post') + ->generate(); } - public function testCreateNovaTestAlreadyExists() + public function testNovaTestStubNotExist() { - $this->setupConfigurations(); + Event::fake(); - $mock = $this->mockClassExistsFunction(); + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]), + $this->nativeClassExistsMethodCall([WelcomeBonus::class, true]), + ); - $this->expectException(ClassAlreadyExistsException::class); - $this->expectErrorMessage("Cannot create NovaPostTest cause it's already exist. Remove NovaPostTest."); + $this->mockFilesystem(); + $this->mockNovaRequestClassCall(); + + config([ + 'entity-generator.paths.models' => 'RonasIT/Support/Tests/Support/Models', + 'entity-generator.stubs.nova_test' => 'incorrect_stub', + ]); - $this->mockGeneratorForExistingNovaTest(); + $mock = Mockery::mock('alias:Illuminate\Support\Facades\DB'); + $mock + ->shouldReceive('beginTransaction', 'rollBack') + ->once(); - try { - app(NovaTestGenerator::class) - ->setModel('Post') - ->generate(); - } finally { - $mock->disable(); - } + app(NovaTestGenerator::class) + ->setModel('WelcomeBonus') + ->generate(); + + $this->assertFileDoesNotExist('tests/NovaWelcomeBonusTest.php'); + $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); + + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of nova test has been skipped cause the view incorrect_stub from the config entity-generator.stubs.nova_test is not exists. Please check that config has the correct view name value.', + ); } - public function testCreate() + public function testDumpStubNotExist() { - $functionMock = $this->mockClassExistsFunction(); + Event::fake(); + + $this->mockNovaServiceProviderExists(); $this->mockFilesystem(); - $this->setupConfigurations(); - $this->mockViewsNamespace(); - $this->mockNovaResourceTestGenerator(); + $this->mockNovaRequestClassCall(); + + config([ + 'entity-generator.paths.models' => 'RonasIT/Support/Tests/Support/Models', + 'entity-generator.stubs.dump' => 'incorrect_stub', + ]); app(NovaTestGenerator::class) - ->setModel('Post') + ->setModel('WelcomeBonus') ->generate(); - $this->rollbackToDefaultBasePath(); + $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusTest.php'); + $this->assertFileDoesNotExist('tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); + + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of dump has been skipped cause the view incorrect_stub from the config entity-generator.stubs.dump is not exists. Please check that config has the correct view name value.', + ); + } - $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaPostTest.php'); - $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaPostTest/dump.sql'); - $this->assertGeneratedFileEquals('create_post_request.json', 'tests/fixtures/NovaPostTest/create_post_request.json'); - $this->assertGeneratedFileEquals('create_post_response.json', 'tests/fixtures/NovaPostTest/create_post_response.json'); - $this->assertGeneratedFileEquals('update_post_request.json', 'tests/fixtures/NovaPostTest/update_post_request.json'); + public function testSuccess() + { + config([ + 'entity-generator.paths.models' => 'RonasIT/Support/Tests/Support/Models', + ]); + + $mock = Mockery::mock('alias:Illuminate\Support\Facades\DB'); + $mock + ->shouldReceive('beginTransaction', 'rollBack') + ->once(); + + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true]), + $this->nativeClassExistsMethodCall([WelcomeBonus::class, true]), + ); + + $this->mockFilesystem(); + $this->mockNovaRequestClassCall(); + + app(NovaTestGenerator::class) + ->setModel('WelcomeBonus') + ->generate(); - $functionMock->disable(); + $this->assertGeneratedFileEquals('created_resource_test.php', 'tests/NovaWelcomeBonusTest.php'); + $this->assertGeneratedFileEquals('dump.sql', 'tests/fixtures/NovaWelcomeBonusTest/nova_welcome_bonus_dump.sql'); + $this->assertGeneratedFileEquals('create_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_request.json'); + $this->assertGeneratedFileEquals('create_welcome_bonus_response.json', 'tests/fixtures/NovaWelcomeBonusTest/create_welcome_bonus_response.json'); + $this->assertGeneratedFileEquals('update_welcome_bonus_request.json', 'tests/fixtures/NovaWelcomeBonusTest/update_welcome_bonus_request.json'); } - public function testCreateWithMissingNovaPackage() + public function testGenerateNovaPackageNotInstall() { - $this->expectsEvents([SuccessCreateMessage::class]); + Event::fake(); - $functionMock = $this->mockCheckingNonExistentNovaPackageExistence(); + $this->mockNovaServiceProviderExists(false); app(NovaTestGenerator::class) ->setModel('Post') ->generate(); - $functionMock->disable(); + $this->assertEventPushed( + className: SuccessCreateMessage::class, + message: 'Nova is not installed and NovaTest is skipped', + ); } } diff --git a/tests/RepositoryGeneratorTest.php b/tests/RepositoryGeneratorTest.php index 2cadf49..bc39ad7 100644 --- a/tests/RepositoryGeneratorTest.php +++ b/tests/RepositoryGeneratorTest.php @@ -14,9 +14,11 @@ public function testModelDoesntExists() { $this->mockGeneratorForMissingModel(); - $this->expectException(ClassNotExistsException::class); - $this->expectErrorMessage("Cannot create Post Model cause Post Model does not exists. " - . "Create a Post Model by himself or run command 'php artisan make:entity Post --only-model'."); + $this->assertExceptionThrew( + className: ClassNotExistsException::class, + message: "Cannot create Post Model cause Post Model does not exists. " + . "Create a Post Model by himself or run command 'php artisan make:entity Post --only-model'.", + ); app(RepositoryGenerator::class) ->setModel('Post') @@ -25,16 +27,12 @@ public function testModelDoesntExists() public function testCreateRepository() { - $this->mockConfigurations(); - $this->mockViewsNamespace(); $this->mockFilesystem(); app(RepositoryGenerator::class) ->setModel('Post') ->generate(); - $this->rollbackToDefaultBasePath(); - $this->assertGeneratedFileEquals('repository.php', 'app/Repositories/PostRepository.php'); } } diff --git a/tests/SeederGeneratorTest.php b/tests/SeederGeneratorTest.php new file mode 100644 index 0000000..167b482 --- /dev/null +++ b/tests/SeederGeneratorTest.php @@ -0,0 +1,88 @@ +mockFilesystem(); + + app(SeederGenerator::class) + ->setRelations([ + 'hasOne' => [], + 'belongsTo' => ['User'], + 'hasMany' => ['Comment'], + 'belongsToMany' => [] + ]) + ->setModel('Post') + ->generate(); + + $this->assertGeneratedFileEquals('database_seeder.php', 'database/seeders/DatabaseSeeder.php'); + $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); + } + + public function testCreateSeederEmptyDatabaseSeederStubNotExist() + { + $this->mockFilesystem(); + + config(['entity-generator.stubs.database_empty_seeder' => 'entity-generator::database_seed_empty']); + + app(SeederGenerator::class) + ->setRelations([ + 'hasOne' => [], + 'belongsTo' => ['User'], + 'hasMany' => ['Comment'], + 'belongsToMany' => [] + ]) + ->setModel('Post') + ->generate(); + + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of database empty seeder has been skipped cause the view entity-generator::database_seed_empty from the config entity-generator.stubs.database_empty_seeder is not exists. Please check that config has the correct view name value.', + ); + + $this->assertFileDoesNotExist("{$this->generatedFileBasePath}/database/seeders/PostSeeder.php"); + $this->assertFileDoesNotExist('database/seeders/DatabaseSeeder.php'); + } + + public function testCreateSeederEntityDatabaseSeederStubNotExist() + { + $this->mockFilesystem(); + + config(['entity-generator.stubs.seeder' => 'incorrect_stub']); + + app(SeederGenerator::class) + ->setRelations([ + 'hasOne' => [], + 'belongsTo' => ['User'], + 'hasMany' => ['Comment'], + 'belongsToMany' => [] + ]) + ->setModel('Post') + ->generate(); + + $this->assertEventPushed( + className: WarningEvent::class, + message: 'Generation of seeder has been skipped cause the view incorrect_stub from the config entity-generator.stubs.seeder is not exists. Please check that config has the correct view name value.', + ); + + $this->assertFileDoesNotExist("{$this->generatedFileBasePath}/database/seeders/PostSeeder.php"); + $this->assertFileDoesNotExist('database/seeders/DatabaseSeeder.php'); + } +} \ No newline at end of file diff --git a/tests/Support/Controller/ControllerMockTrait.php b/tests/Support/Controller/ControllerMockTrait.php deleted file mode 100644 index 0542665..0000000 --- a/tests/Support/Controller/ControllerMockTrait.php +++ /dev/null @@ -1,86 +0,0 @@ -mockClass(ControllerGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['controllers', 'PostController'], - 'result' => true - ] - ]); - } - - public function mockControllerGeneratorForNotExistingService(): void - { - $this->mockClass(ControllerGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['controllers', 'PostController'], - 'result' => false - ], - [ - 'method' => 'classExists', - 'arguments' => ['services', 'PostService'], - 'result' => false - ], - ]); - } - - public function mockConfigurations(): void - { - config([ - 'entity-generator.stubs.controller' => 'entity-generator::controller', - 'entity-generator.stubs.use_routes' => 'entity-generator::use_routes', - 'entity-generator.stubs.routes' => 'entity-generator::routes', - 'entity-generator.paths' => [ - 'controllers' => 'app/Controllers', - 'services' => 'app/Services', - 'requests' => 'app/Requests', - 'resources' => 'app/Http/Resources', - 'routes' => 'routes/api.php' - ] - ]); - } - - public function mockFilesystemWithoutRoutesFile(): void - { - $structure = [ - 'app' => [ - 'Services' => [ - 'PostService.php' => ' [] - ], - ]; - - vfsStream::create($structure); - } - - public function mockFilesystem(): void - { - $structure = [ - 'app' => [ - 'Services' => [ - 'PostService.php' => ' [] - ], - 'routes' => [ - 'api.php' => 'services = [ + 'PostService.php' => $this->mockPhpFileContent(), + ]; + $fileSystemMock->controllers = []; + + $fileSystemMock->setStructure(); + } + + public function mockFilesystem(): void + { + $fileSystemMock = new FileSystemMock; + $fileSystemMock->services = [ + 'PostService.php' => $this->mockPhpFileContent(), + ]; + $fileSystemMock->controllers = []; + $fileSystemMock->routes = [ + 'api.php' => $this->mockPhpFileContent(), + ]; + + $fileSystemMock->setStructure(); + } +} \ No newline at end of file diff --git a/tests/Support/Factory/FactoryMockTrait.php b/tests/Support/Factory/FactoryMockTrait.php index ede9f70..60a4b92 100644 --- a/tests/Support/Factory/FactoryMockTrait.php +++ b/tests/Support/Factory/FactoryMockTrait.php @@ -3,155 +3,26 @@ namespace RonasIT\Support\Tests\Support\Factory; use org\bovigo\vfs\vfsStream; -use ReflectionClass; use RonasIT\Support\Generators\FactoryGenerator; -use RonasIT\Support\Tests\Support\Shared\GeneratorMockTrait; +use RonasIT\Support\Tests\Support\GeneratorMockTrait; +use RonasIT\Support\Traits\MockTrait; trait FactoryMockTrait { - use GeneratorMockTrait; + use GeneratorMockTrait, MockTrait; - public function getFactoryGeneratorMockForMissingModel(): void + public function mockFactoryGenerator(array ...$functionCalls): void { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => false - ] - ]); - } - - public function getFactoryGeneratorMockForExistingFactory(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => true - ], - [ - 'method' => 'classExists', - 'arguments' => ['factory', 'PostFactory'], - 'result' => true - ], - ]); - } - - public function mockGeneratorForMissingRevertedRelationModelFactory(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'checkExistRelatedModelsFactories', - 'arguments' => [], - 'result' => true - ], - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function mockFactoryGenerator(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => false - ], - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function mockFactoryGeneratorForAlreadyExistsFactory(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'checkExistModelFactory', - 'arguments' => [], - 'result' => 1 - ], - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function mockFactoryGeneratorForGenericTypeCreation(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function mockFactoryGeneratorForClassTypeCreation(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => true - ] - ]); - } - - public function mockFactoryGeneratorForMissingRelatedModelFactory(): void - { - $this->mockClass(FactoryGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => true - ], - [ - 'method' => 'allowedToCreateFactoryInSeparateClass', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function getMockForFileExists(bool $result = true) - { - return $this->mockNativeFunction('\\RonasIT\\Support\\Generators', 'file_exists', $result); + $this->mockClass(FactoryGenerator::class, $functionCalls); } public function mockConfigurations(): void { config([ - 'entity-generator.stubs.factory' => 'entity-generator::factory', - 'entity-generator.stubs.legacy_factory' => 'entity-generator::legacy_factory', - 'entity-generator.stubs.legacy_empty_factory' => 'entity-generator::legacy_empty_factory', - 'entity-generator.paths' => [ - 'models' => 'app/Models', - 'factory' => 'database/factories/ModelFactory.php', - ] - ]); - } - - public function mockConfigurationsForClassStyleFactory(): void - { - config([ - 'entity-generator.stubs.factory' => 'entity-generator::factory', - 'entity-generator.stubs.legacy_factory' => 'entity-generator::legacy_factory', - 'entity-generator.stubs.legacy_empty_factory' => 'entity-generator::legacy_empty_factory', 'entity-generator.paths' => [ 'models' => 'app/Models', - 'factory' => 'database/factories', - ] + 'factories' => 'database/factories', + ], ]); } @@ -159,100 +30,16 @@ public function mockFilesystem(): void { $structure = [ 'app' => [ - 'Services' => [ - 'PostService.php' => ' [], - 'Models' => [] - ], - 'database' => [ - 'factories' => [ - 'ModelFactory.php' => 'getFileName(); - - $structure = [ - 'app' => [ - 'Services' => [ - 'PostService.php' => ' [], 'Models' => [ - 'Post.php' => file_get_contents($postModelFileName), - 'User.php' => ' [ - 'factories' => [ - 'ModelFactory.php' => ' [ - 'Services' => [ - 'PostService.php' => ' $this->mockPhpFileContent(), + 'User.php' => $this->mockPhpFileContent(), ], - 'Controllers' => [], - 'Models' => [ - 'Post.php' => ' ' [ - 'factories' => [ - 'ModelFactory.php' => file_get_contents(getcwd() . '/tests/Support/Factory/ModelFactory.php'), - ] - ] - ]; - - vfsStream::create($structure); - } - - public function mockFilesystemForGenericStyleCreation(): void - { - $structure = [ - 'app' => [ - 'Models' => [ - 'Post.php' => file_get_contents(getcwd() . '/tests/Support/Factory/Post.php'), - 'User.php' => ' [], ], - 'database' => [] - ]; - - vfsStream::create($structure); - } - - public function mockFilesystemForClassStyleFactoryCreation(): void - { - $structure = [ - 'app' => [ - 'Models' => [ - 'Post.php' => file_get_contents(getcwd() . '/tests/Support/Factory/Post.php'), - 'User.php' => ' [ - 'factories' => [] - ] ]; vfsStream::create($structure); } -} \ No newline at end of file +} diff --git a/tests/Support/Factory/ModelFactory.php b/tests/Support/Factory/ModelFactory.php deleted file mode 100644 index 9c3b401..0000000 --- a/tests/Support/Factory/ModelFactory.php +++ /dev/null @@ -1,15 +0,0 @@ -define(App\Models\User::class, function (Faker\Generator $faker) { - static $password; - - return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, - 'password' => $password ?: $password = bcrypt('secret'), - 'remember_token' => str_random(10), - ]; -}); \ No newline at end of file diff --git a/tests/Support/Factory/ModelWithRelations.php b/tests/Support/Factory/ModelWithRelations.php deleted file mode 100644 index 03e090b..0000000 --- a/tests/Support/Factory/ModelWithRelations.php +++ /dev/null @@ -1,11 +0,0 @@ -belongsTo(User::class); - } -} \ No newline at end of file diff --git a/tests/Support/Factory/Post.php b/tests/Support/Factory/Post.php deleted file mode 100644 index 599ec8a..0000000 --- a/tests/Support/Factory/Post.php +++ /dev/null @@ -1,11 +0,0 @@ -belongsTo(User::class); - } -} \ No newline at end of file diff --git a/tests/Support/FileSystemMock.php b/tests/Support/FileSystemMock.php new file mode 100644 index 0000000..c69d6b5 --- /dev/null +++ b/tests/Support/FileSystemMock.php @@ -0,0 +1,102 @@ + []]; + + if (!is_null($this->novaModels)) { + $structure['app']['Nova'] = []; + + foreach ($this->novaModels as $novaModel => $content) { + $structure['app']['Nova'][$novaModel] = $content; + } + } + + if (!is_null($this->novaActions)) { + if (!array_key_exists('Nova', $structure['app'])) { + $structure['app']['Nova'] = []; + } + + $structure['app']['Nova']['Actions'] = []; + + foreach ($this->novaActions as $novaAction => $content) { + $structure['app']['Nova']['Actions'][$novaAction] = $content; + } + } + + if (!is_null($this->models)) { + $structure['app']['Models'] = []; + + foreach ($this->models as $model => $content) { + $structure['app']['Models'][$model] = $content; + } + } + + if (!is_null($this->controllers)) { + $structure['app']['Http']['Controllers'] = []; + + foreach ($this->controllers as $controller => $content) { + $structure['app']['Http']['Controllers'][$controller] = $content; + } + } + + if (!is_null($this->services)) { + $structure['app']['Services'] = []; + + foreach ($this->services as $service => $content) { + $structure['app']['Services'][$service] = $content; + } + } + + if (!is_null($this->repositories)) { + $structure['app']['Repositories'] = []; + + foreach ($this->repositories as $repository => $content) { + $structure['app']['Repositories'][$repository] = $content; + } + } + + if (!is_null($this->testClasses)) { + $structure['tests'] = []; + + foreach ($this->testClasses as $testClass => $content) { + $structure['app']['tests'][$testClass] = $content; + } + } + + if (!is_null($this->testFixtures)) { + $structure['tests']['fixtures'] = []; + + foreach ($this->testFixtures as $fixture => $content) { + Arr::set($structure['app']['tests'], $fixture, $content); + } + } + + if (!is_null($this->routes)) { + $structure['routes'] = []; + + foreach ($this->routes as $route => $content) { + $structure['routes'][$route] = $content; + } + } + + vfsStream::create($structure); + } +} diff --git a/tests/Support/GeneratorMockTrait.php b/tests/Support/GeneratorMockTrait.php new file mode 100644 index 0000000..5933ed8 --- /dev/null +++ b/tests/Support/GeneratorMockTrait.php @@ -0,0 +1,43 @@ +mockNativeFunction('\RonasIT\Support\Generators', $functionCalls); + } + + public function mockNovaServiceProviderExists(bool $result = true): void + { + $this->mockNativeGeneratorFunctions( + $this->nativeClassExistsMethodCall([NovaServiceProvider::class, true], $result), + ); + } + + public function classExistsMethodCall(array $arguments, bool $result = true): array + { + return [ + 'function' => 'classExists', + 'arguments' => $arguments, + 'result' => $result + ]; + } + + public function nativeClassExistsMethodCall(array $arguments, bool $result = true): array + { + return [ + 'function' => 'class_exists', + 'arguments' => $arguments, + 'result' => $result, + ]; + } + + public function mockPhpFileContent(): string + { + return 'mockClass(ModelGenerator::class, [ [ - 'method' => 'classExists', + 'function' => 'classExists', 'arguments' => ['models', 'Post'], - 'result' => true - ] + 'result' => true, + ], ]); } - public function mockGeneratorForMissingRelationModel() + public function mockGeneratorForMissingRelationModel(): void { $this->mockClass(ModelGenerator::class, [ [ - 'method' => 'classExists', + 'function' => 'classExists', 'arguments' => ['models', 'Post'], - 'result' => false + 'result' => false, ], [ - 'method' => 'classExists', + 'function' => 'classExists', 'arguments' => ['models', 'Comment'], - 'result' => false - ] - ]); - } - - public function setupConfigurations(): void - { - config([ - 'entity-generator.stubs.model' => 'entity-generator::model', - 'entity-generator.stubs.relation' => 'entity-generator::relation', - 'entity-generator.paths' => [ - 'models' => 'app/Models', - ] + 'result' => false, + ], ]); } @@ -54,8 +43,8 @@ public function mockFilesystem(): void 'app' => [ 'Models' => [ 'Comment.php' => file_get_contents(getcwd() . '/tests/Support/Model/RelationModelMock.php'), - 'User.php' => file_get_contents(getcwd() . '/tests/Support/Model/RelationModelMock.php') - ] + 'User.php' => file_get_contents(getcwd() . '/tests/Support/Model/RelationModelMock.php'), + ], ], ]; diff --git a/tests/Support/Models/WelcomeBonus.php b/tests/Support/Models/WelcomeBonus.php new file mode 100644 index 0000000..dcc8468 --- /dev/null +++ b/tests/Support/Models/WelcomeBonus.php @@ -0,0 +1,21 @@ +mockClass(NovaResourceGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => [], - 'result' => false - ] - ]); - } - - public function mockResourceGeneratorForExistingNovaResource(): void - { - $this->mockClass(NovaResourceGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => true - ], - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'PostResource'], - 'result' => true - ] - ]); - } - - public function setupConfigurations(): void - { - config([ - 'entity-generator.stubs.nova_resource' => 'entity-generator::nova_resource', - 'entity-generator.paths' => [ - 'nova' => 'app/Nova', - 'models' => 'app/Models' - ] - ]); - } - - public function mockFilesystem(): void - { - $structure = [ - 'app' => [ - 'Nova' => [], - 'Models' => [ - 'Post.php' => 'mockClassWithReturn(Connection::class, ['getDoctrineSchemaManager'], true); - - $mock = Mockery::mock('alias:' . DB::class); - $mock - ->expects('connection') - ->with('pgsql') - ->andReturn($connection); - - $connection - ->expects($this->once()) - ->method('getDoctrineSchemaManager') - ->willReturn(new SchemaManager); - - $this->app->instance('App\\Models\\Post', new Post); - } -} \ No newline at end of file diff --git a/tests/Support/NovaResourceGeneratorTest/NovaResourceGeneratorMockTrait.php b/tests/Support/NovaResourceGeneratorTest/NovaResourceGeneratorMockTrait.php new file mode 100644 index 0000000..c0a7f5d --- /dev/null +++ b/tests/Support/NovaResourceGeneratorTest/NovaResourceGeneratorMockTrait.php @@ -0,0 +1,43 @@ +novaModels = []; + $fileSystemMock->models = [ + 'Post.php' => $this->mockPhpFileContent(), + ]; + + $fileSystemMock->setStructure(); + } + + public function mockGettingModelInstance(): void + { + $connectionMock = Mockery::mock(Connection::class)->makePartial(); + $connectionMock + ->expects('getDoctrineSchemaManager') + ->andReturn(new SchemaManager); + + $mock = Mockery::mock('alias:' . DB::class); + $mock + ->expects('connection') + ->with('pgsql') + ->andReturn($connectionMock); + + $this->app->instance('App\\Models\\Post', new Post); + } +} diff --git a/tests/Support/NovaResource/Post.php b/tests/Support/NovaResourceGeneratorTest/Post.php similarity index 73% rename from tests/Support/NovaResource/Post.php rename to tests/Support/NovaResourceGeneratorTest/Post.php index eae8c0d..ae3cceb 100644 --- a/tests/Support/NovaResource/Post.php +++ b/tests/Support/NovaResourceGeneratorTest/Post.php @@ -1,6 +1,6 @@ mockClass(NovaTestGenerator::class, [ - [ - 'method' => 'getModelFields', - 'arguments' => ['Post'], - 'result' => ['title', 'name'] - ], - [ - 'method' => 'getModelFields', - 'arguments' => ['Post'], - 'result' => ['title', 'name'] - ], - [ - 'method' => 'getModelFields', - 'arguments' => ['Post'], - 'result' => ['title', 'name'] - ], - [ - 'method' => 'getMockModel', - 'arguments' => ['Post'], - 'result' => ['title' => 'some title', 'name' => 'some name'] - ], - [ - 'method' => 'getMockModel', - 'arguments' => ['Post'], - 'result' => ['title' => 'some title', 'name' => 'some name'] - ], - [ - 'method' => 'loadNovaActions', - 'arguments' => [], - 'result' => [ - new PublishPostAction, - new UnPublishPostAction, - new UnPublishPostAction, - ] - ], - [ - 'method' => 'loadNovaFields', - 'arguments' => [], - 'result' => [ - new TextField, - new DateField, - ] - ], - [ - 'method' => 'loadNovaFilters', - 'arguments' => [], - 'result' => [ - new CreatedAtFilter, - ] - ], - ]); - } - - public function mockTestGeneratorForNonExistingNovaResource(): void - { - $this->mockClass(NovaTestGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'PostNovaResource'], - 'result' => false - ], - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'PostResource'], - 'result' => false - ], - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'Post'], - 'result' => false - ] - ]); - } - - public function mockGeneratorForExistingNovaTest(): void - { - $this->mockClass(NovaTestGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'PostNovaResource'], - 'result' => true - ], - [ - 'method' => 'classExists', - 'arguments' => ['nova', 'NovaPostTest'], - 'result' => true - ] - ]); - } - - public function setupConfigurations(): void - { - config([ - 'entity-generator.stubs.nova_test' => 'entity-generator::nova_test', - 'entity-generator.stubs.dump' => 'entity-generator::dumps.pgsql', - 'entity-generator.paths' => [ - 'nova' => 'app/Nova', - 'nova_actions' => 'app/Nova/Actions', - 'tests' => 'tests', - 'models' => 'app/Models' - ] - ]); - } - - public function mockFilesystem(): void - { - $structure = [ - 'app' => [ - 'Nova' => [ - 'Actions' => [ - 'PublishPostAction.php' => ' ' ' 'text', - ], - 'Post.php' => ' [ - 'Post.php' => ' [ - 'fixtures' => [ - 'NovaPostTest' => [] - ] - ] - ]; - - vfsStream::create($structure); - } -} \ No newline at end of file diff --git a/tests/Support/NovaTest/PublishPostAction.php b/tests/Support/NovaTest/PublishPostAction.php deleted file mode 100644 index 69369c2..0000000 --- a/tests/Support/NovaTest/PublishPostAction.php +++ /dev/null @@ -1,7 +0,0 @@ -app->instance('Laravel\Nova\Http\Requests\NovaRequest', $mock); + } + + public function mockFilesystem(): void + { + $fileSystemMock = new FileSystemMock; + + $fileSystemMock->novaActions = [ + 'PublishPostAction.php' => $this->mockPhpFileContent(), + 'ArchivePostAction.php' => $this->mockPhpFileContent(), + 'BlockCommentAction.php' => $this->mockPhpFileContent(), + 'UnPublishPostAction.txt' => 'text', + ]; + + $fileSystemMock->novaModels = [ + 'WelcomeBonusResource.php' => $this->mockPhpFileContent(), + ]; + + $fileSystemMock->models = [ + 'WelcomeBonus.php' => $this->mockPhpFileContent(), + ]; + + $fileSystemMock->testFixtures = [ + 'NovaWelcomeBonusTest' => [] + ]; + + $fileSystemMock->setStructure(); + } +} diff --git a/tests/Support/NovaTestGeneratorTest/PublishPostAction.php b/tests/Support/NovaTestGeneratorTest/PublishPostAction.php new file mode 100644 index 0000000..8a5a984 --- /dev/null +++ b/tests/Support/NovaTestGeneratorTest/PublishPostAction.php @@ -0,0 +1,7 @@ +mockClass(RepositoryGenerator::class, [ - [ - 'method' => 'classExists', - 'arguments' => ['models', 'Post'], - 'result' => false - ], - ]); - } - - public function mockConfigurations(): void - { - config([ - 'entity-generator.stubs.repository' => 'entity-generator::repository', - 'entity-generator.paths' => [ - 'repositories' => 'app/Repositories', - 'models' => 'app/Models', - ] + $this->classExistsMethodCall(['models', 'Post'], false), ]); } @@ -37,9 +23,9 @@ public function mockFilesystem(): void $structure = [ 'app' => [ 'Models' => [ - 'Post.php' => ' ' [] + 'Repositories' => [], ], ]; diff --git a/tests/Support/SeederGeneratorMockTrait.php b/tests/Support/SeederGeneratorMockTrait.php new file mode 100644 index 0000000..455597a --- /dev/null +++ b/tests/Support/SeederGeneratorMockTrait.php @@ -0,0 +1,19 @@ + [] + ]; + + vfsStream::create($structure); + } +} \ No newline at end of file diff --git a/tests/Support/Shared/GeneratorMockTrait.php b/tests/Support/Shared/GeneratorMockTrait.php deleted file mode 100644 index 20c3ea8..0000000 --- a/tests/Support/Shared/GeneratorMockTrait.php +++ /dev/null @@ -1,60 +0,0 @@ -getMockBuilder($className); - - if ($methods) { - $builder->onlyMethods($methods); - } - - if ($disableConstructor) { - $builder->disableOriginalConstructor(); - } - - return $builder->getMock(); - } - - public function mockNativeFunction(string $namespace, string $name, $result): Mock - { - $builder = new MockBuilder(); - $builder - ->setNamespace($namespace) - ->setName($name) - ->setFunction(function () use ($result) { - return $result; - }); - - $mock = $builder->build(); - $mock->enable(); - - return $mock; - } - - public function mockViewsNamespace(): void - { - View::addNamespace('entity-generator', getcwd() . '/stubs'); - } - - public function mockClassExistsFunction(bool $result = true): Mock - { - return $this->mockNativeFunction('\\RonasIT\\Support\\Generators', 'class_exists', $result); - } - - public function mockCheckingNonExistentNovaPackageExistence(): Mock - { - return $this->mockClassExistsFunction(false); - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php index a262382..a5c0f83 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -4,23 +4,28 @@ use Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables; use Illuminate\Foundation\Testing\Concerns\InteractsWithViews; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Str; use Orchestra\Testbench\TestCase as BaseTestCase; use org\bovigo\vfs\vfsStream; -use phpmock\Mock; +use RonasIT\Support\EntityGeneratorServiceProvider; use RonasIT\Support\Traits\FixturesTrait; class TestCase extends BaseTestCase { - use FixturesTrait, InteractsWithViews; + use FixturesTrait; + use InteractsWithViews; - protected $globalExportMode = false; - protected $generatedFileBasePath; + protected bool $globalExportMode = false; + protected string $generatedFileBasePath; public function setUp(): void { parent::setUp(); + $this->mockConfigurations(); + vfsStream::setup(); $this->generatedFileBasePath = vfsStream::url('root'); @@ -28,21 +33,32 @@ public function setUp(): void $this->app->setBasePath($this->generatedFileBasePath); } - public function tearDown(): void + public function getFixturePath(string $fixtureName): string { - parent::tearDown(); + $class = get_class($this); + $explodedClass = explode('\\', $class); + $className = Arr::last($explodedClass); - Mock::disableAll(); + return getcwd() . "/tests/fixtures/{$className}/{$fixtureName}"; } - public function rollbackToDefaultBasePath(): void + public function mockConfigurations(): void { - $this->app->setBasePath(getcwd()); + config([ + 'entity-generator' => include('config/entity-generator.php'), + ]); } - protected function getEnvironmentSetUp($app) + protected function getPackageProviders($app): array { - $app->useEnvironmentPath(__DIR__.'/..'); + return [ + EntityGeneratorServiceProvider::class + ]; + } + + protected function getEnvironmentSetUp($app): void + { + $app->useEnvironmentPath(__DIR__ . '/..'); $app->bootstrapWith([LoadEnvironmentVariables::class]); } @@ -70,4 +86,31 @@ protected function assertGenerateFileExists(string $path): void { $this->assertFileExists("{$this->generatedFileBasePath}/{$path}"); } + + protected function assertEventPushed(string $className, string $message): void + { + Event::assertDispatched( + event: $className, + callback: fn ($event) => $event->message === $message, + ); + } + + protected function assertEventPushedChain(array $expectedEvents): void + { + $dispatchedEvents = Event::dispatchedEvents(); + + $this->assertEquals(array_keys($expectedEvents), array_keys($dispatchedEvents)); + + foreach ($dispatchedEvents as $event => $messages) { + $messages = array_map(fn ($message) => Arr::first($message)->message, $messages); + + $this->assertEquals($expectedEvents[$event], $messages); + } + } + + protected function assertExceptionThrew(string $className, string $message): void + { + $this->expectException($className); + $this->expectExceptionMessage($message); + } } diff --git a/tests/fixtures/ControllerGeneratorTest/api.php b/tests/fixtures/ControllerGeneratorTest/api.php index c556f84..09178f9 100644 --- a/tests/fixtures/ControllerGeneratorTest/api.php +++ b/tests/fixtures/ControllerGeneratorTest/api.php @@ -1,10 +1,12 @@ group(function () { + Route::post('posts', 'create'); + Route::put('posts/{id}', 'update'); + Route::delete('posts/{id}', 'delete'); + Route::get('posts/{id}', 'get'); + Route::get('posts', 'search'); +}); \ No newline at end of file diff --git a/tests/fixtures/ControllerGeneratorTest/created_controller.php b/tests/fixtures/ControllerGeneratorTest/created_controller.php index 9d2b897..922be5a 100644 --- a/tests/fixtures/ControllerGeneratorTest/created_controller.php +++ b/tests/fixtures/ControllerGeneratorTest/created_controller.php @@ -1,20 +1,20 @@ onlyValidated(); @@ -23,7 +23,7 @@ public function create(CreatePostRequest $request, PostService $service) return PostResource::make($result); } - public function get(GetPostRequest $request, PostService $service, $id) + public function get(GetPostRequest $request, PostService $service, $id): PostResource { $result = $service ->with($request->input('with', [])) @@ -33,24 +33,24 @@ public function get(GetPostRequest $request, PostService $service, $id) return PostResource::make($result); } - public function search(SearchPostsRequest $request, PostService $service) + public function search(SearchPostsRequest $request, PostService $service): PostsCollectionResource { $result = $service->search($request->onlyValidated()); return PostsCollectionResource::make($result); } - public function update(UpdatePostRequest $request, PostService $service, $id) + public function update(UpdatePostRequest $request, PostService $service, $id): Response { $service->update($id, $request->onlyValidated()); return response('', Response::HTTP_NO_CONTENT); } - public function delete(DeletePostRequest $request, PostService $service, $id) + public function delete(DeletePostRequest $request, PostService $service, $id): Response { $service->delete($id); return response('', Response::HTTP_NO_CONTENT); } -} \ No newline at end of file +} diff --git a/tests/fixtures/ControllerGeneratorTest/empty_api.php b/tests/fixtures/ControllerGeneratorTest/empty_api.php new file mode 100644 index 0000000..a814366 --- /dev/null +++ b/tests/fixtures/ControllerGeneratorTest/empty_api.php @@ -0,0 +1 @@ +define(App\Models\User::class, function (Faker\Generator $faker) { - static $password; - - return [ - "post_id" => 1, - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, - 'password' => $password ?: $password = bcrypt('secret'), - 'remember_token' => Str::random(10), - ]; -}); - -$factory->define(App\Models\Role::class, function () { - return [ - 'name' => 'user' - ]; -}); - - -$factory->define(App\Models\Post::class, function (Faker\Generator $faker) { - return [ - 'author_id' => 1, - 'user_id' => 1, - 'title' => $faker->title, - 'iban' => $faker->iban, - 'something' => $faker->word, - 'json_text' => [], - ]; -}); \ No newline at end of file diff --git a/tests/fixtures/FactoryGeneratorTest/post_factory.php b/tests/fixtures/FactoryGeneratorTest/post_factory.php index 9d5b91e..0b23874 100644 --- a/tests/fixtures/FactoryGeneratorTest/post_factory.php +++ b/tests/fixtures/FactoryGeneratorTest/post_factory.php @@ -20,4 +20,4 @@ public function definition(): array 'json_text' => [], ]; } -} \ No newline at end of file +} diff --git a/tests/fixtures/MigrationGeneratorTest/migrations.php b/tests/fixtures/MigrationGeneratorTest/migrations.php index 85fe8dd..0da0c69 100644 --- a/tests/fixtures/MigrationGeneratorTest/migrations.php +++ b/tests/fixtures/MigrationGeneratorTest/migrations.php @@ -5,11 +5,11 @@ use Illuminate\Support\Facades\Schema; use RonasIT\Support\Traits\MigrationTrait; -class PostsCreateTable extends Migration +return new class extends Migration { use MigrationTrait; - public function up() + public function up(): void { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); @@ -23,8 +23,8 @@ public function up() }); } - public function down() + public function down(): void { Schema::dropIfExists('posts'); } -}; \ No newline at end of file +}; diff --git a/tests/fixtures/MigrationGeneratorTest/migrations_mysql.php b/tests/fixtures/MigrationGeneratorTest/migrations_mysql.php new file mode 100644 index 0000000..167c719 --- /dev/null +++ b/tests/fixtures/MigrationGeneratorTest/migrations_mysql.php @@ -0,0 +1,30 @@ +increments('id'); + $table->integer('media_id'); + $table->integer('user_id'); + $table->string('title')->nullable(); + $table->string('body')->nullable(); + $table->json('meta')->nullable(); + $table->timestamp('created_at')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('posts'); + } +}; diff --git a/tests/fixtures/ModelGeneratorTest/new_model.php b/tests/fixtures/ModelGeneratorTest/new_model.php index c62efef..80f1e29 100644 --- a/tests/fixtures/ModelGeneratorTest/new_model.php +++ b/tests/fixtures/ModelGeneratorTest/new_model.php @@ -8,7 +8,7 @@ class Post extends Model { - use ModelTrait, HasFactory; + use HasFactory, ModelTrait; protected $fillable = [ 'media_id', diff --git a/tests/fixtures/NovaResourceGeneratorTest/command_line_fields.json b/tests/fixtures/NovaResourceGeneratorTest/command_line_fields.json new file mode 100644 index 0000000..026bc1a --- /dev/null +++ b/tests/fixtures/NovaResourceGeneratorTest/command_line_fields.json @@ -0,0 +1,17 @@ +{ + "boolean": [ + "is_published" + ], + "string-required": [ + "title", + "body" + ], + "integer": [ + "id" + ], + "non_existing_type": [ + "comment" + ], + "json": [], + "timestamp-required": [] +} diff --git a/tests/fixtures/NovaResourceGeneratorTest/created_resource_without_command_line_fields.php b/tests/fixtures/NovaResourceGeneratorTest/created_resource_without_command_line_fields.php new file mode 100644 index 0000000..9d3f57e --- /dev/null +++ b/tests/fixtures/NovaResourceGeneratorTest/created_resource_without_command_line_fields.php @@ -0,0 +1,59 @@ +required() + ->sortable(), + Text::make('Title') + ->required() + ->sortable(), + Text::make('Created At') + ->required() + ->sortable(), + ]; + } + + public function cards(Request $request): array + { + return []; + } + + public function filters(Request $request): array + { + return []; + } + + public function lenses(Request $request): array + { + return []; + } + + public function actions(Request $request): array + { + return []; + } +} diff --git a/tests/fixtures/NovaTestGeneratorTest/create_post_request.json b/tests/fixtures/NovaTestGeneratorTest/create_post_request.json deleted file mode 100644 index d38b162..0000000 --- a/tests/fixtures/NovaTestGeneratorTest/create_post_request.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "some title", - "name": "some name" -} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/create_post_response.json b/tests/fixtures/NovaTestGeneratorTest/create_post_response.json deleted file mode 100644 index d38b162..0000000 --- a/tests/fixtures/NovaTestGeneratorTest/create_post_response.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "some title", - "name": "some name" -} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_request.json b/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_request.json new file mode 100644 index 0000000..538b482 --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_request.json @@ -0,0 +1,4 @@ +{ + "title": 1, + "name": 1 +} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_response.json b/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_response.json new file mode 100644 index 0000000..ea1ee8e --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/create_welcome_bonus_response.json @@ -0,0 +1,5 @@ +{ + "id": 1, + "title": 1, + "name": 1 +} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php index 3c7c13b..fa08b18 100644 --- a/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php +++ b/tests/fixtures/NovaTestGeneratorTest/created_resource_test.php @@ -2,200 +2,188 @@ namespace App\Tests; -use App\Models\Post; +use App\Models\WelcomeBonus; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Tests\ModelTestState; -use RonasIT\Support\Traits\AuthTestTrait; +use RonasIT\Support\Traits\NovaTestTrait; -class NovaPostTest extends TestCase +class NovaWelcomeBonusTest extends TestCase { - use AuthTestTrait; + use NovaTestTrait; - protected static $user; - protected static $postState; + protected static User $user; + protected static ModelTestState $welcomeBonusState; public function setUp(): void { parent::setUp(); - self::$user = 1; - self::$postState ??= new ModelTestState(Post::class); + self::$user ??= User::find(1); + self::$welcomeBonusState ??= new ModelTestState(WelcomeBonus::class); $this->skipDocumentationCollecting(); } public function testCreate(): void { - $data = $this->getJsonFixture('create_post_request.json'); + $data = $this->getJsonFixture('create_welcome_bonus_request.json'); - $response = $this->actingViaSession(self::$user)->json('post', '/nova-api/posts', $data); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonus::class, $data); $response->assertCreated(); - $this->assertEqualsFixture('create_post_response.json', $response->json()); + $this->assertEqualsFixture('create_welcome_bonus_response.json', $response->json()); - // TODO: Need to remove after first successful start - self::$postState->assertChangesEqualsFixture('create_posts_state.json', true); + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('create_welcome_bonuses_state.json', true); } public function testCreateNoAuth(): void { - $data = $this->getJsonFixture('create_post_request.json'); - - $response = $this->json('post', '/nova-api/posts', $data); + $response = $this->novaCreateResourceAPICall(WelcomeBonus::class); $response->assertUnauthorized(); - self::$postState->assertNotChanged(); -} + self::$welcomeBonusState->assertNotChanged(); + } public function testCreateValidationError(): void { - $response = $this->actingViaSession(self::$user)->json('post', '/nova-api/posts'); + $response = $this->novaActingAs(self::$user)->novaCreateResourceAPICall(WelcomeBonus::class); $response->assertUnprocessable(); - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('create_validation_response.json', $response->json(), true); - self::$postState->assertNotChanged(); + self::$welcomeBonusState->assertNotChanged(); } public function testUpdate(): void { - $data = $this->getJsonFixture('update_post_request.json'); + $data = $this->getJsonFixture('update_welcome_bonus_request.json'); - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/posts/1', $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonus::class, 1, $data); $response->assertNoContent(); - // TODO: Need to remove after first successful start - self::$postState->assertChangesEqualsFixture('update_posts_state.json', true); + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('update_welcome_bonuses_state.json', true); } public function testUpdateNotExists(): void { - $data = $this->getJsonFixture('update_post_request.json'); + $data = $this->getJsonFixture('update_welcome_bonus_request.json'); - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/posts/0', $data); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonus::class, 0, $data); $response->assertNotFound(); } public function testUpdateNoAuth(): void { - $data = $this->getJsonFixture('update_post_request.json'); - - $response = $this->json('put', '/nova-api/posts/1', $data); + $response = $this->novaUpdateResourceAPICall(WelcomeBonus::class, 1); $response->assertUnauthorized(); } public function testUpdateValidationError(): void { - $response = $this->actingViaSession(self::$user)->json('put', '/nova-api/posts/4'); + $response = $this->novaActingAs(self::$user)->novaUpdateResourceAPICall(WelcomeBonus::class, 4); $response->assertUnprocessable(); - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('update_validation_response.json', $response->json(), true); } public function testGetUpdatableFields(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts/1/update-fields'); + $response = $this->novaActingAs(self::$user)->novaGetUpdatableFieldsAPICall(WelcomeBonus::class, 1); $response->assertOk(); - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('get_updatable_fields_response.json', $response->json(), true); } public function testDelete(): void { - $response = $this->actingViaSession(self::$user)->json('delete', '/nova-api/posts', [ - 'resources' => [1, 2] - ]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonus::class, [1, 2]); $response->assertOk(); - // TODO: Need to remove after first successful start - self::$postState->assertChangesEqualsFixture('delete_posts_state.json', true); + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture('delete_welcome_bonuses_state.json', true); } public function testDeleteNotExists(): void { - $response = $this->actingViaSession(self::$user)->json('delete', '/nova-api/posts', [ - 'resources' => [0] - ]); + $response = $this->novaActingAs(self::$user)->novaDeleteResourceAPICall(WelcomeBonus::class, [0]); $response->assertNotFound(); } public function testDeleteNoAuth(): void { - $response = $this->json('delete', '/nova-api/posts', [ - 'resources' => [1, 2] - ]); + $response = $this->novaDeleteResourceAPICall(WelcomeBonus::class, [1, 2]); $response->assertUnauthorized(); } public function testGet(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts/1'); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonus::class, 1); $response->assertOk(); - // TODO: Need to remove after first successful start - $this->assertEqualsFixture('get_post_response.json', $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture('get_welcome_bonus_response.json', $response->json(), true); } public function testGetNotExists(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts/0'); + $response = $this->novaActingAs(self::$user)->novaGetResourceAPICall(WelcomeBonus::class, 0); $response->assertNotFound(); } public function testGetNoAuth(): void { - $response = $this->json('get', '/nova-api/posts/1'); + $response = $this->novaGetResourceAPICall(WelcomeBonus::class, 1); $response->assertUnauthorized(); } public function testSearchUnauthorized(): void { - $response = $this->json('get', '/nova-api/posts', [ - 'orderBy' => 'id', - 'orderByDirection' => 'asc' - ]); + $response = $this->novaSearchResourceAPICall(WelcomeBonus::class); $response->assertUnauthorized(); } public function testGetFieldsVisibleOnCreate(): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts/creation-fields'); + $response = $this->novaActingAs(self::$user)->novaGetCreationFieldsAPICall(WelcomeBonus::class); $response->assertOk(); - // TODO: Need to remove after first successful start + // TODO: Need to remove last argument after first successful start $this->assertEqualsFixture('get_fields_visible_on_create_response.json', $response->json(), true); } - public function getRunPostActionsData(): array + public static function getRunWelcomeBonusActionsData(): array { return [ [ - 'action' => 'publish-post-action', + 'action' => PublishPostAction::class, 'request' => [ 'resources' => '1,2', ], 'state' => 'run_publish_post_action_state.json', ], [ - 'action' => 'un-publish-post-action', + 'action' => UnPublishPostAction::class, 'request' => [ 'resources' => '1,2', ], @@ -204,83 +192,70 @@ public function getRunPostActionsData(): array ]; } - /** - * @dataProvider getRunPostActionsData - */ - public function testRunPostActions($action, $request, $postsStateFixture): void + #[DataProvider('getRunWelcomeBonusActionsData')] + public function testRunWelcomeBonusActions($action, $request, $state): void { - $request['action'] = $action; - $response = $this->actingViaSession(self::$user)->json('post', "/nova-api/posts/action", $request); + $response = $this->novaActingAs(self::$user)->novaRunActionAPICall(WelcomeBonus::class, $action, $request); $response->assertOk(); $this->assertEmpty($response->getContent()); - // TODO: Need to remove after first successful start - self::$postState->assertChangesEqualsFixture($postsStateFixture, true); + // TODO: Need to remove last argument after first successful start + self::$welcomeBonusState->assertChangesEqualsFixture($state, true); } - public function getPostActionsData(): array + public static function getWelcomeBonusActionsData(): array { return [ [ - 'request' => [ - 'resources' => '1,2', - ], - 'response_fixture' => 'get_post_actions_publish_post_action.json', + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_actions_publish_post_action.json', ], [ - 'request' => [ - 'resources' => '1,2', - ], - 'response_fixture' => 'get_post_actions_un_publish_post_action.json', + 'resources' => [1, 2], + 'fixture' => 'get_welcome_bonus_actions_un_publish_post_action.json', ], ]; } - /** - * @dataProvider getPostActionsData - */ - public function testGetPostActions(array $request, string $responseFixture): void + #[DataProvider('getWelcomeBonusActionsData')] + public function testGetWelcomeBonusActions(array $resources, string $fixture): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts/actions', $request); + $response = $this->novaActingAs(self::$user)->novaGetActionsAPICall(WelcomeBonus::class, $resources); $response->assertOk(); - // TODO: Need to remove after first successful start - $this->assertEqualsFixture($responseFixture, $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); } - public function getPostFiltersData(): array + public static function getWelcomeBonusFiltersData(): array { return [ [ - 'filters' => [ - 'TextField:description_field' => 'search term', + 'request' => [ + 'TextField:description_field' => $this->novaSearchParams(['search term']), ], - 'response_fixture' => 'filter_post_by_text_field.json', + 'fixture' => 'filter_welcome_bonus_by_text_field.json', ], [ - 'filters' => [ - 'RonasIT\Support\Tests\Support\NovaTest\CreatedAtFilter' => 'search term', + 'request' => [ + 'RonasIT\Support\Tests\Support\NovaTestGeneratorTest\CreatedAtFilter' => $this->novaSearchParams(['search term']), ], - 'response_fixture' => 'filter_post_by_created_at_filter.json', + 'fixture' => 'filter_welcome_bonus_by_created_at_filter.json', ], ]; } - /** - * @dataProvider getPostFiltersData - */ - public function testFilterPost(array $filters, string $responseFixture): void + #[DataProvider('getWelcomeBonusFiltersData')] + public function testFilterWelcomeBonus(array $request, string $fixture): void { - $response = $this->actingViaSession(self::$user)->json('get', '/nova-api/posts', [ - 'filters' => base64_encode(json_encode($filters)) - ]); + $response = $this->novaActingAs(self::$user)->novaSearchResourceAPICall(WelcomeBonus::class, $request); $response->assertOk(); - // TODO: Need to remove after first successful start - $this->assertEqualsFixture($responseFixture, $response->json(), true); + // TODO: Need to remove last argument after first successful start + $this->assertEqualsFixture($fixture, $response->json(), true); } } diff --git a/tests/fixtures/NovaTestGeneratorTest/dump.sql b/tests/fixtures/NovaTestGeneratorTest/dump.sql index 9e5d3e5..50f939e 100644 --- a/tests/fixtures/NovaTestGeneratorTest/dump.sql +++ b/tests/fixtures/NovaTestGeneratorTest/dump.sql @@ -1,3 +1,3 @@ -INSERT INTO posts(title, name, created_at, updated_at) VALUES - ('some title', 'some name', '2016-10-20 11:05:00', '2016-10-20 11:05:00'); +INSERT INTO "welcome_bonuses"(id, title, name, created_at, updated_at) VALUES + (1, 1, 1, '2016-10-20 11:05:00', '2016-10-20 11:05:00'); diff --git a/tests/fixtures/NovaTestGeneratorTest/update_post_request.json b/tests/fixtures/NovaTestGeneratorTest/update_post_request.json deleted file mode 100644 index d38b162..0000000 --- a/tests/fixtures/NovaTestGeneratorTest/update_post_request.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "some title", - "name": "some name" -} \ No newline at end of file diff --git a/tests/fixtures/NovaTestGeneratorTest/update_welcome_bonus_request.json b/tests/fixtures/NovaTestGeneratorTest/update_welcome_bonus_request.json new file mode 100644 index 0000000..538b482 --- /dev/null +++ b/tests/fixtures/NovaTestGeneratorTest/update_welcome_bonus_request.json @@ -0,0 +1,4 @@ +{ + "title": 1, + "name": 1 +} \ No newline at end of file diff --git a/tests/fixtures/SeederGeneratorTest/database_seeder.php b/tests/fixtures/SeederGeneratorTest/database_seeder.php new file mode 100644 index 0000000..271b53d --- /dev/null +++ b/tests/fixtures/SeederGeneratorTest/database_seeder.php @@ -0,0 +1,18 @@ +call(PostSeeder::class); + } +} \ No newline at end of file diff --git a/tests/fixtures/SeederGeneratorTest/post_seeder.php b/tests/fixtures/SeederGeneratorTest/post_seeder.php new file mode 100644 index 0000000..99b4f6e --- /dev/null +++ b/tests/fixtures/SeederGeneratorTest/post_seeder.php @@ -0,0 +1,21 @@ +make([ + 'user_id' => \App\Models\User::factory()->create()->id, + ]); + + \App\Models\Comment::factory()->count(10)->make([ + 'post_id' => $post->id, + ]); + + } +} \ No newline at end of file