diff --git a/.editorconfig b/.editorconfig index 6616e4a..edd7a0f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ trim_trailing_whitespace = true insert_final_newline = false trim_trailing_whitespace = false -[*.{css,js,ts,svg,xml,yml,yaml}] +[*.{css,js,ts,svg,xml,neon,yml,yaml}] indent_size = 2 [resources/**.conf] diff --git a/.env.example b/.env.example deleted file mode 100644 index c2c0db7..0000000 --- a/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -APP_URL=http://localhost:8000 - -DB_CONNECTION=mysql -DB_HOST='127.0.0.1' -DB_DATABASE=creasi_test -DB_USERNAME=creasico -DB_PASSWORD= diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 557806e..7ee1d7d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: pull-requests: write tests: - name: Test on PHP ${{ matrix.php }} with DB ${{ matrix.db }} + name: Test on PHP ${{ matrix.php }} Laravel ${{ matrix.laravel }} DB ${{ matrix.db }} runs-on: ubuntu-latest needs: configs outputs: @@ -69,8 +69,12 @@ jobs: strategy: fail-fast: false matrix: - php: [8.1, 8.2] db: ['mysql', 'pgsql'] + laravel: ['10.x', '11.x'] + php: [8.1, 8.2, 8.3] + exclude: + - php: 8.1 + laravel: '11.x' steps: - name: Checkout @@ -90,18 +94,20 @@ jobs: uses: actions/cache@v4 with: path: ${{ needs.configs.outputs.composer-cache }} - key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-${{ matrix.php }}-composer- + key: ${{ matrix.php }}-${{ matrix.laravel }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ matrix.php }}-${{ matrix.laravel }}-composer- - name: Install dependencies - run: composer update --prefer-dist --no-interaction --no-progress + run: | + composer require "laravel/framework=${{ matrix.laravel }}" --no-update + composer update --prefer-dist --no-interaction --no-progress - name: Run tests run: composer test -- --coverage - name: Generate reports for CodeClimate id: reports - if: ${{ github.actor != 'dependabot[bot]' || needs.configs.outputs.should-reports == '1' }} + if: ${{ matrix.laravel == '10.x' && ( github.actor != 'dependabot[bot]' || needs.configs.outputs.should-reports == '1' ) }} env: COVERAGE_FILE: tests/reports/clover.xml CODECLIMATE_REPORT: tests/reports/codeclimate.${{ matrix.php }}.json @@ -114,7 +120,7 @@ jobs: - name: Upload tests reports uses: actions/upload-artifact@v4 - if: ${{ github.actor != 'dependabot[bot]' || needs.configs.outputs.should-reports == '1' }} + if: ${{ matrix.laravel == '10.x' && ( github.actor != 'dependabot[bot]' || needs.configs.outputs.should-reports == '1' ) }} with: name: test-reports-${{ matrix.php }}-${{ matrix.db }} path: tests/reports diff --git a/composer.json b/composer.json index 67f3e90..fbb2a63 100644 --- a/composer.json +++ b/composer.json @@ -50,6 +50,10 @@ "@build", "@php vendor/bin/testbench serve" ], + "tinker": [ + "Composer\\Config::disableProcessTimeout", + "@php vendor/bin/testbench tinker" + ], "lint": [ "@php vendor/bin/pint", "@php vendor/bin/phpstan analyse" @@ -71,14 +75,14 @@ "require": { "php": "^8.1", "creasi/laravel-nusa": "^0.1.1", - "laravel/framework": "^9.0|^10.0" + "laravel/framework": "^9.0|^10.0|^11.0" }, "require-dev": { "composer-runtime-api": "*", "laravel/pint": "^1.1", - "laravel/sanctum": "^3.2", - "nunomaduro/collision": "^7.4", - "orchestra/testbench": "^8.5" + "laravel/sanctum": "^3.2|^4.0", + "nunomaduro/collision": "^7.4|^8.0", + "orchestra/testbench": "^8.5|^9.0" }, "config": { "preferred-install": "dist", diff --git a/composer.lock b/composer.lock index bc235f4..8c8c175 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": "4aaf57a6a42373fdfd4020058f42a975", + "content-hash": "6f9d7ed30f8c45835475063e762eae69", "packages": [ { "name": "brick/math", @@ -63,26 +63,26 @@ }, { "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" }, @@ -112,7 +112,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": [ { @@ -128,32 +128,32 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "creasi/laravel-nusa", - "version": "v0.1.6", + "version": "v0.1.7", "source": { "type": "git", "url": "https://github.com/creasico/laravel-nusa.git", - "reference": "34943ad776a474c8e014b92b979c6dbb530d5ac7" + "reference": "433203109396057da2e02a0fcadc9b38b1f50fb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/creasico/laravel-nusa/zipball/34943ad776a474c8e014b92b979c6dbb530d5ac7", - "reference": "34943ad776a474c8e014b92b979c6dbb530d5ac7", + "url": "https://api.github.com/repos/creasico/laravel-nusa/zipball/433203109396057da2e02a0fcadc9b38b1f50fb9", + "reference": "433203109396057da2e02a0fcadc9b38b1f50fb9", "shasum": "" }, "require": { "ext-sqlite3": "*", - "laravel/framework": "^9.0|^10.0", + "laravel/framework": "^9.0|^10.0|^11.0", "php": "^8.1" }, "require-dev": { "composer-runtime-api": "*", "laravel/pint": "^1.1", - "nunomaduro/collision": "^7.4", - "orchestra/testbench": "^8.5" + "nunomaduro/collision": "^7.4|^8.0", + "orchestra/testbench": "^8.5|^9.0" }, "type": "library", "extra": { @@ -201,7 +201,7 @@ "type": "github" } ], - "time": "2024-02-06T21:35:41+00:00" + "time": "2024-03-13T01:44:53+00:00" }, { "name": "dflydev/dot-access-data", @@ -707,6 +707,331 @@ ], "time": "2023-11-12T22:16:48+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:35:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:19:20+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:05:35+00:00" + }, { "name": "guzzlehttp/uri-template", "version": "v1.0.3", @@ -795,16 +1120,16 @@ }, { "name": "laravel/framework", - "version": "v10.46.0", + "version": "v11.0.8", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "5e95946a8283a8d5c015035793f9c61c297e937f" + "reference": "0379a7ccb77e2029c43ce508fa76e251a0d68fce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/5e95946a8283a8d5c015035793f9c61c297e937f", - "reference": "5e95946a8283a8d5c015035793f9c61c297e937f", + "url": "https://api.github.com/repos/laravel/framework/zipball/0379a7ccb77e2029c43ce508fa76e251a0d68fce", + "reference": "0379a7ccb77e2029c43ce508fa76e251a0d68fce", "shasum": "" }, "require": { @@ -820,39 +1145,39 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.9", + "laravel/prompts": "^0.1.15", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.67", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", + "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": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.4", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, "conflict": { - "carbonphp/carbon-doctrine-types": ">=3.0", - "doctrine/dbal": ">=4.0", - "phpunit/phpunit": ">=11.0.0", + "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { @@ -892,36 +1217,35 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", + "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.5.1", + "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.18", - "pda/pheanstalk": "^4.0", + "orchestra/testbench-core": "^9.0.6", + "pda/pheanstalk": "^5.0", "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^10.0.7", + "phpunit/phpunit": "^10.5|^11.0", "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4", - "symfony/psr-http-message-bridge": "^2.0" + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "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.", @@ -933,31 +1257,31 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", + "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 (^9.5.8|^10.0.7).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "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": "10.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { @@ -997,7 +1321,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-02-27T16:46:54+00:00" + "time": "2024-03-21T14:15:49+00:00" }, { "name": "laravel/prompts", @@ -1306,16 +1630,16 @@ }, { "name": "league/flysystem", - "version": "3.24.0", + "version": "3.26.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675" + "reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675", - "reference": "b25a361508c407563b34fac6f64a8a17a8819675", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/072735c56cc0da00e10716dd90d5a7f7b40b36be", + "reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be", "shasum": "" }, "require": { @@ -1343,7 +1667,7 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.34", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", "sabre/dav": "^4.6.0" @@ -1380,7 +1704,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.24.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.26.0" }, "funding": [ { @@ -1392,20 +1716,20 @@ "type": "github" } ], - "time": "2024-02-04T12:10:17+00:00" + "time": "2024-03-25T11:49:53+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.1", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", - "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", "shasum": "" }, "require": { @@ -1439,8 +1763,7 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" }, "funding": [ { @@ -1452,7 +1775,7 @@ "type": "github" } ], - "time": "2024-01-26T18:25:23+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/mime-type-detection", @@ -1613,42 +1936,41 @@ }, { "name": "nesbot/carbon", - "version": "2.72.3", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" + "reference": "34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2", + "reference": "34ccf6f6b49c915421c7886c88c0cb77f3ebbfd2", "shasum": "" }, "require": { "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^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" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.18.0", + "kylekatarnls/multi-tester": "^2.2.0", + "ondrejmirtes/better-reflection": "^6.11.0.0", + "phpmd/phpmd": "^2.13.0", + "phpstan/extension-installer": "^1.3.0", + "phpstan/phpstan": "^1.10.20", + "phpunit/phpunit": "^10.2.2", + "squizlabs/php_codesniffer": "^3.7.2" }, "bin": [ "bin/carbon" @@ -1656,8 +1978,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -1716,7 +2038,7 @@ "type": "tidelift" } ], - "time": "2024-01-25T10:35:09+00:00" + "time": "2024-03-13T12:42:37+00:00" }, { "name": "nette/schema", @@ -1868,33 +2190,32 @@ }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.4" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -1903,6 +2224,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1934,7 +2258,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { @@ -1950,7 +2274,7 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "phpoption/phpoption", @@ -2178,6 +2502,166 @@ }, "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, { "name": "psr/log", "version": "3.0.0", @@ -2262,22 +2746,66 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], + "description": "A polyfill for getallheaders.", "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2021-10-29T13:26:27+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "ramsey/collection", @@ -2460,49 +2988,122 @@ ], "time": "2023-11-08T05:53:05+00:00" }, + { + "name": "symfony/clock", + "version": "v7.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/8b9d08887353d627d5f6c3bf3373b398b49051c2", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-03-02T12:46:12+00:00" + }, { "name": "symfony/console", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", - "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", + "url": "https://api.github.com/repos/symfony/console/zipball/6b099f3306f7c9c2d2786ed736d0026b2903205f", + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "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": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2536,7 +3137,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.4" + "source": "https://github.com/symfony/console/tree/v7.0.4" }, "funding": [ { @@ -2552,24 +3153,24 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229" + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee0f7ed5cf298cc019431bb3b3977ebc52b86229", - "reference": "ee0f7ed5cf298cc019431bb3b3977ebc52b86229", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -2601,7 +3202,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.3" + "source": "https://github.com/symfony/css-selector/tree/v7.0.3" }, "funding": [ { @@ -2617,7 +3218,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2688,22 +3289,22 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c725219bdf2afc59423c32793d5019d2a904e13a" + "reference": "677b24759decff69e65b1e9d1471d90f95ced880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a", - "reference": "c725219bdf2afc59423c32793d5019d2a904e13a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/677b24759decff69e65b1e9d1471d90f95ced880", + "reference": "677b24759decff69e65b1e9d1471d90f95ced880", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -2712,7 +3313,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -2743,7 +3344,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.4" + "source": "https://github.com/symfony/error-handler/tree/v7.0.4" }, "funding": [ { @@ -2759,28 +3360,28 @@ "type": "tidelift" } ], - "time": "2024-02-22T20:27:10+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -2789,13 +3390,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^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/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": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2823,7 +3424,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { @@ -2839,7 +3440,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2919,23 +3520,23 @@ }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2963,7 +3564,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -2979,40 +3580,40 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" + "reference": "439fdfdd344943254b1ef6278613e79040548045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/439fdfdd344943254b1ef6278613e79040548045", + "reference": "439fdfdd344943254b1ef6278613e79040548045", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3040,7 +3641,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" + "source": "https://github.com/symfony/http-foundation/tree/v7.0.4" }, "funding": [ { @@ -3056,76 +3657,75 @@ "type": "tidelift" } ], - "time": "2024-02-08T15:01:18+00:00" + "time": "2024-02-08T19:22:56+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.4", + "version": "v7.0.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "7a186f64a7f02787c04e8476538624d6aa888e42" + "reference": "37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7a186f64a7f02787c04e8476538624d6aa888e42", - "reference": "7a186f64a7f02787c04e8476538624d6aa888e42", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72", + "reference": "37c24ca28f65e3121a68f3dd4daeb36fb1fa2a72", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.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": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^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": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -3153,7 +3753,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.0.5" }, "funding": [ { @@ -3169,43 +3769,43 @@ "type": "tidelift" } ], - "time": "2024-02-27T06:32:13+00:00" + "time": "2024-03-04T21:05:24+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" + "reference": "72e16d87bf50a3ce195b9470c06bb9d7b816ea85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", - "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/72e16d87bf50a3ce195b9470c06bb9d7b816ea85", + "reference": "72e16d87bf50a3ce195b9470c06bb9d7b816ea85", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "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": { @@ -3233,7 +3833,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.4" + "source": "https://github.com/symfony/mailer/tree/v7.0.4" }, "funding": [ { @@ -3249,25 +3849,24 @@ "type": "tidelift" } ], - "time": "2024-02-03T21:33:47+00:00" + "time": "2024-02-03T21:34:19+00:00" }, { "name": "symfony/mime", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "5017e0a9398c77090b7694be46f20eb796262a34" + "reference": "c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", - "reference": "5017e0a9398c77090b7694be46f20eb796262a34", + "url": "https://api.github.com/repos/symfony/mime/zipball/c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716", + "reference": "c1ffe24ba6fdc3e3f0f3fcb93519103b326a3716", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -3275,17 +3874,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3317,7 +3916,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.3" + "source": "https://github.com/symfony/mime/tree/v7.0.3" }, "funding": [ { @@ -3333,7 +3932,7 @@ "type": "tidelift" } ], - "time": "2024-01-30T08:32:12+00:00" + "time": "2024-01-30T08:34:29+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4048,20 +4647,20 @@ }, { "name": "symfony/process", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "710e27879e9be3395de2b98da3f52a946039f297" + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", - "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -4089,7 +4688,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.4" + "source": "https://github.com/symfony/process/tree/v7.0.4" }, "funding": [ { @@ -4105,40 +4704,38 @@ "type": "tidelift" } ], - "time": "2024-02-20T12:31:00+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/routing", - "version": "v6.4.3", + "version": "v7.0.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842" + "reference": "ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842", - "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842", + "url": "https://api.github.com/repos/symfony/routing/zipball/ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19", + "reference": "ba6bf07d43289c6a4b4591ddb75bc3bc5f069c19", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^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" + "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": { @@ -4172,7 +4769,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.3" + "source": "https://github.com/symfony/routing/tree/v7.0.5" }, "funding": [ { @@ -4188,7 +4785,7 @@ "type": "tidelift" } ], - "time": "2024-01-30T13:55:02+00:00" + "time": "2024-02-27T12:34:35+00:00" }, { "name": "symfony/service-contracts", @@ -4274,20 +4871,20 @@ }, { "name": "symfony/string", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4297,11 +4894,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4340,7 +4937,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.4" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -4356,37 +4953,36 @@ "type": "tidelift" } ], - "time": "2024-02-01T13:16:41+00:00" + "time": "2024-02-01T13:17:36+00:00" }, { "name": "symfony/translation", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", + "url": "https://api.github.com/repos/symfony/translation/zipball/5b75e872f7d135d7abb4613809fadc8d9f3d30a0", + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" @@ -4394,17 +4990,17 @@ "require-dev": { "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4435,7 +5031,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.4" + "source": "https://github.com/symfony/translation/tree/v7.0.4" }, "funding": [ { @@ -4451,7 +5047,7 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:16:58+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/translation-contracts", @@ -4533,24 +5129,24 @@ }, { "name": "symfony/uid", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "url": "https://api.github.com/repos/symfony/uid/zipball/87cedaf3fabd7b733859d4d77aa4ca598259054b", + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4587,7 +5183,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.3" + "source": "https://github.com/symfony/uid/tree/v7.0.3" }, "funding": [ { @@ -4603,38 +5199,36 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b439823f04c98b84d4366c79507e9da6230944b1" + "reference": "e03ad7c1535e623edbb94c22cc42353e488c6670" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1", - "reference": "b439823f04c98b84d4366c79507e9da6230944b1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e03ad7c1535e623edbb94c22cc42353e488c6670", + "reference": "e03ad7c1535e623edbb94c22cc42353e488c6670", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -4672,7 +5266,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.4" }, "funding": [ { @@ -4688,7 +5282,7 @@ "type": "tidelift" } ], - "time": "2024-02-15T11:23:52+00:00" + "time": "2024-02-15T11:33:06+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5176,122 +5770,6 @@ ], "time": "2023-11-03T12:00:00+00:00" }, - { - "name": "guzzlehttp/psr7", - "version": "2.6.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-12-03T20:05:35+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", @@ -5411,37 +5889,34 @@ }, { "name": "laravel/sanctum", - "version": "v3.3.3", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + "reference": "9e6e561308cace166de9ceae4ced820309fa8e13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/9e6e561308cace166de9ceae4ced820309fa8e13", + "reference": "9e6e561308cace166de9ceae4ced820309fa8e13", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^9.21|^10.0", - "illuminate/contracts": "^9.21|^10.0", - "illuminate/database": "^9.21|^10.0", - "illuminate/support": "^9.21|^10.0", - "php": "^8.0.2" + "illuminate/console": "^11.0", + "illuminate/contracts": "^11.0", + "illuminate/database": "^11.0", + "illuminate/support": "^11.0", + "php": "^8.2" }, "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.28.2|^8.8.3", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, "laravel": { "providers": [ "Laravel\\Sanctum\\SanctumServiceProvider" @@ -5473,7 +5948,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-12-19T18:44:48+00:00" + "time": "2024-03-12T14:07:05+00:00" }, { "name": "laravel/tinker", @@ -5543,16 +6018,16 @@ }, { "name": "mockery/mockery", - "version": "1.6.7", + "version": "1.6.11", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + "reference": "81a161d0b135df89951abd52296adf97deb0723d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", "shasum": "" }, "require": { @@ -5564,8 +6039,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "symplify/easy-coding-standard": "^12.0.8" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -5622,7 +6097,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-12-10T02:24:34+00:00" + "time": "2024-03-21T18:34:15+00:00" }, { "name": "myclabs/deep-copy", @@ -5685,16 +6160,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.0.0", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", - "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { @@ -5737,46 +6212,44 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2024-01-07T17:17:35+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "nunomaduro/collision", - "version": "v7.10.0", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2" + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/49ec67fa7b002712da8526678abd651c09f375b2", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/13e5d538b95a744d85f447a321ce10adb28e9af9", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9", "shasum": "" }, "require": { - "filp/whoops": "^2.15.3", - "nunomaduro/termwind": "^1.15.1", - "php": "^8.1.0", - "symfony/console": "^6.3.4" + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.0.4" }, "conflict": { - "laravel/framework": ">=11.0.0" + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" }, "require-dev": { - "brianium/paratest": "^7.3.0", - "laravel/framework": "^10.28.0", - "laravel/pint": "^1.13.3", - "laravel/sail": "^1.25.0", - "laravel/sanctum": "^3.3.1", - "laravel/tinker": "^2.8.2", - "nunomaduro/larastan": "^2.6.4", - "orchestra/testbench-core": "^8.13.0", - "pestphp/pest": "^2.23.2", - "phpunit/phpunit": "^10.4.1", - "sebastian/environment": "^6.0.1", - "spatie/laravel-ignition": "^2.3.1" + "larastan/larastan": "^2.9.2", + "laravel/framework": "^11.0.0", + "laravel/pint": "^1.14.0", + "laravel/sail": "^1.28.2", + "laravel/sanctum": "^4.0.0", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.0.0", + "pestphp/pest": "^2.34.1 || ^3.0.0", + "sebastian/environment": "^6.0.1 || ^7.0.0" }, "type": "library", "extra": { @@ -5784,6 +6257,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -5835,42 +6311,42 @@ "type": "patreon" } ], - "time": "2023-10-11T15:45:01+00:00" + "time": "2024-03-06T16:20:09+00:00" }, { "name": "orchestra/canvas", - "version": "v8.11.7", + "version": "v9.0.1", "source": { "type": "git", "url": "https://github.com/orchestral/canvas.git", - "reference": "e4a0157f522222725f1559bde0da1091a91542fb" + "reference": "be710ff512ef00450d7984ddce77d34690addef9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/e4a0157f522222725f1559bde0da1091a91542fb", - "reference": "e4a0157f522222725f1559bde0da1091a91542fb", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/be710ff512ef00450d7984ddce77d34690addef9", + "reference": "be710ff512ef00450d7984ddce77d34690addef9", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "composer/semver": "^3.0", - "illuminate/console": "^10.39", - "illuminate/database": "^10.39", - "illuminate/filesystem": "^10.39", - "illuminate/support": "^10.39", - "orchestra/canvas-core": "^8.10.2", - "orchestra/testbench-core": "^8.19", - "php": "^8.1", + "illuminate/console": "^11.0.8", + "illuminate/database": "^11.0.8", + "illuminate/filesystem": "^11.0.8", + "illuminate/support": "^11.0.8", + "orchestra/canvas-core": "^9.0", + "orchestra/testbench-core": "^9.0", + "php": "^8.2", "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "require-dev": { - "laravel/framework": "^10.39", + "laravel/framework": "^11.0.8", "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.5", - "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.32.4" + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.6", + "phpunit/phpunit": "^11.0", + "spatie/laravel-ray": "^1.35" }, "bin": [ "canvas" @@ -5908,44 +6384,40 @@ "description": "Code Generators for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v8.11.7" + "source": "https://github.com/orchestral/canvas/tree/v9.0.1" }, - "time": "2024-02-07T10:29:23+00:00" + "time": "2024-03-21T14:37:20+00:00" }, { "name": "orchestra/canvas-core", - "version": "v8.10.2", + "version": "v9.0.0", "source": { "type": "git", "url": "https://github.com/orchestral/canvas-core.git", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc" + "reference": "3a29eecf324fe02e3e5628e422314b5cd1a80e48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", + "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": "^10.38.1", - "illuminate/filesystem": "^10.38.1", - "php": "^8.1", + "illuminate/console": "^11.0", + "illuminate/filesystem": "^11.0", + "php": "^8.2", "symfony/polyfill-php83": "^1.28" }, - "conflict": { - "orchestra/canvas": "<8.11.0", - "orchestra/testbench-core": "<8.2.0" - }, "require-dev": { - "laravel/framework": "^10.38.1", + "laravel/framework": "^11.0", "laravel/pint": "^1.6", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.19", + "orchestra/testbench-core": "^9.0", "phpstan/phpstan": "^1.10.6", "phpunit/phpunit": "^10.1", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "type": "library", "extra": { @@ -5980,35 +6452,35 @@ "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/v8.10.2" + "source": "https://github.com/orchestral/canvas-core/tree/v9.0.0" }, - "time": "2023-12-28T01:27:59+00:00" + "time": "2024-03-06T10:00:21+00:00" }, { "name": "orchestra/testbench", - "version": "v8.21.1", + "version": "v9.0.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "c22a81802a68e746e032edf65cbb68af28a52670" + "reference": "30640d88b173f9ab44341a282260993f454ed187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/c22a81802a68e746e032edf65cbb68af28a52670", - "reference": "c22a81802a68e746e032edf65cbb68af28a52670", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/30640d88b173f9ab44341a282260993f454ed187", + "reference": "30640d88b173f9ab44341a282260993f454ed187", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.40", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.21.1", - "orchestra/workbench": "^1.2 || ^8.2", - "php": "^8.1", - "phpunit/phpunit": "^9.6 || ^10.1", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.0", + "mockery/mockery": "^1.6", + "orchestra/testbench-core": "^9.0.6", + "orchestra/workbench": "^9.0", + "php": "^8.2", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", "vlucas/phpdotenv": "^5.4.1" }, "type": "library", @@ -6035,61 +6507,58 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v8.21.1" + "source": "https://github.com/orchestral/testbench/tree/v9.0.1" }, - "time": "2024-01-22T03:22:22+00:00" + "time": "2024-03-19T13:04:45+00:00" }, { "name": "orchestra/testbench-core", - "version": "v8.21.1", + "version": "v9.0.7", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "c6bf49a1b7ef4afe58e5bda676158c4de41f9a81" + "reference": "93adea230e675b4ac1983966475d116a13a146cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/c6bf49a1b7ef4afe58e5bda676158c4de41f9a81", - "reference": "c6bf49a1b7ef4afe58e5bda676158c4de41f9a81", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/93adea230e675b4ac1983966475d116a13a146cb", + "reference": "93adea230e675b4ac1983966475d116a13a146cb", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "php": "^8.1", + "php": "^8.2", "symfony/polyfill-php83": "^1.28" }, "conflict": { - "brianium/paratest": "<6.4.0 || >=7.0.0 <7.1.4 || >=8.0.0", - "laravel/framework": "<10.40 || >=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" + "brianium/paratest": "<7.3.0 || >=8.0.0", + "laravel/framework": "<11.0.3 || >=12.0.0", + "nunomaduro/collision": "<8.0.0 || >=9.0.0", + "phpunit/phpunit": "<10.5.0 || 11.0.0 || >=11.1.0" }, "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.40", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.0.3", "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.32.4", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.50", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "spatie/laravel-ray": "^1.35", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", "vlucas/phpdotenv": "^5.4.1" }, "suggest": { - "brianium/paratest": "Allow using parallel testing (^6.4 || ^7.1.4).", + "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.21).", - "laravel/framework": "Required for testing (^10.40).", - "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).", + "fakerphp/faker": "Allow using Faker for testing (^1.23).", + "laravel/framework": "Required for testing (^11.0.3).", + "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).", + "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": [ @@ -6129,50 +6598,45 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2024-01-22T01:45:47+00:00" + "time": "2024-03-25T04:45:39+00:00" }, { "name": "orchestra/workbench", - "version": "v8.2.1", + "version": "v9.0.0", "source": { "type": "git", "url": "https://github.com/orchestral/workbench.git", - "reference": "e8e6e4dcf6fb26ea1924c3581e49aa347691a8ea" + "reference": "979ebf99e4167b68446a4b60f5fcab9521d209cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/e8e6e4dcf6fb26ea1924c3581e49aa347691a8ea", - "reference": "e8e6e4dcf6fb26ea1924c3581e49aa347691a8ea", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/979ebf99e4167b68446a4b60f5fcab9521d209cd", + "reference": "979ebf99e4167b68446a4b60f5fcab9521d209cd", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.38.1", - "laravel/tinker": "^2.8.2", - "orchestra/canvas": "^8.11.4", - "orchestra/testbench-core": "^8.17", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.0", + "laravel/tinker": "^2.9", + "orchestra/canvas": "^9.0", + "orchestra/testbench-core": "^9.0", "php": "^8.1", - "spatie/laravel-ray": "^1.32.4", + "spatie/laravel-ray": "^1.35", "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "require-dev": { - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", - "phpstan/phpstan": "^1.10.7", - "phpunit/phpunit": "^10.1", - "symfony/process": "^6.2" + "laravel/pint": "^1.6", + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1.10.50", + "phpunit/phpunit": "^10.5 || ^11.0", + "symfony/process": "^7.0" }, "suggest": { "ext-pcntl": "Required to use all features of the console signal trapping." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5.x-dev" - } - }, "autoload": { "psr-4": { "Orchestra\\Workbench\\": "src/" @@ -6197,26 +6661,27 @@ ], "support": { "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v8.2.1" + "source": "https://github.com/orchestral/workbench/tree/v9.0.0" }, - "time": "2023-12-28T15:15:44+00:00" + "time": "2024-03-13T06:19:29+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -6257,9 +6722,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", @@ -6314,16 +6785,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.57", + "version": "1.10.65", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" + "reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", - "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3c657d057a0b7ecae19cb12db446bbc99d8839c6", + "reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6", "shasum": "" }, "require": { @@ -6372,39 +6843,39 @@ "type": "tidelift" } ], - "time": "2024-01-24T11:51:34+00:00" + "time": "2024-03-23T10:30:26+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.11", + "version": "11.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145" + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e35a2cbcabac0e6865fd373742ea432a3c34f92", + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", + "nikic/php-parser": "^5.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-text-template": "^4.0", + "sebastian/code-unit-reverse-lookup": "^4.0", + "sebastian/complexity": "^4.0", + "sebastian/environment": "^7.0", + "sebastian/lines-of-code": "^3.0", + "sebastian/version": "^5.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -6413,7 +6884,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-main": "11.0-dev" } }, "autoload": { @@ -6442,7 +6913,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.3" }, "funding": [ { @@ -6450,32 +6921,32 @@ "type": "github" } ], - "time": "2023-12-21T15:38:30+00:00" + "time": "2024-03-12T15:35:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/99e95c94ad9500daca992354fa09d7b99abe2210", + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -6503,7 +6974,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.0.0" }, "funding": [ { @@ -6511,28 +6982,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-02-02T06:05:04+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5d8d9355a16d8cc5a1305b0a85342cfa420612be", + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -6540,7 +7011,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -6566,7 +7037,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.0" }, "funding": [ { @@ -6574,32 +7046,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-02-02T06:05:50+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/d38f6cbff1cdb6f40b03c9811421561668cc133e", + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -6626,7 +7098,7 @@ "support": { "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" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.0" }, "funding": [ { @@ -6634,32 +7106,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-02-02T06:06:56+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8a59d9e25720482ee7fcdf296595e08795b84dc5", + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -6685,7 +7157,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.0" }, "funding": [ { @@ -6693,20 +7166,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-02-02T06:08:01+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.10", + "version": "11.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c" + "reference": "48ea58408879a9aad630022186398364051482fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/48ea58408879a9aad630022186398364051482fc", + "reference": "48ea58408879a9aad630022186398364051482fc", "shasum": "" }, "require": { @@ -6719,23 +7192,22 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-invoker": "^5.0", + "phpunit/php-text-template": "^4.0", + "phpunit/php-timer": "^7.0", + "sebastian/cli-parser": "^3.0", + "sebastian/code-unit": "^3.0", + "sebastian/comparator": "^6.0", + "sebastian/diff": "^6.0", + "sebastian/environment": "^7.0", + "sebastian/exporter": "^6.0", + "sebastian/global-state": "^7.0", + "sebastian/object-enumerator": "^6.0", + "sebastian/type": "^5.0", + "sebastian/version": "^5.0" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -6746,7 +7218,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.0-dev" } }, "autoload": { @@ -6778,7 +7250,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.0.8" }, "funding": [ { @@ -6794,7 +7266,7 @@ "type": "tidelift" } ], - "time": "2024-02-04T09:07:51+00:00" + "time": "2024-03-22T04:21:01+00:00" }, { "name": "pimple/pimple", @@ -6849,126 +7321,18 @@ }, "time": "2021-10-28T11:13:42+00:00" }, - { - "name": "psr/http-factory", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" - }, - "time": "2023-04-10T20:10:41+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, { "name": "psy/psysh", - "version": "v0.12.0", + "version": "v0.12.2", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d", + "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d", "shasum": "" }, "require": { @@ -7032,71 +7396,27 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" - }, - "time": "2023-12-20T15:28:09+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.2" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2024-03-17T01:53:00+00:00" }, { "name": "rector/rector", - "version": "0.19.8", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "de3b3bb159abd704b144aa86fb244f7f1f4ac947" + "reference": "c59507a9090b465d65e1aceed91e5b81986e375b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/de3b3bb159abd704b144aa86fb244f7f1f4ac947", - "reference": "de3b3bb159abd704b144aa86fb244f7f1f4ac947", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/c59507a9090b465d65e1aceed91e5b81986e375b", + "reference": "c59507a9090b465d65e1aceed91e5b81986e375b", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.56" + "phpstan/phpstan": "^1.10.57" }, "conflict": { "rector/rector-doctrine": "*", @@ -7126,7 +7446,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.19.8" + "source": "https://github.com/rectorphp/rector/tree/1.0.3" }, "funding": [ { @@ -7134,32 +7454,32 @@ "type": "github" } ], - "time": "2024-02-05T10:59:13+00:00" + "time": "2024-03-14T15:04:18+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/00a74d5568694711f0222e54fb281e1d15fdf04a", + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7182,7 +7502,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.1" }, "funding": [ { @@ -7190,32 +7511,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:15+00:00" + "time": "2024-03-02T07:26:58+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6634549cb8d702282a04a774e36a7477d2bd9015", + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7238,7 +7559,8 @@ "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" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.0" }, "funding": [ { @@ -7246,32 +7568,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2024-02-02T05:50:41+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/df80c875d3e459b45c6039e4d9b71d4fbccae25d", + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7293,7 +7615,8 @@ "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/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.0" }, "funding": [ { @@ -7301,36 +7624,36 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-02-02T05:52:17+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bd0f2fa5b9257c69903537b266ccb80fcf940db8", + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7370,7 +7693,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.0" }, "funding": [ { @@ -7378,33 +7701,33 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-02-02T05:53:45+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "88a434ad86150e11a606ac4866b09130712671f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/88a434ad86150e11a606ac4866b09130712671f0", + "reference": "88a434ad86150e11a606ac4866b09130712671f0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7428,7 +7751,7 @@ "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" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.0" }, "funding": [ { @@ -7436,33 +7759,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-02-02T05:55:19+00:00" }, { "name": "sebastian/diff", - "version": "5.1.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" + "reference": "ab83243ecc233de5655b76f577711de9f842e712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712", + "reference": "ab83243ecc233de5655b76f577711de9f842e712", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7495,7 +7818,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.1" }, "funding": [ { @@ -7503,27 +7826,27 @@ "type": "github" } ], - "time": "2023-12-22T10:55:06+00:00" + "time": "2024-03-02T07:30:33+00:00" }, { "name": "sebastian/environment", - "version": "6.0.1", + "version": "7.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4eb3a442574d0e9d141aab209cd4aaf25701b09a", + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -7531,7 +7854,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -7559,7 +7882,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/environment/tree/7.1.0" }, "funding": [ { @@ -7567,34 +7890,34 @@ "type": "github" } ], - "time": "2023-04-11T05:39:26+00:00" + "time": "2024-03-23T08:56:34+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.1", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f291e5a317c321c0381fa9ecc796fa2d21b186da", + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7637,7 +7960,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.0.1" }, "funding": [ { @@ -7645,35 +7968,35 @@ "type": "github" } ], - "time": "2023-09-24T13:22:09+00:00" + "time": "2024-03-02T07:28:20+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.1", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7692,14 +8015,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", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.1" }, "funding": [ { @@ -7707,33 +8030,33 @@ "type": "github" } ], - "time": "2023-07-19T07:19:23+00:00" + "time": "2024-03-02T07:32:10+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/376c5b3f6b43c78fdc049740bca76a7c846706c0", + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7757,7 +8080,7 @@ "support": { "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" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.0" }, "funding": [ { @@ -7765,34 +8088,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-02-02T06:00:36+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7814,7 +8137,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.0" }, "funding": [ { @@ -7822,32 +8146,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-02-02T06:01:29+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/bb2a6255d30853425fd38f032eb64ced9f7f132d", + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7869,7 +8193,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.0" }, "funding": [ { @@ -7877,32 +8202,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-02-02T06:02:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b75224967b5a466925c6d54e68edd0edf8dd4ed4", + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7932,7 +8257,8 @@ "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" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.0" }, "funding": [ { @@ -7940,32 +8266,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2024-02-02T06:08:48+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8502785eb3523ca0dd4afe9ca62235590020f3f", + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -7988,7 +8314,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.0.0" }, "funding": [ { @@ -7996,29 +8323,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2024-02-02T06:09:34+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/13999475d2cb1ab33cb73403ba356a814fdbb001", + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8041,7 +8368,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.0" }, "funding": [ { @@ -8049,7 +8377,7 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-02-02T06:10:47+00:00" }, { "name": "spatie/backtrace", @@ -8115,16 +8443,16 @@ }, { "name": "spatie/laravel-ray", - "version": "1.35.0", + "version": "1.35.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "29298a4bc2038ba108abc283e96fb74991644774" + "reference": "f504d3787d88c7e5de7a4290658f7ad9b1352f22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/29298a4bc2038ba108abc283e96fb74991644774", - "reference": "29298a4bc2038ba108abc283e96fb74991644774", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/f504d3787d88c7e5de7a4290658f7ad9b1352f22", + "reference": "f504d3787d88c7e5de7a4290658f7ad9b1352f22", "shasum": "" }, "require": { @@ -8134,7 +8462,7 @@ "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", + "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", @@ -8186,7 +8514,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.35.0" + "source": "https://github.com/spatie/laravel-ray/tree/1.35.1" }, "funding": [ { @@ -8198,7 +8526,7 @@ "type": "other" } ], - "time": "2024-02-03T10:04:50+00:00" + "time": "2024-02-13T14:19:41+00:00" }, { "name": "spatie/macroable", @@ -8412,20 +8740,20 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112", + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -8454,7 +8782,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" + "source": "https://github.com/symfony/stopwatch/tree/v7.0.3" }, "funding": [ { @@ -8470,32 +8798,31 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:35:58+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -8526,7 +8853,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.3" + "source": "https://github.com/symfony/yaml/tree/v7.0.3" }, "funding": [ { @@ -8542,20 +8869,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -8584,7 +8911,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -8592,7 +8919,7 @@ "type": "github" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "zbateson/mail-mime-parser", @@ -8671,16 +8998,16 @@ }, { "name": "zbateson/mb-wrapper", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" + "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/09a8b77eb94af3823a9a6623dcc94f8d988da67f", + "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f", "shasum": "" }, "require": { @@ -8691,7 +9018,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" + "phpunit/phpunit": "<10.0" }, "suggest": { "ext-iconv": "For best support/performance", @@ -8728,7 +9055,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" + "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.1" }, "funding": [ { @@ -8736,7 +9063,7 @@ "type": "github" } ], - "time": "2023-01-11T23:05:44+00:00" + "time": "2024-03-18T04:31:04+00:00" }, { "name": "zbateson/stream-decorators", diff --git a/config/creasico.php b/config/creasico.php index d1d0575..13c3925 100644 --- a/config/creasico.php +++ b/config/creasico.php @@ -1,6 +1,6 @@ env('CREASI_BASE_USER_MODEL', 'App\Models\User'), diff --git a/database/README.md b/database/README.md index 339164f..805a4d5 100644 --- a/database/README.md +++ b/database/README.md @@ -23,21 +23,11 @@ erDiagram unsignedBigInt id PK unsignedBigInt business_id FK morph stakeholder - boolean is_internal varchar(100) code UK - unsignedSmallInt type - } - - businesses ||--o{ employments : employees - employments }o..|| personnels : employees - employments { - unsignedBigInt id PK - unsignedBigInt employer_id FK - unsignedBigInt employee_id FK boolean is_primary - varchar(100) code UK unsignedSmallInt type unsignedSmallInt status + unsignedSmallInt employment_status date start_date date finish_date } @@ -46,29 +36,20 @@ erDiagram unsignedBigInt id PK unsignedBigInt user_id FK varchar(150) name + varchar(20) prefix + varchar(20) suffix varchar(50) alias + char(16) nik UK varchar email UK varchar(20) phone - char(1) gender - varchar(200) summary - timestamp created_at - timestamp updated_at - timestamp deleted_at - } - - personnels ||..|| profiles : identity - profiles { - unsignedBigInt id PK - morphs identity - char(16) nik UK - varchar prefix - varchar suffix date birth_date char(4) birth_place_code + char(1) gender unsignedSmallInt education unsignedSmallInt religion unsignedSmallInt tax_status varchar(16) tax_id + varchar(200) summary timestamp created_at timestamp updated_at timestamp deleted_at @@ -185,25 +166,29 @@ In this implementation we try to cover 5 most basic and common business relation - **Owner** - Cover business relation between the company to a individual(s) who own the business. + A company or individual stackholder who own the business. - **Subsidiary** - Cover business relation between the company to other businesses that act as a child company. The parent company can be called parent or holding company, and the child company can be called child company or operating company. + A company that act as subsidiary or child business. + +- **Employee** + + A individual that act as employee of the business. - **Customer** - Cover business relation between the company either to individual or business who makes a business its money. + A company or individual that act as purchase goods from the business. - **Supplier** - Cover business relation between the company either to individual or business who provide the raw materials to the business so the can produce their goods. + A company or individual that provides raw materials for the business so they can produce their goods. - **Vendor** - Cover business relation between the company either to individual or business who provide the tangible assets to the business so they can proceed the raw materials into goods. + A company or individual who provides pre-made or even ready-made goods for the business so they can proceed the raw materials into goods. -The term "stakeholders" itself is actually covers a lot more than that, even employees are counted as stakeholders. But at this stage we can't afford to comply those types of relationship, simply because that's beyond of our cababilities to handle them at the moment. +The term "stakeholders" itself is actually covers a lot more than that. But at this stage we can't afford to comply those types of relationship, simply because that's beyond of our cababilities to handle them at the moment. ```mermaid classDiagram @@ -255,9 +240,11 @@ classDiagram | `id` | `unsignedBigInt`, `incrementing` | `primary` | | | `business_id` | `unsignedBigInt` | `foreign` | | | `stakeholder` | `morphs`, `nullable` | | | -| `is_internal` | `boolean` | | Determine whether the stakeholder is actually from internal business, default: `false` | -| `code` | `varchar(100)`, `nullable` | `unique` | | +| `code` | `varchar(100)`, `nullable` | `unique` | Unique identifier of business relationship | | `type` | `unsignedSmallInt`, `nullable` | | | +| `status` | `unsignedSmallInt`, `nullable` | | | +| `start_date` | `date`, `nullable` | | | +| `finish_date` | `date`, `nullable` | | | **Relation Properties** - `business_id` : reference `businesses` @@ -282,16 +269,6 @@ classDiagram } class Employments { int id - int employer_id - int employee_id - boolean is_primary - null|string code - int type - int status - null|date start_date - null|date finish_date - null|bool is_started - null|bool is_finished } ``` @@ -300,12 +277,13 @@ classDiagram | Field | Attribute | Key | Description | | --- | --- | :---: | --- | | `id` | `unsignedBigInt`, `incrementing` | `primary` | | -| `employer_id` | `unsignedBigInt` | `foreign` | ID of the company | -| `employee_id` | `unsignedBigInt` | `foreign` | ID of the personnel | -| `is_primary` | `boolean` | | Determine whether it's the personnel's primary company, default: `false` | -| `code` | `varchar(100)`, `nullable` | `unique` | An identification that given by the company to employee | -| `type` | `unsignedSmallInt`, `nullable` | | Define the employment type of the personnel in the company | +| `business_id` | `unsignedBigInt` | `foreign` | | +| `stakeholder` | `morphs`, `nullable` | | | +| `is_primary` | `boolean` | | In some circumstance, a business might have multiple `business_relative` with the same `type` in this case they should be able to decide which one is mark as primary relative. default: `false` | +| `code` | `varchar(100)`, `nullable` | `unique` | Unique identifier of business relationship | +| `type` | `unsignedSmallInt`, `nullable` | | | | `status` | `unsignedSmallInt`, `nullable` | | | +| `employment_status` | `unsignedSmallInt`, `nullable` | | At this stage, this fields will only be available for `employment` relative, which is `business` to `personnel` that has `type` of `employee` | | `start_date` | `date`, `nullable` | | | | `finish_date` | `date`, `nullable` | | | @@ -313,23 +291,19 @@ classDiagram - `employer_id` : reference `businesses` - `employee_id` : reference `personnels` -**Employment Types** +**Employment Statuses** - Unemployeed - Fulltime - Parttime +- Probation - Internship - Freelance -**Employment Statuses** -- Candidate -- Probation -- Contract -- Permanent +> **NOTE** +> +> Field `type` and `status` shouldn't be detachable so we can maintain historical changes of the personnel in the company. -**Note :** -Field `type` and `status` shouldn't be detachable so we can maintain historical changes of the personnel in the company. - -## Personnel and its Profile +## Personnel and Profile Every individuals should have their own identity, it also can helps a business to identify better of their individuals. But there's a circumstance that a business doesn't really care about that, all they need is just a way to communicate with the individuals, and that's it. @@ -337,7 +311,6 @@ Meanwhile, a business might want to be able to also communicate with their perso ```mermaid classDiagram - Personnel .. Profile : identity Personnel ..> PersonnelRelative : relative PersonnelRelative --> Personnel : personnel @@ -345,10 +318,6 @@ classDiagram int id profile() null|Profile } - class Profile { - int id - identity() Personnel - } class PersonnelRelative { int personnel_id int relative_id @@ -363,10 +332,19 @@ classDiagram | `id` | `unsignedBigInt`, `incrementing` | `primary` | | | `user_id` | `unsignedBigInt`, `nullable` | `foreign` | | | `name` | `varchar(150)` | | | +| `prefix` | `varchar(10)`, `nullable` | | | +| `suffix` | `varchar(10)`, `nullable` | | | | `alias` | `varchar(50)`, `nullable` | | | +| `nik` | `char(16)`, `nullable` | | | | `email` | `varchar`, `nullable` | `unique` | | | `phone` | `varchar(20)`, `nullable` | | | +| `birth_date` | `date`, `nullable` | | | +| `birth_place_code` | `char(4)`, `nullable` | `foreign` | | | `gender` | `char(1)` | | | +| `education` | `varchar(3)`, `nullable` | | | +| `religion` | `unsignedTinyInt`, `nullable` | | | +| `tax_status` | `unsignedSmallInt`, `nullable` | | | +| `tax_id` | `varchar(16)`, `nullable` | | | | `summary` | `varchar(200)`, `nullable` | | | **Model Attributes** @@ -399,22 +377,6 @@ classDiagram - Grandchild - Cousin -### `profiles` - -| Field | Attribute | Key | Description | -| --- | --- | :---: | --- | -| `id` | `unsignedBigInt`, `incrementing` | `primary` | | -| `identity` | `morphs`, `nullable` | | | -| `nik` | `char(16)`, `nullable` | | | -| `prefix` | `varchar(10)`, `nullable` | | | -| `suffix` | `varchar(10)`, `nullable` | | | -| `birth_date` | `date`, `nullable` | | | -| `birth_place_code` | `char(4)`, `nullable` | `foreign` | | -| `education` | `varchar(3)`, `nullable` | | | -| `religion` | `unsignedTinyInt`, `nullable` | | | -| `tax_status` | `unsignedSmallInt`, `nullable` | | | -| `tax_id` | `varchar(16)`, `nullable` | | | - **Model Attributes** - `timestamps` - `softDeletes` @@ -422,7 +384,7 @@ classDiagram **Relation Properties** - `birth_place_code` : reference `regencies` -**Profile Educations** +**Personnel Educations** - Uneducated - SD - SMP @@ -434,7 +396,7 @@ classDiagram - S2 - S3 -**Profile Religions** +**Personnel Religions** - Other - Islam - Christian @@ -456,22 +418,7 @@ classDiagram class Address { int id - string line - null|int type - boolean is_resident - null|string rt - null|string rw - null|int village_code - null|int district_code - null|int regency_code - null|int province_code - null|int postal_code - null|string summary addressable() Entity - village() null|Village - district() null|District - regency() null|Regency - province() null|Province } class Business~Entity~ { int id diff --git a/database/migrations/2014_10_12_000000_testbench_create_users_table.php b/database/migrations/2014_10_12_000000_testbench_create_users_table.php index be8098c..df141b6 100644 --- a/database/migrations/2014_10_12_000000_testbench_create_users_table.php +++ b/database/migrations/2014_10_12_000000_testbench_create_users_table.php @@ -11,6 +11,10 @@ */ public function up(): void { + if (Schema::hasTable('users')) { + return; + } + Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name', 150)->nullable()->index(); diff --git a/database/migrations/2019_08_19_000000_testbench_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_testbench_create_failed_jobs_table.php index d1e64d7..617ac8e 100644 --- a/database/migrations/2019_08_19_000000_testbench_create_failed_jobs_table.php +++ b/database/migrations/2019_08_19_000000_testbench_create_failed_jobs_table.php @@ -11,6 +11,10 @@ */ public function up(): void { + if (Schema::hasTable(config('queue.failed.table'))) { + return; + } + Schema::create(config('queue.failed.table'), function (Blueprint $table) { $table->id(); $table->string('uuid')->unique(); diff --git a/database/migrations/2022_05_10_000000_create_sessions_queue_and_notifications_table.php b/database/migrations/2022_05_10_000000_create_sessions_queue_and_notifications_table.php index 14dff06..eb52c69 100644 --- a/database/migrations/2022_05_10_000000_create_sessions_queue_and_notifications_table.php +++ b/database/migrations/2022_05_10_000000_create_sessions_queue_and_notifications_table.php @@ -11,7 +11,7 @@ */ public function up(): void { - if (config('session.driver') === 'database') { + if (config('session.driver') === 'database' && ! Schema::hasTable(config('session.table'))) { Schema::create(config('session.table'), function (Blueprint $table) { $table->string('id')->primary(); $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); @@ -23,35 +23,39 @@ public function up(): void } if (config('queue.default') === 'database') { - Schema::create(config('queue.connections.database.table'), function (Blueprint $table) { - $table->id(); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); + if (! Schema::hasTable(config('queue.connections.database.table'))) { + Schema::create(config('queue.connections.database.table'), function (Blueprint $table) { + $table->id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } - Schema::create('job_batches', function (Blueprint $table) { - $table->string('id')->primary(); - $table->string('name'); - $table->integer('total_jobs'); - $table->integer('pending_jobs'); - $table->integer('failed_jobs'); - $table->text('failed_job_ids'); - $table->mediumText('options')->nullable(); - $table->integer('cancelled_at')->nullable(); - $table->integer('created_at'); - $table->integer('finished_at')->nullable(); - }); + if (! Schema::hasTable('job_batches')) { + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->text('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + } } Schema::create('notifications', function (Blueprint $table) { $table->uuid('id')->primary(); $table->string('type'); $table->morphs('notifiable'); - $table->text('data'); + $table->json('data'); $table->timestamp('read_at')->nullable(); $table->timestamps(); }); diff --git a/database/migrations/2022_05_10_000001_create_identities_address_and_files_table.php b/database/migrations/2022_05_10_000001_create_identities_address_and_files_table.php index 885038c..788f634 100644 --- a/database/migrations/2022_05_10_000001_create_identities_address_and_files_table.php +++ b/database/migrations/2022_05_10_000001_create_identities_address_and_files_table.php @@ -11,24 +11,6 @@ */ public function up(): void { - Schema::create('profiles', function (Blueprint $table) { - $table->id(); - $table->nullableMorphs('identity'); - - $table->char('nik', 16)->unique()->nullable(); - $table->string('prefix', 20)->nullable(); - $table->string('suffix', 20)->nullable(); - $table->date('birth_date')->nullable(); - $table->char('birth_place_code', 4)->nullable(); - $table->string('education', 3)->nullable(); - $table->unsignedTinyInteger('religion')->nullable(); - $table->unsignedSmallInteger('tax_status')->nullable(); - $table->string('tax_id', 16)->nullable(); - - $table->timestamps(); - $table->softDeletes(); - }); - Schema::create('addresses', function (Blueprint $table) { $table->id(); $table->nullableMorphs('addressable'); @@ -81,6 +63,5 @@ public function down(): void Schema::dropIfExists('file_attached'); Schema::dropIfExists('file_uploads'); Schema::dropIfExists('addresses'); - Schema::dropIfExists('profiles'); } }; diff --git a/database/migrations/2022_05_10_000002_create_companies_and_personnels_table.php b/database/migrations/2022_05_10_000002_create_companies_and_personnels_table.php index dcf896a..68ecf5f 100644 --- a/database/migrations/2022_05_10_000002_create_companies_and_personnels_table.php +++ b/database/migrations/2022_05_10_000002_create_companies_and_personnels_table.php @@ -18,8 +18,6 @@ public function up(): void $table->string('alias', 50)->nullable(); $table->string('email')->unique()->nullable(); $table->string('phone', 20)->nullable(); - $table->unsignedSmallInteger('tax_status')->nullable(); - $table->string('tax_id', 16)->nullable(); $table->string('summary', 200)->nullable(); $table->timestamps(); @@ -32,7 +30,12 @@ public function up(): void $table->nullableMorphs('stakeholder'); $table->string('code')->unique()->nullable(); + $table->boolean('is_primary')->nullable(); $table->unsignedSmallInteger('type')->nullable(); + $table->unsignedSmallInteger('status')->nullable(); + $table->unsignedSmallInteger('employment_status')->default(0); + $table->date('start_date')->nullable(); + $table->date('finish_date')->nullable(); }); Schema::create('personnels', function (Blueprint $table) { @@ -40,9 +43,14 @@ public function up(): void $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); $table->string('name', 150); + $table->string('prefix', 20)->nullable(); + $table->string('suffix', 20)->nullable(); $table->string('alias', 50)->nullable(); + $table->char('nik', 16)->unique()->nullable(); $table->string('email')->unique()->nullable(); $table->string('phone', 20)->nullable(); + $table->date('birth_date')->nullable(); + $table->char('birth_place_code', 4)->nullable(); $table->char('gender', 1); $table->string('summary', 200)->nullable(); @@ -56,19 +64,6 @@ public function up(): void $table->unsignedSmallInteger('status')->nullable(); }); - - Schema::create('employments', function (Blueprint $table) { - $table->id(); - $table->foreignId('employer_id')->constrained('businesses')->cascadeOnDelete(); - $table->foreignId('employee_id')->constrained('personnels')->cascadeOnDelete(); - - $table->boolean('is_primary')->default(false); - $table->string('code')->unique()->nullable(); - $table->unsignedSmallInteger('type')->nullable(); - $table->unsignedSmallInteger('status')->nullable(); - $table->date('start_date')->nullable(); - $table->date('finish_date')->nullable(); - }); } /** @@ -76,7 +71,6 @@ public function up(): void */ public function down(): void { - Schema::dropIfExists('employments'); Schema::dropIfExists('personnel_relatives'); Schema::dropIfExists('personnels'); Schema::dropIfExists('business_relatives'); diff --git a/database/migrations/2022_05_10_000003_create_personal_access_tokens_table.php b/database/migrations/2022_05_10_000003_create_personal_access_tokens_table.php new file mode 100644 index 0000000..db8273d --- /dev/null +++ b/database/migrations/2022_05_10_000003_create_personal_access_tokens_table.php @@ -0,0 +1,37 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..074b41e --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,13 @@ +parameters: + paths: + - src + + level: 1 + + ignoreErrors: + - + messages: + - '#Call to an undefined method [a-zA-Z0-9\\_]+::key\(\)#' + - '#Call to an undefined method [a-zA-Z0-9\\_]+::label\(\)#' + paths: + - src/Enums/* diff --git a/phpunit.xml b/phpunit.xml index 8a5827c..f6d7bdf 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,8 +1,11 @@ - - tests + + ./tests/Unit + + + ./tests/Feature diff --git a/resources/lang/en/base.php b/resources/lang/en/enums.php similarity index 93% rename from resources/lang/en/base.php rename to resources/lang/en/enums.php index 1d0e720..665ebc8 100644 --- a/resources/lang/en/base.php +++ b/resources/lang/en/enums.php @@ -28,20 +28,15 @@ 'document' => 'Document', ], - 'employment-type' => [ + 'employment-status' => [ 'unemployeed' => 'Unemploeed', 'fulltime' => 'Full-time', 'parttime' => 'Part-time', + 'probation' => 'Probation', 'internship' => 'Internship', 'freelance' => 'Freelance', ], - 'employment-status' => [ - 'permanent' => 'Permanent', - 'contract' => 'Contract', - 'probation' => 'Probation', - ], - 'tax-status' => [ 't-k0' => 'TK/0', 't-k1' => 'TK/1', @@ -69,9 +64,16 @@ 'cousin' => 'Cousin', ], - 'business-relative-type' => [ + 'stakeholder-status' => [ + 'permanent' => 'Permanent', + 'contract' => 'Contract', + 'candidate' => 'Candidate', + ], + + 'stakeholder-type' => [ 'owner' => 'Owner', 'subsidiary' => 'Subsidiary', + 'employee' => 'Employee', 'customer' => 'Customer', 'supplier' => 'Supplier', 'vendor' => 'Vendor', diff --git a/resources/lang/id/base.php b/resources/lang/id/enums.php similarity index 90% rename from resources/lang/id/base.php rename to resources/lang/id/enums.php index 2446a13..3f540f5 100644 --- a/resources/lang/id/base.php +++ b/resources/lang/id/enums.php @@ -28,20 +28,15 @@ 'document' => 'Document', ], - 'employment-type' => [ + 'employment-status' => [ 'unemployeed' => 'Tidak Dipekerjakan', 'fulltime' => 'Full-time', 'parttime' => 'Part-time', + 'probation' => 'Probation', 'internship' => 'Internship', 'freelance' => 'Freelance', ], - 'employment-status' => [ - 'permanent' => 'Permanent', - 'contract' => 'Contract', - 'probation' => 'Probation', - ], - 'tax-status' => [ 't-k0' => 'TK/0', 't-k1' => 'TK/1', @@ -69,9 +64,16 @@ 'cousin' => 'Sepupu', ], - 'business-relative-type' => [ + 'stakeholder-status' => [ + 'permanent' => 'Permanen', + 'contract' => 'Kontrak', + 'candidate' => 'Calon', + ], + + 'stakeholder-type' => [ 'owner' => 'Pemilik', 'subsidiary' => 'Anak Perusahaan', + 'employee' => 'Karyawan', 'customer' => 'Pelanggan', 'supplier' => 'Pemasok', 'vendor' => 'Vendor', diff --git a/routes/base.php b/routes/base.php index 5e402c8..620c7b4 100644 --- a/routes/base.php +++ b/routes/base.php @@ -1,7 +1,7 @@ isInternal()) { continue; } diff --git a/src/Models/Factories/AddressFactory.php b/src/Database/Factories/AddressFactory.php similarity index 71% rename from src/Models/Factories/AddressFactory.php rename to src/Database/Factories/AddressFactory.php index be60c26..56c425e 100644 --- a/src/Models/Factories/AddressFactory.php +++ b/src/Database/Factories/AddressFactory.php @@ -1,9 +1,9 @@ whereHas('province', function (Builder $query) { - $query->where('code', 33); - })->inRandomOrder()->first(); + $village = Village::with('district', 'regency') + ->whereHas('province', fn (Builder $query) => $query->where('code', 33)) + ->inRandomOrder() + ->first(); + /** @var string */ $types = config('creasi.base.address.types', AddressType::class); return [ 'type' => $this->faker->randomElement($types::cases()), 'line' => $this->faker->streetAddress(), 'rt' => $this->faker->numberBetween(1, 15), - 'rw' => $this->faker->numerify(1, 10), + 'rw' => $this->faker->numberBetween(1, 10), 'village_code' => $village->code, 'district_code' => $village->district->code, 'regency_code' => $village->regency->code, diff --git a/src/Models/Factories/BusinessFactory.php b/src/Database/Factories/BusinessFactory.php similarity index 87% rename from src/Models/Factories/BusinessFactory.php rename to src/Database/Factories/BusinessFactory.php index f2e913b..1899659 100644 --- a/src/Models/Factories/BusinessFactory.php +++ b/src/Database/Factories/BusinessFactory.php @@ -1,8 +1,8 @@ $identity->withProfile(); + $cb = fn ($identity) => $identity; } return $this->has($cb(Personnel::factory()), 'identity'); diff --git a/src/Models/Factories/FileUploadFactory.php b/src/Database/Factories/FileUploadFactory.php similarity index 91% rename from src/Models/Factories/FileUploadFactory.php rename to src/Database/Factories/FileUploadFactory.php index 860c58b..27dc92c 100644 --- a/src/Models/Factories/FileUploadFactory.php +++ b/src/Database/Factories/FileUploadFactory.php @@ -1,8 +1,8 @@ + */ +class PersonnelFactory extends Factory +{ + use Concerns\WithAddress; + use Concerns\WithFileUpload; + + protected $model = Personnel::class; + + /** + * @return array + */ + public function definition(): array + { + /** @var Regency */ + $birthPlace = Regency::query() + ->whereHas('province', fn (Builder $query) => $query->where('code', 33)) + ->inRandomOrder() + ->first(); + + /** @var Gender */ + $gender = $this->faker->randomElement(Gender::cases()); + + return [ + 'name' => $this->faker->firstName($gender->toFaker()), + 'email' => $this->faker->safeEmail(), + 'phone' => '08'.$this->faker->numerify('##########'), + 'gender' => $gender, + 'nik' => $this->faker->nik($gender->toFaker(), $birthDate = $this->faker->dateTime()), + 'birth_date' => $birthDate->format('Y-m-d'), + 'birth_place_code' => $birthPlace->code, + 'summary' => $this->faker->sentence(4), + ]; + } + + public function withoutUser(): static + { + return $this->state([ + 'user_id' => null, + ]); + } + + public function withCompany( + ?bool $primary = null, + ?StakeholderType $type = null, + ?StakeholderStatus $status = null, + ?EmploymentStatus $employmentStatus = null, + false|DateTimeInterface|null $startDate = null, + ): static { + if ($startDate === null) { + $startDate = \fake()->dateTime(); + } + + return $this->hasAttached(Business::factory(), [ + 'is_primary' => $primary, + 'type' => $type ?? \fake()->randomElement(StakeholderType::cases()), + 'status' => $status ?? \fake()->randomElement(StakeholderStatus::cases()), + 'employment_status' => $employmentStatus ?? \fake()->randomElement(EmploymentStatus::cases()), + 'start_date' => $startDate?->format('Y-m-d'), + 'finish_date' => null, + ], 'employers'); + } + + public function asEmployee(?EmploymentStatus $status = null, bool $isPrimary = true): static + { + return $this->withCompany( + $isPrimary, + StakeholderType::Employee, + StakeholderStatus::Permanent, + $status ?: EmploymentStatus::Fulltime + ); + } +} diff --git a/src/Models/Model.php b/src/Database/Model.php similarity index 95% rename from src/Models/Model.php rename to src/Database/Model.php index c17a8f3..9cb6f6a 100644 --- a/src/Models/Model.php +++ b/src/Database/Model.php @@ -1,6 +1,6 @@ factory() + * @method static \Creasi\Base\Database\Factories\AddressFactory
factory() */ class Address extends NusaAddress { @@ -27,7 +29,7 @@ class Address extends NusaAddress protected static function newFactory() { - return Factories\AddressFactory::new(); + return AddressFactory::new(); } protected static function boot() @@ -43,7 +45,7 @@ protected static function boot() public function getCasts() { return \array_merge(parent::getCasts(), [ - 'type' => config('creasi.base.address.types', Enums\AddressType::class), + 'type' => config('creasi.base.address.types', AddressType::class), ]); } diff --git a/src/Database/Models/Business.php b/src/Database/Models/Business.php new file mode 100644 index 0000000..9a8f19a --- /dev/null +++ b/src/Database/Models/Business.php @@ -0,0 +1,20 @@ + factory() + */ +class Business extends Entity implements Company +{ + use AsCompany; + + protected $fillable = []; + + protected $casts = []; +} diff --git a/src/Database/Models/BusinessRelative.php b/src/Database/Models/BusinessRelative.php new file mode 100644 index 0000000..a071f8a --- /dev/null +++ b/src/Database/Models/BusinessRelative.php @@ -0,0 +1,63 @@ + 'int', + 'stakeholder_id' => 'int', + 'type' => StakeholderType::class, + 'status' => StakeholderStatus::class, + 'employment_status' => EmploymentStatus::class, + 'start_date' => 'immutable_date', + 'finish_date' => 'immutable_date', + ]; + + public $timestamps = false; + + public function isInternal(): Attribute + { + return Attribute::get(fn () => $this->type->isInternal()); + } + + public function isStarted(): Attribute + { + return Attribute::get(fn () => $this->start_date?->isPast()); + } + + public function isFinished(): Attribute + { + return Attribute::get(fn () => $this->finish_date?->isPast()); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\MorphTo + */ + public function stakeholder() + { + return $this->morphTo(); + } +} diff --git a/src/Models/Concerns/AsCompany.php b/src/Database/Models/Concerns/AsCompany.php similarity index 60% rename from src/Models/Concerns/AsCompany.php rename to src/Database/Models/Concerns/AsCompany.php index acaf550..6aaab19 100644 --- a/src/Models/Concerns/AsCompany.php +++ b/src/Database/Models/Concerns/AsCompany.php @@ -1,14 +1,14 @@ key()->plural(), fn (Company $model) => $model->stakeholders()->where([ @@ -52,17 +52,6 @@ final protected function initializeAsCompany(): void // . } - /** - * {@inheritdoc} - */ - public function employees(): BelongsToMany - { - return $this->belongsToMany(Personnel::class, 'employments', 'employer_id', 'employee_id') - ->withPivot('is_primary', 'type', 'status', 'start_date', 'finish_date') - ->using(Employment::class) - ->as('employment'); - } - /** * {@inheritdoc} */ @@ -72,7 +61,8 @@ protected function relatives(string $relative, bool $forward = true): MorphToMan ? $this->morphedByMany($relative, 'stakeholder', 'business_relatives', 'business_id') : $this->morphToMany(static::class, 'stakeholder', 'business_relatives', null, 'business_id'); - return $relation->using(BusinessRelative::class)->withPivot('type', 'code'); + return $relation->using(BusinessRelative::class) + ->withPivot('type', 'code', 'status', 'start_date', 'finish_date'); } /** @@ -80,7 +70,8 @@ protected function relatives(string $relative, bool $forward = true): MorphToMan */ public function companyRelatives(): MorphToMany { - return $this->relatives(static::class)->as('stakeholder'); + return $this->relatives(static::class) + ->as('stakeholder'); } /** @@ -88,7 +79,33 @@ public function companyRelatives(): MorphToMany */ public function individualRelatives(): MorphToMany { - return $this->relatives(Personnel::class)->as('stakeholder'); + return $this->relatives(Personnel::class) + ->as('stakeholder'); + } + + /** + * {@inheritdoc} + */ + public function employees(): MorphToMany + { + return $this->relatives(Personnel::class) + ->withPivot('is_primary', 'employment_status') + ->wherePivot('type', '=', StakeholderType::Employee) + ->as('employment'); + } + + public function addEmployee( + Personnel $employee, + EmploymentStatus $status, + CarbonInterface $startDate, + bool $isPrimary = false + ) { + return $this->employees()->attach($employee, [ + 'is_primary' => $isPrimary, + 'type' => StakeholderType::Employee, + 'employment_status' => $status, + 'start_date' => $startDate, + ]); } /** @@ -102,9 +119,9 @@ public function stakeholders(): HasMany /** * {@inheritdoc} */ - public function addStakeholder(BusinessRelativeType $type, Entity $stakeholder): static + public function addStakeholder(StakeholderType $type, Entity $stakeholder): static { - $this->relatives(\get_class($stakeholder))->attach($stakeholder, [ + $this->relatives($stakeholder::class)->attach($stakeholder, [ 'type' => $type, ]); diff --git a/src/Database/Models/Concerns/AsEmployee.php b/src/Database/Models/Concerns/AsEmployee.php new file mode 100644 index 0000000..65c744a --- /dev/null +++ b/src/Database/Models/Concerns/AsEmployee.php @@ -0,0 +1,78 @@ + $primaryEmployer + * + * @mixin \Creasi\Base\Database\Models\Contracts\Employee + */ +trait AsEmployee +{ + /** + * Initialize the trait. + */ + final protected function initializeAsEmployee(): void + { + $this->append('employer'); + + $this->makeHidden('primaryEmployer'); + } + + /** + * {@inheritdoc} + */ + public function employer(): Attribute + { + $this->loadMissing('primaryEmployer'); + + return Attribute::get(fn () => $this->primaryEmployer?->first()); + } + + /** + * {@inheritdoc} + */ + public function businessRelatives() + { + return $this->morphToMany(Business::class, 'stakeholder', 'business_relatives', 'business_id', 'stakeholder_id') + ->using(BusinessRelative::class) + ->withPivot('type', 'code', 'status', 'start_date', 'finish_date'); + } + + /** + * {@inheritdoc} + */ + public function companies(): MorphToMany + { + return $this->businessRelatives() + ->wherePivot('type', '=', StakeholderType::Owner) + ->as('ownership'); + } + + /** + * {@inheritdoc} + */ + public function employers(): MorphToMany + { + return $this->businessRelatives() + ->wherePivot('type', '=', StakeholderType::Employee) + ->withPivot('is_primary', 'employment_status') + ->as('employment'); + } + + /** + * {@inheritdoc} + */ + public function primaryEmployer(): MorphToMany + { + return $this->employers() + ->wherePivot('is_primary', '=', true) + ->latest(); + } +} diff --git a/src/Models/Concerns/WithAvatar.php b/src/Database/Models/Concerns/WithAvatar.php similarity index 61% rename from src/Models/Concerns/WithAvatar.php rename to src/Database/Models/Concerns/WithAvatar.php index b1b48a2..7c62969 100644 --- a/src/Models/Concerns/WithAvatar.php +++ b/src/Database/Models/Concerns/WithAvatar.php @@ -1,15 +1,16 @@ $avatarFile * - * @mixin \Creasi\Base\Contracts\HasFileUploads + * @mixin \Creasi\Base\Database\Models\Contracts\HasFileUploads */ trait WithAvatar { @@ -24,7 +25,7 @@ final protected function initializeWithAvatar(): void } /** - * @return \Illuminate\Database\Eloquent\Relations\MorphOne|\Creasi\Base\Models\FileUpload + * @return \Illuminate\Database\Eloquent\Relations\MorphOne|\Creasi\Base\Database\Models\FileUpload */ public function avatar(): Attribute { @@ -40,6 +41,8 @@ public function setAvatar(string|UploadedFile $image) public function avatarFile() { - return $this->files()->wherePivot('type', '=', FileUploadType::Avatar); + return $this->files() + ->wherePivot('type', '=', FileUploadType::Avatar) + ->latest(); } } diff --git a/src/Models/Concerns/WithCredential.php b/src/Database/Models/Concerns/WithCredential.php similarity index 81% rename from src/Models/Concerns/WithCredential.php rename to src/Database/Models/Concerns/WithCredential.php index e825642..de97ba5 100644 --- a/src/Models/Concerns/WithCredential.php +++ b/src/Database/Models/Concerns/WithCredential.php @@ -1,11 +1,11 @@ $employees * @property-read \Illuminate\Database\Eloquent\Collection $individualRelatives - * @property-read \Illuminate\Database\Eloquent\Collection $companyRelatives + * @property-read \Illuminate\Database\Eloquent\Collection $companyRelatives * @property-read \Illuminate\Database\Eloquent\Collection $stakeholders */ interface Company extends Stakeholder { /** - * @return BelongsToMany|Employee + * @return MorphToMany|Employee */ - public function employees(): BelongsToMany; + public function employees(): MorphToMany; /** * @return MorphToMany|BusinessRelative @@ -37,5 +35,5 @@ public function individualRelatives(): MorphToMany; */ public function stakeholders(): HasMany; - public function addStakeholder(BusinessRelativeType $type, Entity $stakeholder): static; + public function addStakeholder(StakeholderType $type, Entity $stakeholder): static; } diff --git a/src/Database/Models/Contracts/Employee.php b/src/Database/Models/Contracts/Employee.php new file mode 100644 index 0000000..6e31819 --- /dev/null +++ b/src/Database/Models/Contracts/Employee.php @@ -0,0 +1,30 @@ + $employers + * @property-read null|Company $employer + */ +interface Employee extends Stakeholder +{ + /** + * @return MorphToMany|Company + */ + public function employers(): MorphToMany; + + /** + * @return MorphToMany|Company + */ + public function primaryEmployer(): MorphToMany; + + /** + * Get the single primary company of this employee. + */ + public function employer(): Attribute; +} diff --git a/src/Models/Contracts/HasCredential.php b/src/Database/Models/Contracts/HasCredential.php similarity index 88% rename from src/Models/Contracts/HasCredential.php rename to src/Database/Models/Contracts/HasCredential.php index cfc5458..6a301af 100644 --- a/src/Models/Contracts/HasCredential.php +++ b/src/Database/Models/Contracts/HasCredential.php @@ -1,6 +1,6 @@ $devices + * @property-read \Illuminate\Database\Eloquent\Collection $devices * * @mixin \Illuminate\Database\Eloquent\Model */ interface HasDevices { /** - * @return HasMany|\Creasi\Base\Models\UserDevice + * @return HasMany|\Creasi\Base\Database\Models\UserDevice */ public function devices(): HasMany; diff --git a/src/Models/Contracts/HasFileUploads.php b/src/Database/Models/Contracts/HasFileUploads.php similarity index 86% rename from src/Models/Contracts/HasFileUploads.php rename to src/Database/Models/Contracts/HasFileUploads.php index 8e89451..f733eb8 100644 --- a/src/Models/Contracts/HasFileUploads.php +++ b/src/Database/Models/Contracts/HasFileUploads.php @@ -1,9 +1,9 @@ $ownedByPersonnels * * @method static static store(string|UploadedFile $path, string $name, ?string $title = null, ?string $summary = null, ?string $disk = null) - * @method static Factories\FileUploadFactory factory() + * @method static \Creasi\Base\Database\Factories\FileUploadFactory factory() */ class FileUpload extends Model { diff --git a/src/Database/Models/Personnel.php b/src/Database/Models/Personnel.php new file mode 100644 index 0000000..1da8965 --- /dev/null +++ b/src/Database/Models/Personnel.php @@ -0,0 +1,125 @@ + $relatives + * @property-read BusinessRelative $stakeholder + * + * @method static \Creasi\Base\Database\Factories\PersonnelFactory factory() + */ +class Personnel extends Entity implements Employee, HasCredential +{ + use AsEmployee; + use WithCredential; + use WithRegency { + regency as birthPlace; + } + + protected $fillable = [ + // 'nik', + 'prefix', + 'suffix', + 'birth_date', + 'birth_place_code', + 'gender', + ]; + + protected $casts = [ + 'birth_date' => 'immutable_date', + 'birth_place_code' => 'int', + 'gender' => Gender::class, + ]; + + protected $regencyKey = 'birth_place_code'; + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany|static + */ + public function relatives() + { + return $this->belongsToMany(static::class, 'personnel_relatives', 'personnel_id', 'relative_id') + ->withPivot('status') + ->using(PersonnelRelative::class) + ->as('relative'); + } + + public function addRelative(Personnel $relative, PersonnelRelativeStatus $status) + { + $this->relatives()->attach($relative, [ + 'status' => $status, + ]); + } + + public function parents(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Parent); + } + + public function children(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Child); + } + + public function spouse(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Spouse) + ->where('gender', '=', $this->gender->inverted()); + } + + public function siblings(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Sibling); + } + + public function siblingsChildren(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::SiblingsChild); + } + + public function parentsSiblings(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::ParentsSibling); + } + + public function grandParents(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Grandparent); + } + + public function grandChildren(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Grandchild); + } + + public function cousins(): BelongsToMany + { + return $this->relatives() + ->wherePivot('status', PersonnelRelativeStatus::Cousin); + } +} diff --git a/src/Models/PersonnelRelative.php b/src/Database/Models/PersonnelRelative.php similarity index 78% rename from src/Models/PersonnelRelative.php rename to src/Database/Models/PersonnelRelative.php index 088b2b3..1a8f699 100644 --- a/src/Models/PersonnelRelative.php +++ b/src/Database/Models/PersonnelRelative.php @@ -1,8 +1,8 @@ Person::GENDER_FEMALE, }; } + + public function inverted(): self + { + return match ($this) { + self::Male => self::Female, + self::Female => self::Male, + }; + } } diff --git a/src/Support/Enums/KeyableEnum.php b/src/Enums/KeyableEnum.php similarity index 84% rename from src/Support/Enums/KeyableEnum.php rename to src/Enums/KeyableEnum.php index c39d743..92f7409 100644 --- a/src/Support/Enums/KeyableEnum.php +++ b/src/Enums/KeyableEnum.php @@ -1,6 +1,6 @@ classBasename()->snake('-'); - return trans("creasico::base.{$self}.{$this->key()}"); + return trans("creasico::enums.{$self}.{$this->key()}"); } } diff --git a/src/Support/Enums/OptionableEnum.php b/src/Enums/OptionableEnum.php similarity index 95% rename from src/Support/Enums/OptionableEnum.php rename to src/Enums/OptionableEnum.php index ce1e1d3..feb3b33 100644 --- a/src/Support/Enums/OptionableEnum.php +++ b/src/Enums/OptionableEnum.php @@ -1,6 +1,6 @@ user(); - $user->load('identity.profile'); + $user->load('identity'); return ProfileResource::make($user); } diff --git a/src/Http/Controllers/StakeholderController.php b/src/Http/Controllers/StakeholderController.php index 5968f75..4a0a44b 100644 --- a/src/Http/Controllers/StakeholderController.php +++ b/src/Http/Controllers/StakeholderController.php @@ -2,13 +2,13 @@ namespace Creasi\Base\Http\Controllers; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Contracts\Stakeholder; +use Creasi\Base\Enums\StakeholderType; use Creasi\Base\Http\Requests\Stakeholder\StoreRequest; use Creasi\Base\Http\Requests\Stakeholder\UpdateRequest; use Creasi\Base\Http\Resources\Stakeholder\StakeholderCollection; use Creasi\Base\Http\Resources\Stakeholder\StakeholderResource; -use Creasi\Base\Models\Contracts\Company; -use Creasi\Base\Models\Contracts\Stakeholder; -use Creasi\Base\Models\Enums\BusinessRelativeType; use Illuminate\Http\Request; class StakeholderController extends Controller @@ -21,7 +21,7 @@ public function __construct() /** * @return StakeholderCollection */ - public function index(Company $company, BusinessRelativeType $type) + public function index(Company $company, StakeholderType $type) { $items = $company->stakeholders()->where([ 'type' => $type, @@ -35,7 +35,7 @@ public function index(Company $company, BusinessRelativeType $type) /** * @return StakeholderResource */ - public function store(StoreRequest $request, Company $company, BusinessRelativeType $type) + public function store(StoreRequest $request, Company $company, StakeholderType $type) { $item = $request->fulfill($company, $type); diff --git a/src/Http/Requests/Address/StoreRequest.php b/src/Http/Requests/Address/StoreRequest.php index bcc3023..fb38ffa 100644 --- a/src/Http/Requests/Address/StoreRequest.php +++ b/src/Http/Requests/Address/StoreRequest.php @@ -3,8 +3,8 @@ namespace Creasi\Base\Http\Requests\Address; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Address; -use Creasi\Base\Models\Enums\AddressType; +use Creasi\Base\Database\Models\Address; +use Creasi\Base\Enums\AddressType; use Creasi\Nusa\Contracts\HasAddresses; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; diff --git a/src/Http/Requests/Address/UpdateRequest.php b/src/Http/Requests/Address/UpdateRequest.php index 3bacfd4..75f6d83 100644 --- a/src/Http/Requests/Address/UpdateRequest.php +++ b/src/Http/Requests/Address/UpdateRequest.php @@ -3,8 +3,8 @@ namespace Creasi\Base\Http\Requests\Address; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Address; -use Creasi\Base\Models\Enums\AddressType; +use Creasi\Base\Database\Models\Address; +use Creasi\Base\Enums\AddressType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; diff --git a/src/Http/Requests/Auth/NewPasswordRequest.php b/src/Http/Requests/Auth/NewPasswordRequest.php index dcc2bab..8246c79 100644 --- a/src/Http/Requests/Auth/NewPasswordRequest.php +++ b/src/Http/Requests/Auth/NewPasswordRequest.php @@ -48,7 +48,7 @@ public function fulfill() $this->only('email', 'password', 'password_confirmation', 'token'), function ($user) { $user->forceFill([ - 'password' => $this->password, + 'password' => $this->input('password'), 'remember_token' => Str::random(60), ])->save(); diff --git a/src/Http/Requests/Company/StoreRequest.php b/src/Http/Requests/Company/StoreRequest.php index 1f024b3..2a025a6 100644 --- a/src/Http/Requests/Company/StoreRequest.php +++ b/src/Http/Requests/Company/StoreRequest.php @@ -3,7 +3,8 @@ namespace Creasi\Base\Http\Requests\Company; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Company; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Personnel; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -15,10 +16,10 @@ class StoreRequest extends FormRequest implements FormRequestContract public function rules(): array { return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string', Rule::unique('businesses', 'alias')], - 'email' => ['required', 'email', Rule::unique('businesses', 'email')], - 'phone_number' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'summary' => ['nullable', 'string', 'max:200'], ]; } diff --git a/src/Http/Requests/Company/UpdateRequest.php b/src/Http/Requests/Company/UpdateRequest.php index 91e0d03..a29ef4a 100644 --- a/src/Http/Requests/Company/UpdateRequest.php +++ b/src/Http/Requests/Company/UpdateRequest.php @@ -3,8 +3,10 @@ namespace Creasi\Base\Http\Requests\Company; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Company; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Personnel; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class UpdateRequest extends FormRequest implements FormRequestContract { @@ -13,11 +15,13 @@ class UpdateRequest extends FormRequest implements FormRequestContract */ public function rules(): array { + $key = $this->route('company'); + return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string'], - 'email' => ['required', 'email'], - 'phone_number' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')->ignore($key)], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')->ignore($key)], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'summary' => ['nullable', 'string', 'max:200'], ]; } diff --git a/src/Http/Requests/Employee/StoreRequest.php b/src/Http/Requests/Employee/StoreRequest.php index 6d56eae..5e4d4cb 100644 --- a/src/Http/Requests/Employee/StoreRequest.php +++ b/src/Http/Requests/Employee/StoreRequest.php @@ -3,8 +3,9 @@ namespace Creasi\Base\Http\Requests\Employee; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Company; -use Creasi\Base\Models\Enums\Gender; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Personnel; +use Creasi\Base\Enums\Gender; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -16,10 +17,10 @@ class StoreRequest extends FormRequest implements FormRequestContract public function rules(): array { return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string', Rule::unique('personnels', 'alias')], - 'email' => ['required', 'email', Rule::unique('personnels', 'email')], - 'phone' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'gender' => ['required', Rule::enum(Gender::class)], 'summary' => ['nullable', 'string', 'max:200'], ]; diff --git a/src/Http/Requests/Employee/UpdateRequest.php b/src/Http/Requests/Employee/UpdateRequest.php index 31a0e42..ec5821f 100644 --- a/src/Http/Requests/Employee/UpdateRequest.php +++ b/src/Http/Requests/Employee/UpdateRequest.php @@ -3,8 +3,10 @@ namespace Creasi\Base\Http\Requests\Employee; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Employee; +use Creasi\Base\Database\Models\Contracts\Employee; +use Creasi\Base\Database\Models\Personnel; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class UpdateRequest extends FormRequest implements FormRequestContract { @@ -13,11 +15,13 @@ class UpdateRequest extends FormRequest implements FormRequestContract */ public function rules(): array { + $key = $this->route('employee'); + return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string'], - 'email' => ['required', 'email'], - 'phone' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')->ignore($key)], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')->ignore($key)], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'summary' => ['nullable', 'string', 'max:200'], ]; } diff --git a/src/Http/Requests/FileUpload/StoreRequest.php b/src/Http/Requests/FileUpload/StoreRequest.php index 397bb95..233af2b 100644 --- a/src/Http/Requests/FileUpload/StoreRequest.php +++ b/src/Http/Requests/FileUpload/StoreRequest.php @@ -3,8 +3,8 @@ namespace Creasi\Base\Http\Requests\FileUpload; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\HasFileUploads; -use Creasi\Base\Models\Enums\FileUploadType; +use Creasi\Base\Database\Models\Contracts\HasFileUploads; +use Creasi\Base\Enums\FileUploadType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -31,8 +31,8 @@ public function fulfill(HasFileUploads $entity) return $entity->storeFile( $type, $this->file('upload'), - $this->name, - $this->title, + $this->input('name'), + $this->input('title'), ); } } diff --git a/src/Http/Requests/FileUpload/UpdateRequest.php b/src/Http/Requests/FileUpload/UpdateRequest.php index 99c14bd..13eabf0 100644 --- a/src/Http/Requests/FileUpload/UpdateRequest.php +++ b/src/Http/Requests/FileUpload/UpdateRequest.php @@ -3,7 +3,7 @@ namespace Creasi\Base\Http\Requests\FileUpload; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\FileUpload; +use Creasi\Base\Database\Models\FileUpload; use Illuminate\Foundation\Http\FormRequest; class UpdateRequest extends FormRequest implements FormRequestContract diff --git a/src/Http/Requests/ProfileRequest.php b/src/Http/Requests/ProfileRequest.php index 6dd2e60..e8d59f1 100644 --- a/src/Http/Requests/ProfileRequest.php +++ b/src/Http/Requests/ProfileRequest.php @@ -3,8 +3,7 @@ namespace Creasi\Base\Http\Requests; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Enums\Education; -use Creasi\Base\Models\Enums\TaxStatus; +use Creasi\Base\Database\Models\Personnel; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -15,40 +14,27 @@ class ProfileRequest extends FormRequest implements FormRequestContract */ public function rules(): array { + $key = $this->user()->identity->getKey(); + return [ - 'fullname' => ['required', 'string'], - 'nickname' => ['nullable', 'string'], - 'phone' => ['required', 'string'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')->ignore($key)], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')->ignore($key)], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], + 'prefix' => ['nullable', 'string', 'max:20'], + 'suffix' => ['nullable', 'string', 'max:20'], 'summary' => ['nullable', 'string', 'max:200'], - 'prefix' => ['nullable', 'string'], - 'suffix' => ['nullable', 'string'], - 'education' => ['nullable', Rule::enum(Education::class)], - 'tax_status' => ['nullable', Rule::enum(TaxStatus::class)], - 'tax_id' => ['nullable', 'string'], ]; } public function fulfill() { + /** @var \App\Models\User */ $user = $this->user(); - $data = $this->validated(); - - $user->identity()->update([ - 'name' => $data['fullname'], - 'alias' => $data['nickname'], - 'phone' => $data['phone'], - 'summary' => $data['summary'], - ]); - - $user->identity->profile()->update([ - 'prefix' => $data['prefix'], - 'suffix' => $data['suffix'], - 'education' => $this->enum('education', Education::class), - 'tax_status' => $this->enum('tax_status', TaxStatus::class), - 'tax_id' => $data['tax_id'], - ]); - - $user->load('identity.profile'); + + $user->identity()->update($this->validated()); + + $user->load('identity'); return $user; } diff --git a/src/Http/Requests/Stakeholder/StoreRequest.php b/src/Http/Requests/Stakeholder/StoreRequest.php index e1a6083..c7e072f 100644 --- a/src/Http/Requests/Stakeholder/StoreRequest.php +++ b/src/Http/Requests/Stakeholder/StoreRequest.php @@ -3,8 +3,9 @@ namespace Creasi\Base\Http\Requests\Stakeholder; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Company; -use Creasi\Base\Models\Enums\BusinessRelativeType; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Personnel; +use Creasi\Base\Enums\StakeholderType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -16,17 +17,17 @@ class StoreRequest extends FormRequest implements FormRequestContract public function rules(): array { return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string', Rule::unique('businesses', 'alias')], - 'email' => ['required', 'email', Rule::unique('businesses', 'email')], - 'phone_number' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'summary' => ['nullable', 'string', 'max:200'], ]; } - public function fulfill(Company $company, BusinessRelativeType $type) + public function fulfill(Company $company, StakeholderType $type) { - /** @var \Creasi\Base\Models\Entity */ + /** @var \Creasi\Base\Database\Models\Entity */ $entity = $company->newInstance($this->validated()); $company->addStakeholder($type, $entity); diff --git a/src/Http/Requests/Stakeholder/UpdateRequest.php b/src/Http/Requests/Stakeholder/UpdateRequest.php index 85a303f..4a745a9 100644 --- a/src/Http/Requests/Stakeholder/UpdateRequest.php +++ b/src/Http/Requests/Stakeholder/UpdateRequest.php @@ -3,8 +3,10 @@ namespace Creasi\Base\Http\Requests\Stakeholder; use Creasi\Base\Contracts\FormRequest as FormRequestContract; -use Creasi\Base\Models\Contracts\Stakeholder; +use Creasi\Base\Database\Models\Contracts\Stakeholder; +use Creasi\Base\Database\Models\Personnel; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class UpdateRequest extends FormRequest implements FormRequestContract { @@ -13,11 +15,13 @@ class UpdateRequest extends FormRequest implements FormRequestContract */ public function rules(): array { + $key = $this->route('stakeholder'); + return [ - 'name' => ['required', 'string'], - 'alias' => ['nullable', 'string'], - 'email' => ['required', 'email'], - 'phone_number' => ['nullable', 'numeric'], + 'name' => ['required', 'string', 'max:150'], + 'alias' => ['nullable', 'string', 'max:50', Rule::unique(Personnel::class, 'alias')->ignore($key)], + 'email' => ['required', 'email', 'max:150', Rule::unique(Personnel::class, 'email')->ignore($key)], + 'phone' => ['nullable', 'numeric', 'max_digits:20'], 'summary' => ['nullable', 'string', 'max:200'], ]; } diff --git a/src/Http/Resources/Address/AddressCollection.php b/src/Http/Resources/Address/AddressCollection.php index 57e354a..a9543ee 100644 --- a/src/Http/Resources/Address/AddressCollection.php +++ b/src/Http/Resources/Address/AddressCollection.php @@ -7,7 +7,7 @@ use Illuminate\Http\Request; /** - * @property-read \Illuminate\Support\Collection $collection + * @property-read \Illuminate\Support\Collection $collection */ class AddressCollection extends Collection { diff --git a/src/Http/Resources/Address/AddressResource.php b/src/Http/Resources/Address/AddressResource.php index 0a73e85..c0a7140 100644 --- a/src/Http/Resources/Address/AddressResource.php +++ b/src/Http/Resources/Address/AddressResource.php @@ -7,7 +7,7 @@ use Illuminate\Http\Resources\Json\JsonResource; /** - * @property-read \Creasi\Base\Models\Address $resource + * @property-read \Creasi\Base\Database\Models\Address $resource */ class AddressResource extends JsonResource { diff --git a/src/Http/Resources/AsAddress.php b/src/Http/Resources/AsAddress.php index af17c9c..814aa78 100644 --- a/src/Http/Resources/AsAddress.php +++ b/src/Http/Resources/AsAddress.php @@ -2,8 +2,8 @@ namespace Creasi\Base\Http\Resources; -use Creasi\Base\Models\Address; -use Creasi\Base\Models\Enums\AddressType; +use Creasi\Base\Database\Models\Address; +use Creasi\Base\Enums\AddressType; trait AsAddress { diff --git a/src/Http/Resources/AsEntity.php b/src/Http/Resources/AsEntity.php index 6dabec6..c64ebd4 100644 --- a/src/Http/Resources/AsEntity.php +++ b/src/Http/Resources/AsEntity.php @@ -2,11 +2,10 @@ namespace Creasi\Base\Http\Resources; -use Creasi\Base\Models\BusinessRelative; -use Creasi\Base\Models\Contracts\Company; -use Creasi\Base\Models\Contracts\Employee; -use Creasi\Base\Models\Contracts\Stakeholder; -use Creasi\Base\Models\Profile; +use Creasi\Base\Database\Models\BusinessRelative; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Contracts\Employee; +use Creasi\Base\Database\Models\Contracts\Stakeholder; trait AsEntity { @@ -21,44 +20,41 @@ final protected function meta(): array } /** - * @param \Creasi\Base\Models\Personnel|null $entity + * @param \Creasi\Base\Database\Models\Personnel|null $entity */ - final protected function forPersonnel(?Employee $entity = null, bool $showProfile = true): array + final protected function forPersonnel(Employee $entity): array { - $arr = [ + return [ $entity->getKeyName() => $entity->getKey(), - 'avatar' => $entity?->avatar?->only('url', 'title'), - 'fullname' => $entity?->name, - 'nickname' => $entity?->alias, - 'gender' => $entity?->gender?->toArray(), - 'email' => $entity?->email, - 'phone' => $entity?->phone, - 'summary' => $entity?->summary, + 'avatar' => $entity->avatar?->only('url', 'title'), + 'name' => $entity->name, + 'alias' => $entity->alias, + 'gender' => $entity->gender?->toArray(), + 'nik' => $entity->nik, + 'email' => $entity->email, + 'phone' => $entity->phone, + 'prefix' => $entity->prefix, + 'suffix' => $entity->suffix, + 'birth_date' => $entity->birth_date, + 'birth_place' => $entity->birthPlace?->only('code', 'name'), + 'summary' => $entity->summary, ]; - - if ($showProfile && $profile = $entity?->profile) { - $arr = \array_merge($arr, $this->forProfile($profile)); - } - - return $arr; } /** - * @param \Creasi\Base\Models\Business|null $entity + * @param \Creasi\Base\Database\Models\Business|null $entity */ - final protected function forCompany(?Company $entity = null): array + final protected function forCompany(Company $entity): array { - $arr = [ + return [ $entity->getKeyName() => $entity->getKey(), - 'avatar' => $entity?->avatar?->only('url', 'title'), - 'legalname' => $entity?->name, - 'aliasname' => $entity?->alias, - 'email' => $entity?->email, - 'phone' => $entity?->phone, - 'summary' => $entity?->summary, + 'avatar' => $entity->avatar?->only('url', 'title'), + 'name' => $entity->name, + 'alias' => $entity->alias, + 'email' => $entity->email, + 'phone' => $entity->phone, + 'summary' => $entity->summary, ]; - - return $arr; } final protected function forStakeholder(BusinessRelative|Stakeholder $entity): array @@ -71,29 +67,8 @@ final protected function forStakeholder(BusinessRelative|Stakeholder $entity): a $arr = $entity instanceof Company ? $this->forCompany($entity) - : $this->forPersonnel($entity, false); - - // $arr['type'] = \class_basename($entity); + : $this->forPersonnel($entity); return $arr; } - - final protected function forProfile(Profile $profile): array - { - if (empty($profile)) { - return []; - } - - return [ - 'nik' => $profile->nik, - 'prefix' => $profile->prefix, - 'suffix' => $profile->suffix, - 'birth_date' => $profile->birth_date, - 'birth_place' => $profile->birthPlace?->only('code', 'name'), - 'education' => $profile->education?->value, - 'religion' => $profile->religion?->toArray(), - 'tax_status' => $profile->tax_status?->toArray(), - 'tax_id' => $profile->tax_id, - ]; - } } diff --git a/src/Http/Resources/Company/CompanyResource.php b/src/Http/Resources/Company/CompanyResource.php index 013a7f6..1300945 100644 --- a/src/Http/Resources/Company/CompanyResource.php +++ b/src/Http/Resources/Company/CompanyResource.php @@ -7,7 +7,7 @@ use Illuminate\Http\Resources\Json\JsonResource; /** - * @property-read \Creasi\Base\Models\BusinessRelative $resource + * @property-read \Creasi\Base\Database\Models\BusinessRelative $resource */ class CompanyResource extends JsonResource { diff --git a/src/Http/Resources/Employee/EmployeeResource.php b/src/Http/Resources/Employee/EmployeeResource.php index 315fe80..4038cf0 100644 --- a/src/Http/Resources/Employee/EmployeeResource.php +++ b/src/Http/Resources/Employee/EmployeeResource.php @@ -7,7 +7,7 @@ use Illuminate\Http\Resources\Json\JsonResource; /** - * @property-read \Creasi\Base\Models\Personnel $resource + * @property-read \Creasi\Base\Database\Models\Personnel $resource */ class EmployeeResource extends JsonResource { @@ -30,6 +30,6 @@ public function __construct($resource) */ public function toArray(Request $request): array { - return $this->forPersonnel($this->resource, $this->resource->relationLoaded('profile')); + return $this->forPersonnel($this->resource); } } diff --git a/src/Http/Resources/FileUpload/FileUploadResource.php b/src/Http/Resources/FileUpload/FileUploadResource.php index 3a56740..0caa105 100644 --- a/src/Http/Resources/FileUpload/FileUploadResource.php +++ b/src/Http/Resources/FileUpload/FileUploadResource.php @@ -2,12 +2,12 @@ namespace Creasi\Base\Http\Resources\FileUpload; -use Creasi\Base\Models\FileAttached; +use Creasi\Base\Database\Models\FileAttached; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; /** - * @property-read \Creasi\Base\Models\FileUpload $resource + * @property-read \Creasi\Base\Database\Models\FileUpload $resource */ class FileUploadResource extends JsonResource { diff --git a/src/Http/Resources/ProfileResource.php b/src/Http/Resources/ProfileResource.php index 78e4afc..1b01468 100644 --- a/src/Http/Resources/ProfileResource.php +++ b/src/Http/Resources/ProfileResource.php @@ -2,13 +2,13 @@ namespace Creasi\Base\Http\Resources; -use Creasi\Base\Models\Enums\Education; -use Creasi\Base\Models\Enums\TaxStatus; +use Creasi\Base\Enums\Education; +use Creasi\Base\Enums\TaxStatus; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; /** - * @mixin \Creasi\Base\Models\User + * @mixin \Creasi\Base\Database\Models\User */ class ProfileResource extends JsonResource { @@ -20,8 +20,8 @@ public function __construct($resource) $this->additional([ 'meta' => [ - 'educations' => Education::toOptions(), - 'tax_statuses' => TaxStatus::toOptions(), + // 'educations' => Education::toOptions(), + // 'tax_statuses' => TaxStatus::toOptions(), ], 'links' => $this->links(), ]); @@ -34,9 +34,9 @@ public function __construct($resource) */ public function toArray(Request $request): array { - $resource = $this->forPersonnel($this->identity); + $resource = $this->forPersonnel($this->resource->identity); - $resource[$this->getKeyName()] = $this->getKey(); + $resource[$this->resource->getKeyName()] = $this->resource->getKey(); return $resource; } diff --git a/src/Http/Resources/Stakeholder/StakeholderResource.php b/src/Http/Resources/Stakeholder/StakeholderResource.php index 0734b4d..66cdd8b 100644 --- a/src/Http/Resources/Stakeholder/StakeholderResource.php +++ b/src/Http/Resources/Stakeholder/StakeholderResource.php @@ -7,7 +7,7 @@ use Illuminate\Http\Resources\Json\JsonResource; /** - * @property-read \Creasi\Base\Models\BusinessRelative $resource + * @property-read \Creasi\Base\Database\Models\BusinessRelative $resource */ class StakeholderResource extends JsonResource { diff --git a/src/Listeners/RegisterUserDevice.php b/src/Listeners/RegisterUserDevice.php index 024cae6..b2fd4da 100644 --- a/src/Listeners/RegisterUserDevice.php +++ b/src/Listeners/RegisterUserDevice.php @@ -2,8 +2,8 @@ namespace Creasi\Base\Listeners; +use Creasi\Base\Database\Models\Contracts\HasDevices; use Creasi\Base\Events\UserDeviceRegistered; -use Creasi\Base\Models\Contracts\HasDevices; use Illuminate\Auth\Events\Login; use Illuminate\Http\Request; diff --git a/src/Models/Business.php b/src/Models/Business.php deleted file mode 100644 index 2124b1c..0000000 --- a/src/Models/Business.php +++ /dev/null @@ -1,23 +0,0 @@ - factory() - */ -class Business extends Entity implements Company, HasTaxInfo -{ - use AsCompany; - use WithTaxInfo; - - protected $fillable = []; - - protected $casts = []; -} diff --git a/src/Models/BusinessRelative.php b/src/Models/BusinessRelative.php deleted file mode 100644 index 3d06fab..0000000 --- a/src/Models/BusinessRelative.php +++ /dev/null @@ -1,41 +0,0 @@ - 'int', - 'stakeholder_id' => 'int', - 'type' => BusinessRelativeType::class, - ]; - - public $timestamps = false; - - public function isInternal(): Attribute - { - return Attribute::get(fn () => $this->type->isInternal()); - } - - /** - * @return \Illuminate\Database\Eloquent\Relations\MorphTo - */ - public function stakeholder() - { - return $this->morphTo(); - } -} diff --git a/src/Models/Concerns/AsEmployee.php b/src/Models/Concerns/AsEmployee.php deleted file mode 100644 index 8cf0ecc..0000000 --- a/src/Models/Concerns/AsEmployee.php +++ /dev/null @@ -1,53 +0,0 @@ -append('company'); - - $this->makeHidden('primaryCompany'); - } - - /** - * {@inheritdoc} - */ - public function employers(): BelongsToMany - { - return $this->belongsToMany(Business::class, 'employments', 'employee_id', 'employer_id') - ->withPivot('is_primary', 'type', 'status', 'start_date', 'finish_date') - ->using(Employment::class) - ->as('employment'); - } - - /** - * {@inheritdoc} - */ - public function company(): Attribute - { - $this->loadMissing('primaryCompany'); - - return Attribute::get(fn () => $this->primaryCompany?->first()); - } - - /** - * {@inheritdoc} - */ - public function primaryCompany(): BelongsToMany - { - return $this->employers()->wherePivot('is_primary', '=', true); - } -} diff --git a/src/Models/Concerns/WithProfile.php b/src/Models/Concerns/WithProfile.php deleted file mode 100644 index 288742a..0000000 --- a/src/Models/Concerns/WithProfile.php +++ /dev/null @@ -1,20 +0,0 @@ -morphOne(Profile::class, 'identity'); - } -} diff --git a/src/Models/Contracts/Employee.php b/src/Models/Contracts/Employee.php deleted file mode 100644 index 5d4dffa..0000000 --- a/src/Models/Contracts/Employee.php +++ /dev/null @@ -1,24 +0,0 @@ - $employers - * @property-read null|Company $company - */ -interface Employee extends Stakeholder -{ - /** - * @return BelongsToMany|Company - */ - public function employers(): BelongsToMany; - - /** - * @return BelongsToMany|Company - */ - public function primaryCompany(): BelongsToMany; -} diff --git a/src/Models/Contracts/HasIdentity.php b/src/Models/Contracts/HasIdentity.php deleted file mode 100644 index 1c7f962..0000000 --- a/src/Models/Contracts/HasIdentity.php +++ /dev/null @@ -1,18 +0,0 @@ - 'int', - 'employee_id' => 'int', - 'is_primary' => 'bool', - 'type' => EmploymentType::class, - 'status' => EmploymentStatus::class, - 'start_date' => 'immutable_date', - 'finish_date' => 'immutable_date', - ]; - - public function isStarted(): Attribute - { - return Attribute::get(fn () => $this->start_date?->isPast()); - } - - public function isFinished(): Attribute - { - return Attribute::get(fn () => $this->finish_date?->isPast()); - } -} diff --git a/src/Models/Enums/BusinessRelativeType.php b/src/Models/Enums/BusinessRelativeType.php deleted file mode 100644 index 4d2cc27..0000000 --- a/src/Models/Enums/BusinessRelativeType.php +++ /dev/null @@ -1,76 +0,0 @@ -randomElement(Enums\Gender::cases()); - - return $this->has(Profile::factory(), 'profile')->state(fn ($attrs, $user) => [ - 'name' => \fake()->firstName($gender->toFaker()), - 'alias' => $user?->name ?: $attrs['name'], - 'email' => $user?->email ?: $attrs['email'], - 'gender' => $gender, - ]); - } - - public function withCompany( - ?bool $primary = null, - ?Enums\EmploymentType $type = null, - ?Enums\EmploymentStatus $status = null, - false|DateTimeInterface|null $startDate = null, - ): static { - if ($startDate === null) { - $startDate = \fake()->dateTime(); - } - - return $this->hasAttached(Business::factory(), [ - 'is_primary' => $primary, - 'type' => $type ?? \fake()->randomElement(Enums\EmploymentType::cases()), - 'status' => $status ?? \fake()->randomElement(Enums\EmploymentStatus::cases()), - 'start_date' => $startDate?->format('Y-m-d'), - 'finish_date' => null, - ], 'employers'); - } -} diff --git a/src/Models/Factories/PersonnelFactory.php b/src/Models/Factories/PersonnelFactory.php deleted file mode 100644 index 5e5f2c0..0000000 --- a/src/Models/Factories/PersonnelFactory.php +++ /dev/null @@ -1,43 +0,0 @@ - - */ -class PersonnelFactory extends Factory -{ - use Concerns\AsPersonnel; - use Concerns\WithAddress; - use Concerns\WithFileUpload; - - protected $model = Personnel::class; - - /** - * @return array - */ - public function definition(): array - { - /** @var Gender */ - $gender = $this->faker->randomElement(Gender::cases()); - - return [ - 'name' => $this->faker->firstName($gender->toFaker()), - 'email' => $this->faker->safeEmail(), - 'phone' => '08'.$this->faker->numerify('##########'), - 'gender' => $gender, - 'summary' => $this->faker->sentence(4), - ]; - } - - public function withoutUser(): static - { - return $this->state([ - 'user_id' => null, - ]); - } -} diff --git a/src/Models/Factories/ProfileFactory.php b/src/Models/Factories/ProfileFactory.php deleted file mode 100644 index 92d347c..0000000 --- a/src/Models/Factories/ProfileFactory.php +++ /dev/null @@ -1,37 +0,0 @@ - - */ -class ProfileFactory extends Factory -{ - protected $model = Profile::class; - - /** - * @return array - */ - public function definition(): array - { - $birthPlace = Regency::query()->whereHas('province', function (Builder $query) { - $query->where('code', 33); - })->inRandomOrder()->first(); - - return [ - 'nik' => $nik = $this->faker->nik(null, $birthDate = $this->faker->dateTime()), - 'birth_date' => $birthDate->format('Y-m-d'), - 'birth_place_code' => $birthPlace->code, - 'education' => $this->faker->randomElement(Enums\Education::cases()), - 'religion' => $this->faker->randomElement(Enums\Religion::cases()), - 'tax_status' => $this->faker->randomElement(Enums\TaxStatus::cases()), - 'tax_id' => $nik, - ]; - } -} diff --git a/src/Models/Personnel.php b/src/Models/Personnel.php deleted file mode 100644 index 9864f2b..0000000 --- a/src/Models/Personnel.php +++ /dev/null @@ -1,60 +0,0 @@ - $relatives - * @property-read BusinessRelative $stakeholder - * - * @method static Factories\PersonnelFactory factory() - */ -class Personnel extends Entity implements Employee, HasCredential, HasProfile -{ - use AsEmployee; - use WithCredential; - use WithProfile; - - protected $fillable = ['gender']; - - protected $casts = [ - 'gender' => Gender::class, - ]; - - /** - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany|static - */ - public function relatives() - { - return $this->belongsToMany(static::class, 'personnel_relatives', 'personnel_id', 'relative_id') - ->withPivot('status') - ->using(PersonnelRelative::class) - ->as('relative'); - } - - public function addRelative(Personnel $relative, PersonnelRelativeStatus $status) - { - $this->relatives()->attach($relative, [ - 'status' => $status, - ]); - } - - /** - * @return \Illuminate\Database\Eloquent\Relations\MorphToMany|BusinessRelative - */ - public function stakeholders() - { - return $this->morphToMany(Business::class, 'stakeholder', 'company_relatives', 'company_id', 'stakeholder_id') - ->withPivot('type') - ->as('stakeholder'); - } -} diff --git a/src/Models/Profile.php b/src/Models/Profile.php deleted file mode 100644 index 5350bf4..0000000 --- a/src/Models/Profile.php +++ /dev/null @@ -1,58 +0,0 @@ - factory() - */ -class Profile extends Model implements HasTaxInfo -{ - use WithRegency { - regency as birthPlace; - } - use WithTaxInfo; - - protected $fillable = [ - 'nik', - 'prefix', - 'suffix', - 'birth_date', - 'birth_place_code', - 'education', - 'religion', - ]; - - protected $casts = [ - 'birth_date' => 'immutable_date', - 'birth_place_code' => 'int', - 'education' => Education::class, - 'religion' => Religion::class, - ]; - - protected $regencyKey = 'birth_place_code'; - - /** - * @return \Illuminate\Database\Eloquent\Relations\MorphTo|Personnel - */ - public function identity() - { - return $this->morphTo('identity'); - } -} diff --git a/src/Repository.php b/src/Repository.php index f0b2ef3..0f4af91 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -2,12 +2,12 @@ namespace Creasi\Base; -use Creasi\Base\Models\Contracts\Company; -use Creasi\Base\Models\Contracts\Employee; -use Creasi\Base\Models\Contracts\HasIdentity; -use Creasi\Base\Models\Contracts\Stakeholder; -use Creasi\Base\Models\Entity; -use Creasi\Base\Models\Enums\BusinessRelativeType; +use Creasi\Base\Database\Models\Contracts\Company; +use Creasi\Base\Database\Models\Contracts\Employee; +use Creasi\Base\Database\Models\Contracts\HasIdentity; +use Creasi\Base\Database\Models\Contracts\Stakeholder; +use Creasi\Base\Database\Models\Entity; +use Creasi\Base\Enums\StakeholderType; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Routing\Router; @@ -20,7 +20,7 @@ class Repository public function __construct(protected Router $router) { - foreach (BusinessRelativeType::cases() as $stakeholder) { + foreach (StakeholderType::cases() as $stakeholder) { $this->stakeholders[(string) $stakeholder->key()->plural()] = $stakeholder; } } @@ -46,7 +46,7 @@ public function resolveEmployer(Authenticatable $user): Company $key = $this->router->input('company'); - return $key ? $user->identity->company->resolveRouteBinding($key) : $user->identity->company; + return $key ? $user->identity->employer->resolveRouteBinding($key) : $user->identity->employer; } public function resolveEntity(Company $company, Employee $employee): Entity @@ -59,9 +59,9 @@ public function resolveEntity(Company $company, Employee $employee): Entity return $entity->resolveRouteBinding($key) ?: $entity; } - public function resolveStakeholder(Company $company, BusinessRelativeType $type): Stakeholder + public function resolveStakeholder(Company $company, StakeholderType $type): Stakeholder { - /** @var \Creasi\Base\Models\BusinessRelative */ + /** @var \Creasi\Base\Database\Models\BusinessRelative */ $relative = $company->stakeholders()->newQuery()->with('stakeholder')->where([ 'type' => $type, 'stakeholder_id' => (int) $this->router->input('stakeholder'), @@ -70,7 +70,7 @@ public function resolveStakeholder(Company $company, BusinessRelativeType $type) return $relative?->stakeholder ?: $company->newInstance(); } - public function resolveBusinessRelativeType(): BusinessRelativeType + public function resolveBusinessRelativeType(): StakeholderType { return $this->stakeholders[$this->currentRoutePrefix()]; } diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 3df09b6..812873e 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -2,10 +2,10 @@ namespace Creasi\Base; -use Creasi\Base\Models\Address; -use Creasi\Base\Models\Contracts; -use Creasi\Base\Models\Entity; -use Creasi\Base\Models\Enums\BusinessRelativeType; +use Creasi\Base\Database\Models\Address; +use Creasi\Base\Database\Models\Contracts; +use Creasi\Base\Database\Models\Entity; +use Creasi\Base\Enums\StakeholderType; use Illuminate\Auth\Events\Login; use Illuminate\Auth\Notifications\ResetPassword; use Illuminate\Auth\Notifications\VerifyEmail; @@ -173,7 +173,7 @@ protected function registerBindings() return $app->call([$repo, 'resolveStakeholder']); }); - $this->app->bind(BusinessRelativeType::class, function ($app) { + $this->app->bind(StakeholderType::class, function ($app) { $repo = $app->make(Repository::class); return $app->call([$repo, 'resolveBusinessRelativeType']); @@ -197,7 +197,7 @@ public function provides() return [ 'creasi.base.user_model', 'creasi.base.route_home', - BusinessRelativeType::class, + StakeholderType::class, Contracts\Company::class, Contracts\Employee::class, Contracts\Stakeholder::class, diff --git a/testbench.yaml b/testbench.yaml index b3ac96e..ca02b50 100644 --- a/testbench.yaml +++ b/testbench.yaml @@ -1,10 +1,13 @@ providers: + - Creasi\Base\ServiceProvider - Creasi\Nusa\ServiceProvider - Laravel\Sanctum\SanctumServiceProvider - Workbench\App\Providers\WorkbenchServiceProvider workbench: - # welcome: true + welcome: true install: true + # assets: build: + - asset-publish - migrate:fresh diff --git a/tests/Http/AddressTest.php b/tests/Feature/Http/AddressTest.php similarity index 96% rename from tests/Http/AddressTest.php rename to tests/Feature/Http/AddressTest.php index 71b6f66..3e51c71 100644 --- a/tests/Http/AddressTest.php +++ b/tests/Feature/Http/AddressTest.php @@ -1,8 +1,9 @@ createOne(['name' => 'Internal Company']); - $user->identity->company->addStakeholder(BusinessRelativeType::Subsidiary, $external); + $user->identity->employer->addStakeholder(StakeholderType::Subsidiary, $external); $response = $this->getJson($this->getRoutePath()); diff --git a/tests/Feature/Http/Business/CustomerTest.php b/tests/Feature/Http/Business/CustomerTest.php new file mode 100644 index 0000000..647e9b3 --- /dev/null +++ b/tests/Feature/Http/Business/CustomerTest.php @@ -0,0 +1,17 @@ + [ 'avatar', - 'fullname', - 'nickname', + 'name', + 'alias', 'email', 'phone', 'gender' => ['value', 'label'], 'summary', - 'nik', 'prefix', 'suffix', 'birth_date', 'birth_place' => ['name', 'code'], - 'education', - 'religion' => ['value', 'label'], - 'tax_status' => ['value', 'label'], - 'tax_id', - ], - 'meta' => [ - 'educations' => [ - ['key', 'value'], - ], - 'tax_statuses' => [ - ['key', 'value', 'label'], - ], ], + 'meta' => [], ]; #[Test] @@ -57,18 +46,16 @@ public function should_able_to_update_profile_data(): void { Sanctum::actingAs($user = $this->user()); - $user->load('identity.profile'); + $user->load('identity'); $response = $this->putJson($this->getRoutePath(), [ - 'fullname' => $user->identity->name, - 'nickname' => $user->identity->alias, + 'name' => $user->identity->name, + 'alias' => $user->identity->alias, + 'email' => $user->identity->email, 'phone' => $user->identity->phone, 'summary' => null, 'prefix' => null, 'suffix' => null, - 'education' => $user->identity->profile?->education->value, - 'tax_status' => $user->identity->profile?->tax_status->value, - 'tax_id' => $user->identity->profile?->tax_id, ]); $response->assertOk()->assertJsonStructure($this->responseStructure); diff --git a/tests/Http/SettingTest.php b/tests/Feature/Http/SettingTest.php similarity index 90% rename from tests/Http/SettingTest.php rename to tests/Feature/Http/SettingTest.php index 3ec20f7..8a22b55 100644 --- a/tests/Http/SettingTest.php +++ b/tests/Feature/Http/SettingTest.php @@ -1,7 +1,8 @@ createOne(['name' => 'External Company']); $personal = Personnel::factory()->createOne(['name' => 'External Personal']); - $user->identity->company->addStakeholder($this->getRelativeType(), $company); - $user->identity->company->addStakeholder($this->getRelativeType(), $personal); + $user->identity->employer->addStakeholder($this->getRelativeType(), $company); + $user->identity->employer->addStakeholder($this->getRelativeType(), $personal); $response = $this->getJson($this->getRoutePath()); @@ -83,7 +86,7 @@ public function should_able_to_show_existing_data(): void $model = Business::factory()->createOne(); - $user->identity->company->addStakeholder($this->getRelativeType(), $model); + $user->identity->employer->addStakeholder($this->getRelativeType(), $model); $response = $this->getJson($this->getRoutePath($model)); @@ -100,7 +103,7 @@ public function should_able_to_update_existing_data(): void $model = Business::factory()->createOne(); - $user->identity->company->addStakeholder($this->getRelativeType(), $model); + $user->identity->employer->addStakeholder($this->getRelativeType(), $model); $response = $this->putJson($this->getRoutePath($model), $model->toArray()); @@ -117,7 +120,7 @@ public function should_able_to_delete_existing_data(): void $model = Business::factory()->createOne(); - $user->identity->company->addStakeholder($this->getRelativeType(), $model); + $user->identity->employer->addStakeholder($this->getRelativeType(), $model); $response = $this->deleteJson($this->getRoutePath($model)); diff --git a/tests/Http/SupportTest.php b/tests/Feature/Http/SupportTest.php similarity index 86% rename from tests/Http/SupportTest.php rename to tests/Feature/Http/SupportTest.php index 6095c47..9903ecc 100644 --- a/tests/Http/SupportTest.php +++ b/tests/Feature/Http/SupportTest.php @@ -1,7 +1,8 @@ createOne(); - - $this->assertModelExists($model); - $this->assertInstanceOf(CarbonImmutable::class, $model->birth_date); - $this->assertInstanceOf(Education::class, $model->education); - $this->assertInstanceOf(Religion::class, $model->religion); - } - - #[Test] - public function should_owned_by_personnel() - { - $person = Personnel::factory()->createOne(); - $profile = Profile::factory()->createOne(); - - $profile->identity()->associate($person)->save(); - - $this->assertModelExists($person->profile); - $this->assertInstanceOf(Regency::class, $profile->birthPlace); - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php index 7e49543..1e2f179 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,51 +3,31 @@ namespace Creasi\Tests; use Closure; -use Creasi\Base\ServiceProvider; -use Creasi\Nusa\ServiceProvider as NusaServiceProvider; -use Illuminate\Foundation\Testing\RefreshDatabase; -use Laravel\Sanctum\SanctumServiceProvider; +use Creasi\Base\Database\Factories\PersonnelFactory; +use Creasi\Base\Enums\EmploymentStatus; +use Illuminate\Foundation\Testing\DatabaseMigrations; use Orchestra\Testbench\Concerns\WithWorkbench; use Orchestra\Testbench\TestCase as Orchestra; use Workbench\App\Models\User; -use Workbench\App\Providers\WorkbenchServiceProvider; abstract class TestCase extends Orchestra { - use RefreshDatabase; + use DatabaseMigrations; use WithWorkbench; private ?User $currentUser = null; - /** - * @param \Illuminate\Foundation\Application $app - */ - protected function getPackageProviders($app): array - { - return [ - ServiceProvider::class, - NusaServiceProvider::class, - SanctumServiceProvider::class, - WorkbenchServiceProvider::class, - ]; - } - - final protected function user(array|Closure $attrs = []): User - { + final protected function user( + array|Closure $attrs = [], + ?EmploymentStatus $status = null, + bool $isPrimary = true + ): User { if (! $this->currentUser?->exists) { $this->currentUser = User::factory() - ->withIdentity(fn ($p) => $p->withProfile()->withCompany(true)) + ->withIdentity(fn (PersonnelFactory $f) => $f->asEmployee($status, $isPrimary)) ->createOne($attrs); } return $this->currentUser; } - - /** - * @param \Illuminate\Foundation\Application $app - */ - protected function getEnvironmentSetUp($app): void - { - $app->useEnvironmentPath(\dirname(__DIR__)); - } } diff --git a/tests/Models/AddressTest.php b/tests/Unit/Models/AddressTest.php similarity index 86% rename from tests/Models/AddressTest.php rename to tests/Unit/Models/AddressTest.php index da7955b..c2f0cc4 100644 --- a/tests/Models/AddressTest.php +++ b/tests/Unit/Models/AddressTest.php @@ -1,8 +1,8 @@ createOne([ 'rt' => $rt, 'rw' => $rw, diff --git a/tests/Models/BusinessTest.php b/tests/Unit/Models/BusinessTest.php similarity index 65% rename from tests/Models/BusinessTest.php rename to tests/Unit/Models/BusinessTest.php index 03fcb9c..c05a959 100644 --- a/tests/Models/BusinessTest.php +++ b/tests/Unit/Models/BusinessTest.php @@ -1,14 +1,13 @@ withAddress()->createOne(); $this->assertCount(1, $business->addresses); @@ -30,6 +30,7 @@ public function should_have_addresses() #[Test] public function should_have_avatar_image() { + /** @var Business */ $business = Business::factory()->createOne(); // $this->assertNull($company->avatar); @@ -47,65 +48,66 @@ public function should_have_avatar_image() #[Test] public function should_have_employees() { + /** @var Business */ $business = Business::factory()->createOne(); + /** @var Personnel */ $person = Personnel::factory()->createOne(); - $business->employees()->attach($person, [ - 'is_primary' => true, - 'type' => EmploymentType::Fulltime, - 'status' => EmploymentStatus::Permanent, - 'start_date' => now()->subDays(3), - ]); + $business->addEmployee($person, EmploymentStatus::Fulltime, now()->subDays(3), true); $employee = $business->employees->first(); $this->assertTrue($employee->employment->is_started); $this->assertNull($employee->employment->is_finished); - $this->assertInstanceOf(EmploymentType::class, $employee->employment->type); - $this->assertInstanceOf(EmploymentStatus::class, $employee->employment->status); + $this->assertInstanceOf(EmploymentStatus::class, $employee->employment->employment_status); } #[Test] public function should_have_other_company_as_stakeholders() { + /** @var Business */ $business = Business::factory()->createOne(['name' => 'Internal Company']); + /** @var Business */ $external = Business::factory()->createOne(['name' => 'External Company']); - $business->addStakeholder(BusinessRelativeType::Vendor, $external); + $business->addStakeholder(StakeholderType::Vendor, $external); $this->assertCount(1, $business->companyRelatives); $vendor = $business->companyRelatives->first(); $this->assertFalse($vendor->stakeholder->is_internal); - $this->assertInstanceOf(BusinessRelativeType::class, $vendor->stakeholder->type); + $this->assertInstanceOf(StakeholderType::class, $vendor->stakeholder->type); } #[Test] public function should_have_other_individual_as_stakeholders() { $business = Business::factory()->createOne(['name' => 'Some Company']); - $personal = Personnel::factory()->withProfile()->createOne(); + $personal = Personnel::factory()->createOne(); - $business->addStakeholder(BusinessRelativeType::Owner, $personal, true); + $business->addStakeholder(StakeholderType::Owner, $personal, true); $this->assertCount(1, $business->individualRelatives); $owner = $business->individualRelatives->first(); $this->assertTrue($owner->stakeholder->is_internal); - $this->assertInstanceOf(BusinessRelativeType::class, $owner->stakeholder->type); + $this->assertInstanceOf(StakeholderType::class, $owner->stakeholder->type); } #[Test] public function should_have_access_to_mixed_stakeholders() { + /** @var Business */ $business = Business::factory()->createOne(['name' => 'Internal Company']); + /** @var Business */ $external = Business::factory()->createOne(['name' => 'External Company']); - $personal = Personnel::factory()->withProfile()->createOne(); + /** @var Business */ + $personal = Personnel::factory()->createOne(); - $business->addStakeholder(BusinessRelativeType::Owner, $personal); - $business->addStakeholder(BusinessRelativeType::Supplier, $external); + $business->addStakeholder(StakeholderType::Owner, $personal); + $business->addStakeholder(StakeholderType::Supplier, $external); $this->assertCount(2, $business->stakeholders); } diff --git a/tests/Models/FileUploadTest.php b/tests/Unit/Models/FileUploadTest.php similarity index 93% rename from tests/Models/FileUploadTest.php rename to tests/Unit/Models/FileUploadTest.php index 7600093..21e20d8 100644 --- a/tests/Models/FileUploadTest.php +++ b/tests/Unit/Models/FileUploadTest.php @@ -1,11 +1,11 @@ withAddress()->createOne(); $this->assertCount(1, $person->addresses); @@ -29,6 +30,7 @@ public function should_have_addresses() #[Test] public function should_have_avatar_image() { + /** @var Personnel */ $person = Personnel::factory()->createOne(); $avatar = $person->setAvatar( @@ -42,7 +44,9 @@ public function should_have_avatar_image() #[Test] public function should_have_relatives() { + /** @var Personnel */ $person = Personnel::factory()->createOne(); + /** @var Personnel */ $relative = Personnel::factory()->createOne(); $person->addRelative($relative, PersonnelRelativeStatus::Parent); diff --git a/tests/Models/UserTest.php b/tests/Unit/Models/UserTest.php similarity index 78% rename from tests/Models/UserTest.php rename to tests/Unit/Models/UserTest.php index ce1f1ad..b5213cb 100644 --- a/tests/Models/UserTest.php +++ b/tests/Unit/Models/UserTest.php @@ -1,8 +1,8 @@ createOne(); + /** @var Personnel */ $identity = Personnel::factory()->createOne(); $user->identity()->save($identity); diff --git a/tests/ServiceProviderTest.php b/tests/Unit/ServiceProviderTest.php similarity index 93% rename from tests/ServiceProviderTest.php rename to tests/Unit/ServiceProviderTest.php index 12542e3..510bc69 100644 --- a/tests/ServiceProviderTest.php +++ b/tests/Unit/ServiceProviderTest.php @@ -2,8 +2,9 @@ declare(strict_types=1); -namespace Creasi\Tests; +namespace Creasi\Tests\Unit; +use Creasi\Tests\TestCase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Route; use Orchestra\Testbench\Attributes\DefineEnvironment; diff --git a/workbench/.env.example b/workbench/.env.example new file mode 100644 index 0000000..28ab839 --- /dev/null +++ b/workbench/.env.example @@ -0,0 +1,24 @@ +APP_DEBUG=true +APP_URL=http://localhost:8000 + +DB_CONNECTION=pgsql +DB_HOST=127.0.0.1 +DB_DATABASE=creasi_base +DB_USERNAME=creasico +DB_PASSWORD=secret + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database +SESSION_DRIVER=database +SESSION_LIFETIME=120 + +# MAIL_MAILER=smtp +# MAIL_HOST= +# MAIL_PORT=2525 +# MAIL_USERNAME= +# MAIL_PASSWORD= +# MAIL_ENCRYPTION=null +# MAIL_FROM_ADDRESS= +# MAIL_FROM_NAME="${APP_NAME}" diff --git a/workbench/app/Models/User.php b/workbench/app/Models/User.php index ac90375..cdad3ec 100644 --- a/workbench/app/Models/User.php +++ b/workbench/app/Models/User.php @@ -3,11 +3,11 @@ namespace Workbench\App\Models; use Creasi\Base\Contracts\HasCredentialTokens; -use Creasi\Base\Models\Concerns\WithCredentialTokens; -use Creasi\Base\Models\Concerns\WithDevices; -use Creasi\Base\Models\Concerns\WithIdentity; -use Creasi\Base\Models\Contracts\HasDevices; -use Creasi\Base\Models\Contracts\HasIdentity; +use Creasi\Base\Database\Models\Concerns\WithCredentialTokens; +use Creasi\Base\Database\Models\Concerns\WithDevices; +use Creasi\Base\Database\Models\Concerns\WithIdentity; +use Creasi\Base\Database\Models\Contracts\HasDevices; +use Creasi\Base\Database\Models\Contracts\HasIdentity; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; diff --git a/workbench/app/Providers/WorkbenchServiceProvider.php b/workbench/app/Providers/WorkbenchServiceProvider.php index 35fa4de..bf5d357 100644 --- a/workbench/app/Providers/WorkbenchServiceProvider.php +++ b/workbench/app/Providers/WorkbenchServiceProvider.php @@ -30,7 +30,7 @@ public function register(): void $config->set('database.default', $conn); if ($conn === 'sqlite') { - if (! file_exists($database = __DIR__.'/test.sqlite')) { + if (! file_exists($database = \database_path('/test.sqlite'))) { touch($database); } diff --git a/workbench/database/factories/UserFactory.php b/workbench/database/factories/UserFactory.php index 832411d..3b215c5 100644 --- a/workbench/database/factories/UserFactory.php +++ b/workbench/database/factories/UserFactory.php @@ -2,7 +2,7 @@ namespace Workbench\Database\Factories; -use Creasi\Base\Models\Factories\Concerns\WithIdentity; +use Creasi\Base\Database\Factories\Concerns\WithIdentity; use Orchestra\Testbench\Factories\UserFactory as Factory; use Workbench\App\Models\User;