diff --git a/.editorconfig b/.editorconfig
index 0cf80ee..2dd0e58 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -14,6 +14,19 @@ trim_trailing_whitespace = false
[*.{php,json}]
indent_size = 4
-[*.{css,scss}]
+[*.blade.php]
+indent_size = 2
+
+[*.{yml,yaml}]
+indent_size = 2
+
+[{compose,docker-compose}.{yml,yaml}]
+indent_size = 2
+
+[*.scss]
+indent_size = 2
+quote_type = single
+
+[*.css]
indent_size = 2
quote_type = single
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d0ebc1f..3ff21b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,9 +17,9 @@ stages:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
+ - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS"
when: never
- - if: '$CI_COMMIT_BRANCH'
+ - if: "$CI_COMMIT_BRANCH"
variables:
PHP_CI_IMAGE: "registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/uwil-local-8.5:latest"
@@ -27,7 +27,7 @@ variables:
eslint:
rules:
- when: never
-
+
stylelint:
rules:
- when: never
@@ -38,7 +38,7 @@ stylelint:
needs:
- job: composer_vendor_dev
artifacts: true
-
+
pint:
<<: *php-lint-base
script:
@@ -58,7 +58,7 @@ composer_vendor_dev:
before_script:
- composer config gitlab-token.lab.s-web.fr "${CI_DEPLOY_USER}" "${CI_DEPLOY_PASSWORD}"
script:
- - composer install --ignore-platform-reqs --no-interaction --no-scripts --prefer-dist
+ - composer install --ignore-platform-reqs --no-interaction --no-scripts --prefer-dist
artifacts:
paths:
- vendor/
@@ -68,8 +68,7 @@ composer_vendor_dev:
optional: true
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- - if: '$CI_COMMIT_BRANCH'
-
+ - if: "$CI_COMMIT_BRANCH"
# TEST
test:unit:
diff --git a/composer.json b/composer.json
index 56d6137..516c4de 100644
--- a/composer.json
+++ b/composer.json
@@ -9,7 +9,10 @@
],
"license": "MIT",
"require": {
- "php": "^8.5"
+ "php": "^8.5",
+ "ext-mbstring": "*",
+ "ramsey/uuid": "^4.9",
+ "symfony/polyfill-php86": "^1.41"
},
"require-dev": {
"ace-of-aces/intellipest": "^1.0",
@@ -22,11 +25,10 @@
"pestphp/pest-plugin-type-coverage": "^4.0",
"php-parallel-lint/php-parallel-lint": "^1.4",
"phpstan/phpstan": "^2.2",
+ "phpstan/phpstan-webmozart-assert": "^2.0",
"phpunit/phpunit": "^12.5",
- "ramsey/uuid": "^4.9",
"rector/rector": "^2.5",
- "slevomat/coding-standard": "^8.22",
- "symfony/polyfill-php86": "^1.41"
+ "slevomat/coding-standard": "^8.22"
},
"config": {
"optimize-autoloader": true,
diff --git a/composer.lock b/composer.lock
index a95785e..c9e9e01 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,303 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "d82f0b44d961889b942328288916d808",
- "packages": [],
+ "content-hash": "28cc358f265eb630dffbd5338ea416ea",
+ "packages": [
+ {
+ "name": "brick/math",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "2effe05d2177c451b86c6a073196a4034c02f211"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211",
+ "reference": "2effe05d2177c451b86c6a073196a4034c02f211",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.2"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "2.2.13",
+ "phpstan/phpstan-phpunit": "2.0.18",
+ "phpunit/phpunit": "^11.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "bignumber",
+ "brick",
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/1.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2026-09-12T10:28:18+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.45",
+ "fakerphp/faker": "^1.24",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^2.1",
+ "mockery/mockery": "^1.6",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpspec/prophecy-phpunit": "^2.3",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^10.5",
+ "ramsey/coding-standard": "^2.3",
+ "ramsey/conventional-commits": "^1.6",
+ "roave/security-advisories": "dev-latest"
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
+ },
+ "time": "2025-03-22T05:38:12+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.9.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2",
+ "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0",
+ "php": "^8.0",
+ "ramsey/collection": "^1.2 || ^2.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.25",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "mockery/mockery": "^1.6",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.6",
+ "php-mock/php-mock-mockery": "^1.5",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "slevomat/coding-standard": "^8.18",
+ "squizlabs/php_codesniffer": "^3.13"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.9.4"
+ },
+ "time": "2026-09-16T11:39:30+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php86",
+ "version": "v1.41.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php86.git",
+ "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e",
+ "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php86\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php86/tree/v1.41.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-07-02T13:42:24+00:00"
+ }
+ ],
"packages-dev": [
{
"name": "ace-of-aces/intellipest",
@@ -150,65 +445,6 @@
],
"time": "2026-03-29T15:46:14+00:00"
},
- {
- "name": "brick/math",
- "version": "0.18.0",
- "source": {
- "type": "git",
- "url": "https://github.com/brick/math.git",
- "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/82944324d1c1bdb2c2618e89978d4e2ad78d69ad",
- "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad",
- "shasum": ""
- },
- "require": {
- "php": "^8.2"
- },
- "require-dev": {
- "phpstan/phpstan": "2.1.22",
- "phpunit/phpunit": "^11.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Brick\\Math\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Arbitrary-precision arithmetic library",
- "keywords": [
- "Arbitrary-precision",
- "BigInteger",
- "BigRational",
- "arithmetic",
- "bigdecimal",
- "bignum",
- "bignumber",
- "brick",
- "decimal",
- "integer",
- "math",
- "mathematics",
- "rational"
- ],
- "support": {
- "issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.18.0"
- },
- "funding": [
- {
- "url": "https://github.com/BenMorel",
- "type": "github"
- }
- ],
- "time": "2026-06-14T18:21:03+00:00"
- },
{
"name": "composer/pcre",
"version": "3.4.0",
@@ -676,16 +912,16 @@
},
{
"name": "filp/whoops",
- "version": "2.18.4",
+ "version": "2.18.5",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
+ "reference": "baec851ad6ae00db8bd0fdd30d208afc1b71c56e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
- "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/baec851ad6ae00db8bd0fdd30d208afc1b71c56e",
+ "reference": "baec851ad6ae00db8bd0fdd30d208afc1b71c56e",
"shasum": ""
},
"require": {
@@ -694,8 +930,8 @@
},
"require-dev": {
"mockery/mockery": "^1.0",
- "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
- "symfony/var-dumper": "^4.0 || ^5.0"
+ "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3 || ^10.5.58",
+ "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0"
},
"suggest": {
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
@@ -735,7 +971,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.18.4"
+ "source": "https://github.com/filp/whoops/tree/2.18.5"
},
"funding": [
{
@@ -743,7 +979,7 @@
"type": "github"
}
],
- "time": "2025-08-08T12:00:00+00:00"
+ "time": "2026-09-18T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -862,16 +1098,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.30.5",
+ "version": "v1.32.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "fe4148c503a0e266353d61396b79bbf7f35122df"
+ "reference": "006bd7825eb01daf92959d060b89cd9514fe4253"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/fe4148c503a0e266353d61396b79bbf7f35122df",
- "reference": "fe4148c503a0e266353d61396b79bbf7f35122df",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/006bd7825eb01daf92959d060b89cd9514fe4253",
+ "reference": "006bd7825eb01daf92959d060b89cd9514fe4253",
"shasum": ""
},
"require": {
@@ -883,13 +1119,13 @@
},
"require-dev": {
"composer/semver": "^3.4.4",
- "friendsofphp/php-cs-fixer": "^3.95.18",
- "illuminate/view": "^13.24.0",
- "larastan/larastan": "^3.10.0",
+ "friendsofphp/php-cs-fixer": "^3.95.25",
+ "illuminate/view": "^13.31.0",
+ "larastan/larastan": "^3.11.0",
"laravel-zero/framework": "^13.0.0",
"laravel/agent-detector": "^2.0.2",
- "laravel/prompts": "^0.3.22",
- "mockery/mockery": "^1.6.12",
+ "laravel/prompts": "^0.3.24",
+ "mockery/mockery": "^1.6.15",
"nunomaduro/termwind": "^2.4.0",
"pestphp/pest": "^4.7.8"
},
@@ -928,7 +1164,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2026-08-10T15:35:50+00:00"
+ "time": "2026-09-10T10:47:55+00:00"
},
{
"name": "mockery/mockery",
@@ -1074,16 +1310,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v5.8.0",
+ "version": "v5.9.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f"
+ "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
- "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def",
+ "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def",
"shasum": ""
},
"require": {
@@ -1125,9 +1361,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0"
},
- "time": "2026-07-04T14:30:18+00:00"
+ "time": "2026-09-13T18:51:52+00:00"
},
{
"name": "nunomaduro/collision",
@@ -2345,16 +2581,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.3.3",
+ "version": "2.3.5",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3"
+ "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
- "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/148cefffaf0233e4c08cc13db8a195a56dd6dfe9",
+ "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9",
"shasum": ""
},
"require": {
@@ -2386,17 +2622,17 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.5"
},
- "time": "2026-07-08T07:01:06+00:00"
+ "time": "2026-08-31T16:05:28+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "2.2.9",
+ "version": "2.2.14",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/13d6b4f347bad222da436580c8304fa6f83e6bd0",
- "reference": "13d6b4f347bad222da436580c8304fa6f83e6bd0",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9c672e7a8e791dfc3d30e55f683e73fc0b63a3ac",
+ "reference": "9c672e7a8e791dfc3d30e55f683e73fc0b63a3ac",
"shasum": ""
},
"require": {
@@ -2452,7 +2688,58 @@
"type": "github"
}
],
- "time": "2026-08-22T07:38:16+00:00"
+ "time": "2026-09-12T21:39:33+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-webmozart-assert",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
+ "reference": "0c641817d2a8f05c7157f92d91986e74d3c8ab0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/0c641817d2a8f05c7157f92d91986e74d3c8ab0c",
+ "reference": "0c641817d2a8f05c7157f92d91986e74d3c8ab0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0"
+ },
+ "require-dev": {
+ "nikic/php-parser": "^5.1",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "webmozart/assert": "^1.11.0"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan webmozart/assert extension",
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
+ "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/2.0.0"
+ },
+ "time": "2024-10-14T03:45:26+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -3043,160 +3330,6 @@
},
"time": "2021-10-29T13:26:27+00:00"
},
- {
- "name": "ramsey/collection",
- "version": "2.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/collection.git",
- "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
- "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "captainhook/plugin-composer": "^5.3",
- "ergebnis/composer-normalize": "^2.45",
- "fakerphp/faker": "^1.24",
- "hamcrest/hamcrest-php": "^2.0",
- "jangregor/phpstan-prophecy": "^2.1",
- "mockery/mockery": "^1.6",
- "php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.4",
- "phpspec/prophecy-phpunit": "^2.3",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-mockery": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpunit/phpunit": "^10.5",
- "ramsey/coding-standard": "^2.3",
- "ramsey/conventional-commits": "^1.6",
- "roave/security-advisories": "dev-latest"
- },
- "type": "library",
- "extra": {
- "captainhook": {
- "force-install": true
- },
- "ramsey/conventional-commits": {
- "configFile": "conventional-commits.json"
- }
- },
- "autoload": {
- "psr-4": {
- "Ramsey\\Collection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ben Ramsey",
- "email": "ben@benramsey.com",
- "homepage": "https://benramsey.com"
- }
- ],
- "description": "A PHP library for representing and manipulating collections.",
- "keywords": [
- "array",
- "collection",
- "hash",
- "map",
- "queue",
- "set"
- ],
- "support": {
- "issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/2.1.1"
- },
- "time": "2025-03-22T05:38:12+00:00"
- },
- {
- "name": "ramsey/uuid",
- "version": "4.9.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/uuid.git",
- "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8",
- "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8",
- "shasum": ""
- },
- "require": {
- "brick/math": ">=0.8.16 <=0.18",
- "php": "^8.0",
- "ramsey/collection": "^1.2 || ^2.0"
- },
- "replace": {
- "rhumsaa/uuid": "self.version"
- },
- "require-dev": {
- "captainhook/captainhook": "^5.25",
- "captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "ergebnis/composer-normalize": "^2.47",
- "mockery/mockery": "^1.6",
- "paragonie/random-lib": "^2",
- "php-mock/php-mock": "^2.6",
- "php-mock/php-mock-mockery": "^1.5",
- "php-parallel-lint/php-parallel-lint": "^1.4.0",
- "phpbench/phpbench": "^1.2.14",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-mockery": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpunit/phpunit": "^9.6",
- "slevomat/coding-standard": "^8.18",
- "squizlabs/php_codesniffer": "^3.13"
- },
- "suggest": {
- "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
- "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
- "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
- "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
- "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
- },
- "type": "library",
- "extra": {
- "captainhook": {
- "force-install": true
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Ramsey\\Uuid\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
- "keywords": [
- "guid",
- "identifier",
- "uuid"
- ],
- "support": {
- "issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.9.3"
- },
- "time": "2026-06-18T03:57:49+00:00"
- },
{
"name": "react/event-loop",
"version": "v1.6.0",
@@ -3271,21 +3404,21 @@
},
{
"name": "rector/rector",
- "version": "2.6.4",
+ "version": "2.6.7",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "6ff008471683591224951526247b7a2b86980ba9"
+ "reference": "f4aa224edb9b0630fb43826d4cb6a49b62e48d4c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/6ff008471683591224951526247b7a2b86980ba9",
- "reference": "6ff008471683591224951526247b7a2b86980ba9",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/f4aa224edb9b0630fb43826d4cb6a49b62e48d4c",
+ "reference": "f4aa224edb9b0630fb43826d4cb6a49b62e48d4c",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.2.6"
+ "phpstan/phpstan": "^2.2.14"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -3293,9 +3426,6 @@
"rector/rector-phpunit": "*",
"rector/rector-symfony": "*"
},
- "suggest": {
- "ext-dom": "To manipulate phpunit.xml via the custom-rule command"
- },
"bin": [
"bin/rector"
],
@@ -3319,7 +3449,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.6.4"
+ "source": "https://github.com/rectorphp/rector/tree/2.6.7"
},
"funding": [
{
@@ -3327,7 +3457,7 @@
"type": "github"
}
],
- "time": "2026-08-27T09:20:34+00:00"
+ "time": "2026-09-13T20:17:44+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -4453,16 +4583,16 @@
},
{
"name": "symfony/console",
- "version": "v8.1.5",
+ "version": "v8.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "d07c06839e33047e2c894a6793248f3fb66c8129"
+ "reference": "29afb89f4e941f68a6e90f28e3f52ff1f6793a7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/d07c06839e33047e2c894a6793248f3fb66c8129",
- "reference": "d07c06839e33047e2c894a6793248f3fb66c8129",
+ "url": "https://api.github.com/repos/symfony/console/zipball/29afb89f4e941f68a6e90f28e3f52ff1f6793a7d",
+ "reference": "29afb89f4e941f68a6e90f28e3f52ff1f6793a7d",
"shasum": ""
},
"require": {
@@ -4529,7 +4659,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v8.1.5"
+ "source": "https://github.com/symfony/console/tree/v8.1.7"
},
"funding": [
{
@@ -4549,7 +4679,7 @@
"type": "tidelift"
}
],
- "time": "2026-08-21T14:29:57+00:00"
+ "time": "2026-09-13T10:55:57+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -4624,16 +4754,16 @@
},
{
"name": "symfony/finder",
- "version": "v8.1.5",
+ "version": "v8.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "8d7acede2b2ae07605783d1c43e49b5767036474"
+ "reference": "4fbe46a3eb64abf8a57f0364075b91f4a233e062"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/8d7acede2b2ae07605783d1c43e49b5767036474",
- "reference": "8d7acede2b2ae07605783d1c43e49b5767036474",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/4fbe46a3eb64abf8a57f0364075b91f4a233e062",
+ "reference": "4fbe46a3eb64abf8a57f0364075b91f4a233e062",
"shasum": ""
},
"require": {
@@ -4668,7 +4798,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v8.1.5"
+ "source": "https://github.com/symfony/finder/tree/v8.1.7"
},
"funding": [
{
@@ -4688,7 +4818,7 @@
"type": "tidelift"
}
],
- "time": "2026-08-21T12:16:08+00:00"
+ "time": "2026-09-10T19:14:39+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5105,98 +5235,18 @@
],
"time": "2026-07-01T12:47:55+00:00"
},
- {
- "name": "symfony/polyfill-php86",
- "version": "v1.41.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php86.git",
- "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e",
- "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php86\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php86/tree/v1.41.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-07-02T13:42:24+00:00"
- },
{
"name": "symfony/process",
- "version": "v8.1.5",
+ "version": "v8.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "d863f5e70d7c87abb906ac11b61f83036093000b"
+ "reference": "10823b09358e690df4ff943e24e8492bb1019fc3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/d863f5e70d7c87abb906ac11b61f83036093000b",
- "reference": "d863f5e70d7c87abb906ac11b61f83036093000b",
+ "url": "https://api.github.com/repos/symfony/process/zipball/10823b09358e690df4ff943e24e8492bb1019fc3",
+ "reference": "10823b09358e690df4ff943e24e8492bb1019fc3",
"shasum": ""
},
"require": {
@@ -5228,7 +5278,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v8.1.5"
+ "source": "https://github.com/symfony/process/tree/v8.1.7"
},
"funding": [
{
@@ -5248,20 +5298,20 @@
"type": "tidelift"
}
],
- "time": "2026-08-21T17:47:34+00:00"
+ "time": "2026-09-02T12:40:29+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.7.1",
+ "version": "v3.7.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0"
+ "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0",
- "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257",
+ "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257",
"shasum": ""
},
"require": {
@@ -5315,7 +5365,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.7.1"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.3"
},
"funding": [
{
@@ -5335,20 +5385,20 @@
"type": "tidelift"
}
],
- "time": "2026-06-16T09:55:08+00:00"
+ "time": "2026-07-27T15:39:01+00:00"
},
{
"name": "symfony/string",
- "version": "v8.1.2",
+ "version": "v8.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc"
+ "reference": "d950140b5f56f31901e5b7a0c04ffc3a3deb943c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc",
- "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc",
+ "url": "https://api.github.com/repos/symfony/string/zipball/d950140b5f56f31901e5b7a0c04ffc3a3deb943c",
+ "reference": "d950140b5f56f31901e5b7a0c04ffc3a3deb943c",
"shasum": ""
},
"require": {
@@ -5405,7 +5455,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v8.1.2"
+ "source": "https://github.com/symfony/string/tree/v8.1.7"
},
"funding": [
{
@@ -5425,7 +5475,7 @@
"type": "tidelift"
}
],
- "time": "2026-07-28T07:35:25+00:00"
+ "time": "2026-09-11T14:51:16+00:00"
},
{
"name": "ta-tikoma/phpunit-architecture-test",
@@ -5538,16 +5588,16 @@
},
{
"name": "tomasvotruba/type-coverage",
- "version": "2.3.4",
+ "version": "2.3.6",
"source": {
"type": "git",
"url": "https://github.com/TomasVotruba/type-coverage.git",
- "reference": "7b4aec57af15514dac9a3c5a9671da501444ecd0"
+ "reference": "bb2e1d115bfc38b2b29c98ea64762d70607a684f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/TomasVotruba/type-coverage/zipball/7b4aec57af15514dac9a3c5a9671da501444ecd0",
- "reference": "7b4aec57af15514dac9a3c5a9671da501444ecd0",
+ "url": "https://api.github.com/repos/TomasVotruba/type-coverage/zipball/bb2e1d115bfc38b2b29c98ea64762d70607a684f",
+ "reference": "bb2e1d115bfc38b2b29c98ea64762d70607a684f",
"shasum": ""
},
"require": {
@@ -5593,7 +5643,7 @@
],
"support": {
"issues": "https://github.com/TomasVotruba/type-coverage/issues",
- "source": "https://github.com/TomasVotruba/type-coverage/tree/2.3.4"
+ "source": "https://github.com/TomasVotruba/type-coverage/tree/2.3.6"
},
"funding": [
{
@@ -5605,7 +5655,7 @@
"type": "github"
}
],
- "time": "2026-08-18T07:48:32+00:00"
+ "time": "2026-08-29T08:21:40+00:00"
},
{
"name": "webmozart/assert",
@@ -5680,7 +5730,8 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": "^8.5"
+ "php": "^8.5",
+ "ext-mbstring": "*"
},
"platform-dev": {},
"plugin-api-version": "2.9.0"
diff --git a/phpcs.xml b/phpcs.xml
index 40932a2..b1e8570 100644
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -1,52 +1,52 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
- Standard optimisé: Analyse statique complémentaire à Pint.
+ Standard optimisé: Analyse statique complémentaire à Pint.
-
-
-
- src/
- tests/
+
+
+
+ src/
+ tests/
- */vendor/*
- */storage/*
- _ide_helper.php
+ */vendor/*
+ */storage/*
+ _ide_helper.php
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
- */database/migrations/*
-
+
+ */database/migrations/*
+
diff --git a/phpstan.neon b/phpstan.neon
index 212c932..5d69be4 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -1,3 +1,7 @@
+includes:
+ - vendor/pestphp/pest/extension.neon
+ - vendor/phpstan/phpstan-webmozart-assert/extension.neon
+
parameters:
paths:
- src/
diff --git a/phpunit.xml b/phpunit.xml
index 92296b3..e104864 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,11 +1,17 @@
-
+
-
- ./tests/Architecture
-
- ./tests/Unit
+ tests/Unit
+
+
+ tests/Integration
+
+
+ tests/Feature
+
+
+ tests/Architecture
diff --git a/pint.json b/pint.json
index 8141f39..ab2e981 100644
--- a/pint.json
+++ b/pint.json
@@ -1,7 +1,11 @@
{
- "version": "1.0.0",
+ "version": "1.0.1",
"preset": "psr12",
"rules": {
+ "no_superfluous_phpdoc_tags": {
+ "allow_mixed": true,
+ "remove_inheritdoc": false
+ },
"indentation_type": true,
"single_line_empty_body": false,
"types_spaces": {
diff --git a/rector.php b/rector.php
index f00d86d..3e8707f 100644
--- a/rector.php
+++ b/rector.php
@@ -12,10 +12,12 @@ return RectorConfig::configure()
])
->withPhpSets()
->withSets([
+ SetList::PHP_POLYFILLS,
SetList::CODE_QUALITY,
SetList::DEAD_CODE,
+ SetList::PRIVATIZATION,
SetList::TYPE_DECLARATION,
SetList::EARLY_RETURN,
- SetList::PRIVATIZATION,
SetList::INSTANCEOF,
+ SetList::IF,
]);
diff --git a/tests/Feature/.gitkeep b/tests/Feature/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/tests/Integration/.gitkeep b/tests/Integration/.gitkeep
new file mode 100644
index 0000000..e69de29