diff --git a/.idea/develop.iml b/.idea/develop.iml index d5243986813..550267486ca 100644 --- a/.idea/develop.iml +++ b/.idea/develop.iml @@ -56,6 +56,13 @@ + + + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index f832763ba9c..7d493c3d6cc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -81,6 +81,8 @@ + + @@ -160,5 +162,7 @@ + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml index 2316b07ff5a..22fd55dc899 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -135,8 +135,6 @@ - - @@ -188,6 +186,13 @@ + + + + + + + diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml index 41f23c4c83d..c5034e93f2a 100644 --- a/.idea/phpspec.xml +++ b/.idea/phpspec.xml @@ -14,6 +14,9 @@ + + \ No newline at end of file diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml index 1aef5dbe234..c900718cad8 100644 --- a/.idea/phpunit.xml +++ b/.idea/phpunit.xml @@ -8,8 +8,8 @@ diff --git a/composer.json b/composer.json index fdcd56c5487..2716d0b496a 100644 --- a/composer.json +++ b/composer.json @@ -32,9 +32,14 @@ "pestphp/pest-plugin-type-coverage": "^2.8", "php-parallel-lint/php-parallel-lint": "^1.3", "phpstan/phpstan": "^1.8", + "psalm/plugin-laravel": "^2.11", "rector/rector": "^1.2.1", "squizlabs/php_codesniffer": "^3.7" }, + "replace": { + "symfony/polyfill-php72": "*", + "symfony/polyfill-php80": "*" + }, "conflict": { "symfony/string": ">=7.0" }, diff --git a/composer.lock b/composer.lock index b568753158d..dd2d6192165 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "456a940034f98973b71cc83c67ff3563", + "content-hash": "dd20ed0dc33c413deadf7b4543376db1", "packages": [ { "name": "brick/math", @@ -68,26 +68,26 @@ }, { "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^7.4 || ^8.0" }, "conflict": { - "doctrine/dbal": "<4.0.0 || >=5.0.0" + "doctrine/dbal": "<3.7.0 || >=4.0.0" }, "require-dev": { - "doctrine/dbal": "^4.0.0", + "doctrine/dbal": "^3.7.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/3.2.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" }, "funding": [ { @@ -133,7 +133,7 @@ "type": "tidelift" } ], - "time": "2024-02-09T16:56:22+00:00" + "time": "2023-12-11T17:09:12+00:00" }, { "name": "dflydev/dot-access-data", @@ -1123,11 +1123,11 @@ }, { "name": "hyde/framework", - "version": "dev-main", + "version": "dev-master", "dist": { "type": "path", "url": "./packages/framework", - "reference": "784479be93b9882e4416fcec249de2e839f72df4" + "reference": "4512c1ec8a45b9ab81ab3f97efb1c1184e91ced6" }, "require": { "illuminate/support": "^10.0", @@ -1173,7 +1173,7 @@ }, { "name": "hyde/publications", - "version": "dev-main", + "version": "dev-increase-type-coverage", "dist": { "type": "path", "url": "./packages/publications", @@ -1220,7 +1220,7 @@ }, { "name": "hyde/ui-kit", - "version": "dev-main", + "version": "dev-increase-type-coverage", "dist": { "type": "path", "url": "./packages/ui-kit", @@ -5616,159 +5616,6 @@ ], "time": "2024-06-19T12:30:46+00:00" }, - { - "name": "symfony/polyfill-php72", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-06-19T12:30:46+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-05-31T15:07:36+00:00" - }, { "name": "symfony/polyfill-php83", "version": "v1.30.0", @@ -6903,6 +6750,152 @@ ], "time": "2024-04-13T18:00:56+00:00" }, + { + "name": "barryvdh/laravel-ide-helper", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-ide-helper.git", + "reference": "591e7d665fbab8a3b682e451641706341573eb80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/591e7d665fbab8a3b682e451641706341573eb80", + "reference": "591e7d665fbab8a3b682e451641706341573eb80", + "shasum": "" + }, + "require": { + "barryvdh/reflection-docblock": "^2.1.1", + "composer/class-map-generator": "^1.0", + "ext-json": "*", + "illuminate/console": "^10 || ^11", + "illuminate/database": "^10.38 || ^11", + "illuminate/filesystem": "^10 || ^11", + "illuminate/support": "^10 || ^11", + "nikic/php-parser": "^4.18 || ^5", + "php": "^8.1", + "phpdocumentor/type-resolver": "^1.1.0" + }, + "require-dev": { + "ext-pdo_sqlite": "*", + "friendsofphp/php-cs-fixer": "^3", + "illuminate/config": "^9 || ^10 || ^11", + "illuminate/view": "^9 || ^10 || ^11", + "mockery/mockery": "^1.4", + "orchestra/testbench": "^8 || ^9", + "phpunit/phpunit": "^10.5", + "spatie/phpunit-snapshot-assertions": "^4 || ^5", + "vimeo/psalm": "^5.4" + }, + "suggest": { + "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\LaravelIdeHelper\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", + "keywords": [ + "autocomplete", + "codeintel", + "helper", + "ide", + "laravel", + "netbeans", + "phpdoc", + "phpstorm", + "sublime" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2024-07-12T14:20:51+00:00" + }, + { + "name": "barryvdh/reflection-docblock", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/ReflectionDocBlock.git", + "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", + "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.14|^9" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Barryvdh": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "support": { + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" + }, + "time": "2023-06-14T05:06:27+00:00" + }, { "name": "brianium/paratest", "version": "v7.3.1", @@ -6999,36 +6992,109 @@ "time": "2023-10-31T09:24:17+00:00" }, { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", + "name": "composer/class-map-generator", + "version": "1.3.4", "source": { "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + "url": "https://github.com/composer/class-map-generator.git", + "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", + "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" }, - "type": "composer-plugin", + "type": "library", "extra": { - "class": "PackageVersions\\Installer", "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.3.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:13:04+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" } }, "autoload": { @@ -7832,7 +7898,7 @@ }, { "name": "hyde/monorepo-dev-tools", - "version": "dev-main", + "version": "dev-increase-type-coverage", "dist": { "type": "path", "url": "./monorepo/DevTools", @@ -7858,11 +7924,11 @@ }, { "name": "hyde/realtime-compiler", - "version": "dev-main", + "version": "dev-master", "dist": { "type": "path", "url": "./packages/realtime-compiler", - "reference": "6a68a736b9cb318aaaa6ee9c82ea508b0d45a985" + "reference": "8dede06db83f19a82dd542ca52504a8f2327acfa" }, "require": { "desilva/microserve": "^2.0", @@ -7914,7 +7980,7 @@ }, { "name": "hyde/testing", - "version": "dev-main", + "version": "dev-increase-type-coverage", "dist": { "type": "path", "url": "./packages/testing", @@ -7963,6 +8029,143 @@ "relative": true } }, + { + "name": "illuminate/database", + "version": "v10.48.16", + "source": { + "type": "git", + "url": "https://github.com/illuminate/database.git", + "reference": "ec00738a49e9fb0db4fc19b5d70310e214b32bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/database/zipball/ec00738a49e9fb0db4fc19b5d70310e214b32bff", + "reference": "ec00738a49e9fb0db4fc19b5d70310e214b32bff", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "ext-pdo": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0" + }, + "suggest": { + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-filter": "Required to use the Postgres database driver.", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", + "illuminate/console": "Required to use the database commands (^10.0).", + "illuminate/events": "Required to use the observers with Eloquent (^10.0).", + "illuminate/filesystem": "Required to use the migrations (^10.0).", + "illuminate/pagination": "Required to paginate the result set (^10.0).", + "symfony/finder": "Required to use Eloquent model factories (^6.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Database\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Database package.", + "homepage": "https://laravel.com", + "keywords": [ + "database", + "laravel", + "orm", + "sql" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-07-03T21:35:00+00:00" + }, + { + "name": "illuminate/routing", + "version": "v10.48.16", + "source": { + "type": "git", + "url": "https://github.com/illuminate/routing.git", + "reference": "db74937fd10c0b2cbbe095a34f9c73e6f19c3d16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/routing/zipball/db74937fd10c0b2cbbe095a34f9c73e6f19c3d16", + "reference": "db74937fd10c0b2cbbe095a34f9c73e6f19c3d16", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "ext-hash": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/http": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/pipeline": "^10.0", + "illuminate/session": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.2", + "symfony/routing": "^6.2" + }, + "suggest": { + "illuminate/console": "Required to use the make commands (^10.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Routing package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-05-27T13:41:52+00:00" + }, { "name": "jean85/pretty-package-versions", "version": "2.0.6", @@ -8456,6 +8659,98 @@ }, "time": "2024-03-17T08:10:35+00:00" }, + { + "name": "orchestra/testbench-core", + "version": "v8.25.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "17cbaf568fe6c84039295b3de09a1b049339d928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/17cbaf568fe6c84039295b3de09a1b049339d928", + "reference": "17cbaf568fe6c84039295b3de09a1b049339d928", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "php": "^8.1", + "symfony/polyfill-php83": "^1.28" + }, + "conflict": { + "brianium/paratest": "<6.4.0 || >=7.0.0 <7.1.4 || >=8.0.0", + "laravel/framework": "<10.48.2 || >=11.0.0", + "nunomaduro/collision": "<6.4.0 || >=7.0.0 <7.4.0 || >=8.0.0", + "orchestra/testbench-dusk": "<8.21.0 || >=9.0.0", + "orchestra/workbench": "<1.0.0", + "phpunit/phpunit": "<9.6.0 || >=10.6.0" + }, + "require-dev": { + "fakerphp/faker": "^1.21", + "laravel/framework": "^10.48.2", + "laravel/pint": "^1.6", + "mockery/mockery": "^1.5.1", + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^10.1", + "spatie/laravel-ray": "^1.32.4", + "symfony/process": "^6.2", + "symfony/yaml": "^6.2", + "vlucas/phpdotenv": "^5.4.1" + }, + "suggest": { + "brianium/paratest": "Allow using parallel testing (^6.4 || ^7.1.4).", + "ext-pcntl": "Required to use all features of the console signal trapping.", + "fakerphp/faker": "Allow using Faker for testing (^1.21).", + "laravel/framework": "Required for testing (^10.48.2).", + "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.4).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^9.6 || ^10.1).", + "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^6.2).", + "symfony/yaml": "Required for Testbench CLI (^6.2).", + "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-07-13T06:54:00+00:00" + }, { "name": "pestphp/pest", "version": "v2.34.9", @@ -9725,6 +10020,78 @@ ], "time": "2024-04-05T04:39:01+00:00" }, + { + "name": "psalm/plugin-laravel", + "version": "v2.11.0", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-laravel.git", + "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-laravel/zipball/ffd51399b672959331ed3ef4eaae13984474e2f0", + "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0", + "shasum": "" + }, + "require": { + "barryvdh/laravel-ide-helper": "^2.13 || ^3.0", + "ext-simplexml": "*", + "illuminate/config": "^10.48 || ^11.0", + "illuminate/container": "^10.48 || ^11.0", + "illuminate/contracts": "^10.48 || ^11.0", + "illuminate/database": "^10.48 || ^11.0", + "illuminate/events": "^10.48 || ^11.0", + "illuminate/http": "^10.48 || ^11.0", + "illuminate/routing": "^10.48 || ^11.0", + "illuminate/support": "^10.48 || ^11.0", + "illuminate/view": "^10.48 || ^11.0", + "nikic/php-parser": "^4.18 || ^5.0", + "orchestra/testbench-core": "^8.22 || ^9.0", + "php": "^8.1", + "symfony/console": "^6.0 || ^7.0", + "symfony/finder": "^6.0 || ^7.0", + "vimeo/psalm": "^5.20" + }, + "require-dev": { + "laravel/framework": "^10.48 || ^11.0", + "phpunit/phpunit": "^10.5 || ^11.0", + "phpyh/psalm-tester": "^0.1.0", + "ramsey/collection": "^1.3", + "rector/rector": "^1.0", + "slevomat/coding-standard": "^8.8", + "squizlabs/php_codesniffer": "*", + "symfony/http-foundation": "^6.0 || ^7.0" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\LaravelPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\LaravelPlugin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown", + "email": "github@muglug.com" + } + ], + "description": "Psalm plugin for Laravel", + "homepage": "https://github.com/psalm/psalm-plugin-laravel", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-laravel/issues", + "source": "https://github.com/psalm/psalm-plugin-laravel/tree/v2.11.0" + }, + "time": "2024-03-19T21:40:03+00:00" + }, { "name": "psy/psysh", "version": "v0.12.4", @@ -10989,6 +11356,89 @@ ], "time": "2024-06-28T09:49:33+00:00" }, + { + "name": "symfony/routing", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.4.8" + }, + "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-05-31T14:49:08+00:00" + }, { "name": "ta-tikoma/phpunit-architecture-test", "version": "0.8.4", @@ -11154,6 +11604,116 @@ } ], "time": "2024-04-26T13:56:40+00:00" + }, + { + "name": "vimeo/psalm", + "version": "5.25.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", + "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer-runtime-api": "^2", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^2.0 || ^3.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.16", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "spatie/array-to-xml": "^2.17.0 || ^3.0", + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "nikic/php-parser": "4.17.0" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "amphp/phpunit-util": "^2.0", + "bamarni/composer-bin-plugin": "^1.4", + "brianium/paratest": "^6.9", + "ext-curl": "*", + "mockery/mockery": "^1.5", + "nunomaduro/mock-final-classes": "^1.1", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "project", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev", + "dev-4.x": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psalm\\": "src/Psalm/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php", + "static analysis" + ], + "support": { + "docs": "https://psalm.dev/docs", + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm" + }, + "time": "2024-06-16T15:08:35+00:00" } ], "aliases": [], diff --git a/docs/_data/partials/hyde-pages-api/hyde-kernel-foundation-methods.md b/docs/_data/partials/hyde-pages-api/hyde-kernel-foundation-methods.md index b328574b419..9085ef46086 100644 --- a/docs/_data/partials/hyde-pages-api/hyde-kernel-foundation-methods.md +++ b/docs/_data/partials/hyde-pages-api/hyde-kernel-foundation-methods.md @@ -1,14 +1,14 @@
- + #### `files()` No description provided. ```php -Hyde::files(): \Hyde\Foundation\Kernel\FileCollection +Hyde::files(): Hyde\Foundation\Kernel\FileCollection ``` #### `pages()` @@ -16,7 +16,7 @@ Hyde::files(): \Hyde\Foundation\Kernel\FileCollection +Hyde::pages(): Hyde\Foundation\Kernel\PageCollection ``` #### `routes()` @@ -24,7 +24,7 @@ Hyde::pages(): \Hyde\Foundation\Kernel\PageCollection +Hyde::routes(): Hyde\Foundation\Kernel\RouteCollection ``` diff --git a/monorepo/stubs/Application.php b/monorepo/stubs/Application.php new file mode 100644 index 00000000000..aeb29f35484 --- /dev/null +++ b/monorepo/stubs/Application.php @@ -0,0 +1,16 @@ + $abstract + * @return T + */ + public function make(string $abstract) + { + } +} diff --git a/monorepo/stubs/helpers.php b/monorepo/stubs/helpers.php new file mode 100644 index 00000000000..821a819bebd --- /dev/null +++ b/monorepo/stubs/helpers.php @@ -0,0 +1,50 @@ + $abstract + * @return T + */ +function app(string $abstract) +{ +} + +/** + * @template T + * + * @param T $value + * @param (callable(T): mixed)|null $callback + * @return ($callback is null ? HigherOrderTapProxy : T) + * + * @psalm-assert-if-true !null $callback + * + * @psalm-suppress ImplicitToStringCast + */ +function tap($value, $callback = null) +{ +} + +/** + * @template T + */ +class HigherOrderTapProxy +{ + /** + * @param T $target + */ + public function __construct($target) + { + } + + /** + * @param string $method + * @param array $parameters + * @return T + * + * @psalm-suppress MixedInferredReturnType, MixedReturnStatement + */ + public function __call($method, $parameters) + { + } +} diff --git a/packages/framework/src/Foundation/Concerns/BaseFoundationCollection.php b/packages/framework/src/Foundation/Concerns/BaseFoundationCollection.php index c11dbe9c431..0b97b626d19 100644 --- a/packages/framework/src/Foundation/Concerns/BaseFoundationCollection.php +++ b/packages/framework/src/Foundation/Concerns/BaseFoundationCollection.php @@ -13,6 +13,11 @@ /** * Base class for the kernel auto-discovery collections. * + * @template TKey of array-key + * @template TValue + * + * @extends \Illuminate\Support\Collection + * * These collections are the heart of the discovery process. * * They are responsible for discovering the files, pages, and routes, diff --git a/packages/framework/src/Foundation/Concerns/HandlesFoundationCollections.php b/packages/framework/src/Foundation/Concerns/HandlesFoundationCollections.php index 3192ee0ced9..58b137ed02a 100644 --- a/packages/framework/src/Foundation/Concerns/HandlesFoundationCollections.php +++ b/packages/framework/src/Foundation/Concerns/HandlesFoundationCollections.php @@ -15,7 +15,6 @@ */ trait HandlesFoundationCollections { - /** @return \Hyde\Foundation\Kernel\FileCollection */ public function files(): FileCollection { $this->needsToBeBooted(); @@ -23,7 +22,6 @@ public function files(): FileCollection return $this->files; } - /** @return \Hyde\Foundation\Kernel\PageCollection */ public function pages(): PageCollection { $this->needsToBeBooted(); @@ -31,7 +29,6 @@ public function pages(): PageCollection return $this->pages; } - /** @return \Hyde\Foundation\Kernel\RouteCollection */ public function routes(): RouteCollection { $this->needsToBeBooted(); diff --git a/packages/framework/src/Foundation/Facades/Files.php b/packages/framework/src/Foundation/Facades/Files.php index 79d2acdc005..65e78467e9f 100644 --- a/packages/framework/src/Foundation/Facades/Files.php +++ b/packages/framework/src/Foundation/Facades/Files.php @@ -13,7 +13,6 @@ */ class Files extends Facade { - /** @return \Hyde\Foundation\Kernel\FileCollection */ public static function getFacadeRoot(): FileCollection { return HydeKernel::getInstance()->files(); diff --git a/packages/framework/src/Foundation/Facades/Pages.php b/packages/framework/src/Foundation/Facades/Pages.php index a06577b799c..42b37c664c4 100644 --- a/packages/framework/src/Foundation/Facades/Pages.php +++ b/packages/framework/src/Foundation/Facades/Pages.php @@ -13,7 +13,6 @@ */ class Pages extends Facade { - /** @return \Hyde\Foundation\Kernel\PageCollection */ public static function getFacadeRoot(): PageCollection { return HydeKernel::getInstance()->pages(); diff --git a/packages/framework/src/Foundation/Facades/Routes.php b/packages/framework/src/Foundation/Facades/Routes.php index 1a211480f2e..f82acc2695e 100644 --- a/packages/framework/src/Foundation/Facades/Routes.php +++ b/packages/framework/src/Foundation/Facades/Routes.php @@ -19,7 +19,6 @@ */ class Routes extends Facade { - /** @return \Hyde\Foundation\Kernel\RouteCollection */ public static function getFacadeRoot(): RouteCollection { return HydeKernel::getInstance()->routes(); @@ -41,7 +40,6 @@ public static function getOrFail(string $routeKey): Route return static::getFacadeRoot()->getRoute($routeKey); } - /** @return \Hyde\Foundation\Kernel\RouteCollection<\Hyde\Support\Models\Route> */ public static function all(): RouteCollection { return static::getFacadeRoot()->getRoutes(); diff --git a/packages/framework/src/Foundation/Internal/LoadYamlConfiguration.php b/packages/framework/src/Foundation/Internal/LoadYamlConfiguration.php index d5d75accb3c..aae50195185 100644 --- a/packages/framework/src/Foundation/Internal/LoadYamlConfiguration.php +++ b/packages/framework/src/Foundation/Internal/LoadYamlConfiguration.php @@ -26,6 +26,8 @@ class LoadYamlConfiguration { protected YamlConfigurationRepository $yaml; + + /** @var array> */ protected array $config; public function bootstrap(Application $app): void @@ -33,7 +35,10 @@ public function bootstrap(Application $app): void $this->yaml = $app->make(YamlConfigurationRepository::class); if ($this->yaml->hasYamlConfigFile()) { - tap($app->make('config'), function (Repository $config): void { + /** @var Repository $config */ + $config = $app->make('config'); + + tap($config, function (Repository $config): void { $this->config = $config->all(); $this->mergeParsedConfiguration(); })->set($this->config); diff --git a/packages/framework/src/Foundation/Kernel/FileCollection.php b/packages/framework/src/Foundation/Kernel/FileCollection.php index 063d04b05d6..9013be74f77 100644 --- a/packages/framework/src/Foundation/Kernel/FileCollection.php +++ b/packages/framework/src/Foundation/Kernel/FileCollection.php @@ -18,7 +18,7 @@ * * @template T of \Hyde\Support\Filesystem\SourceFile * - * @template-extends \Hyde\Foundation\Concerns\BaseFoundationCollection + * @extends \Hyde\Foundation\Concerns\BaseFoundationCollection * * @property array $items The files in the collection. * @@ -71,10 +71,7 @@ public function getFile(string $path): SourceFile return $this->get($path) ?? throw new FileNotFoundException($path); } - /** - * @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass - * @return \Hyde\Foundation\Kernel\FileCollection - */ + /** @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass */ public function getFiles(?string $pageClass = null): FileCollection { return $pageClass ? $this->filter(function (SourceFile $file) use ($pageClass): bool { diff --git a/packages/framework/src/Foundation/Kernel/PageCollection.php b/packages/framework/src/Foundation/Kernel/PageCollection.php index 4739a17743b..4cc4d85eac2 100644 --- a/packages/framework/src/Foundation/Kernel/PageCollection.php +++ b/packages/framework/src/Foundation/Kernel/PageCollection.php @@ -14,7 +14,7 @@ * * @template T of \Hyde\Pages\Concerns\HydePage * - * @template-extends \Hyde\Foundation\Concerns\BaseFoundationCollection + * @extends \Hyde\Foundation\Concerns\BaseFoundationCollection * * @property array $items The pages in the collection. * @@ -59,10 +59,7 @@ public function getPage(string $sourcePath): HydePage return $this->get($sourcePath) ?? throw new FileNotFoundException($sourcePath); } - /** - * @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass - * @return \Hyde\Foundation\Kernel\PageCollection - */ + /** @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass */ public function getPages(?string $pageClass = null): PageCollection { return $pageClass ? $this->filter(function (HydePage $page) use ($pageClass): bool { diff --git a/packages/framework/src/Foundation/Kernel/RouteCollection.php b/packages/framework/src/Foundation/Kernel/RouteCollection.php index a93b8eab995..fe71995adb6 100644 --- a/packages/framework/src/Foundation/Kernel/RouteCollection.php +++ b/packages/framework/src/Foundation/Kernel/RouteCollection.php @@ -15,7 +15,7 @@ * * @template T of \Hyde\Support\Models\Route * - * @template-extends \Hyde\Foundation\Concerns\BaseFoundationCollection + * @extends \Hyde\Foundation\Concerns\BaseFoundationCollection * * @property array $items The routes in the collection. * @@ -53,10 +53,7 @@ public function getRoute(string $routeKey): Route return $this->get($routeKey) ?? throw new RouteNotFoundException($routeKey); } - /** - * @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass - * @return \Hyde\Foundation\Kernel\RouteCollection - */ + /** @param class-string<\Hyde\Pages\Concerns\HydePage>|null $pageClass */ public function getRoutes(?string $pageClass = null): RouteCollection { return $pageClass ? $this->filter(function (Route $route) use ($pageClass): bool { diff --git a/packages/framework/src/Framework/Features/Metadata/MetadataBag.php b/packages/framework/src/Framework/Features/Metadata/MetadataBag.php index ff8a036d516..51e55491691 100644 --- a/packages/framework/src/Framework/Features/Metadata/MetadataBag.php +++ b/packages/framework/src/Framework/Features/Metadata/MetadataBag.php @@ -54,26 +54,19 @@ public function get(): array public function add(MetadataElementContract|string $element): static { - return match (true) { - $element instanceof LinkElement => $this->addElement('links', $element), - $element instanceof MetadataElement => $this->addElement('metadata', $element), - $element instanceof OpenGraphElement => $this->addElement('properties', $element), + match (true) { + $element instanceof LinkElement => $this->links[$element->uniqueKey()] = $element, + $element instanceof MetadataElement => $this->metadata[$element->uniqueKey()] = $element, + $element instanceof OpenGraphElement => $this->properties[$element->uniqueKey()] = $element, default => $this->addGenericElement((string) $element), }; - } - - protected function addElement(string $type, MetadataElementContract $element): static - { - $this->{$type}[$element->uniqueKey()] = $element; return $this; } - protected function addGenericElement(string $element): static + protected function addGenericElement(string $element): void { $this->generics[] = $element; - - return $this; } /** @return array */ diff --git a/packages/framework/src/Hyde.php b/packages/framework/src/Hyde.php index 01167b102a6..860bd77cccb 100644 --- a/packages/framework/src/Hyde.php +++ b/packages/framework/src/Hyde.php @@ -13,7 +13,6 @@ use Hyde\Foundation\Kernel\RouteCollection; use Hyde\Pages\Concerns\HydePage; use Hyde\Support\Models\Route; -use Hyde\Support\Filesystem\SourceFile; use Illuminate\Support\Facades\Facade; use Illuminate\Support\HtmlString; use JetBrains\PhpStorm\Pure; @@ -53,9 +52,9 @@ * @method static string getMediaDirectory() * @method static string getMediaOutputDirectory() * @method static Features features() - * @method static FileCollection files() - * @method static PageCollection pages() - * @method static RouteCollection routes() + * @method static FileCollection files() + * @method static PageCollection pages() + * @method static RouteCollection routes() * @method static Route|null currentRoute() * @method static HydeKernel getInstance() * @method static Filesystem filesystem() diff --git a/psalm.xml b/psalm.xml index 1b04e852b4b..dc8a912cb04 100644 --- a/psalm.xml +++ b/psalm.xml @@ -16,4 +16,16 @@ + + + + + + + + + + + +