diff --git a/.gitattributes b/.gitattributes index 6d9972ff..9f9d53f0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,3 +8,4 @@ /test/ export-ignore /rector.php export-ignore /renovate.json export-ignore +/structarmed.php export-ignore diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index d11efbae..43135dcd 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -16,3 +16,22 @@ jobs: enable-infection: true min-msi: "80" min-covered-msi: "80" + + qa-structarmed: + name: "StructArmed (PHP 8.3)" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.3" + coverage: none + + - name: Install dependencies + run: composer install --no-interaction --no-progress + + - name: Check architecture + run: vendor/bin/structarmed analyse --no-progress diff --git a/composer.json b/composer.json index 92b214ea..d832bada 100644 --- a/composer.json +++ b/composer.json @@ -34,6 +34,7 @@ "laminas/laminas-stdlib": "^3.20.0" }, "require-dev": { + "boundwize/structarmed": "^0.18", "infection/infection": "^0.34.1", "laminas/laminas-eventmanager": "^3.14.0", "laminas/laminas-hydrator": "^4.6.0", @@ -55,8 +56,7 @@ "autoload-dev": { "psr-4": { "PhpDbTest\\": "test/unit/", - "PhpDbIntegrationTest\\": "test/integration/", - "PhpDbBenchmark\\": "test/benchmark/" + "PhpDbIntegrationTest\\": "test/integration/" } }, "scripts": { diff --git a/composer.lock b/composer.lock index 2fbf9dc1..14b132df 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": "6600948742b11dc28f0a4193e849e4d8", + "content-hash": "913599059ab3a5f195eb1120fc98e221", "packages": [ { "name": "brick/varexporter", @@ -201,16 +201,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": { @@ -252,9 +252,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": "psr/container", @@ -311,6 +311,153 @@ } ], "packages-dev": [ + { + "name": "boundwize/jsonrecast", + "version": "1.0.36", + "source": { + "type": "git", + "url": "https://github.com/boundwize/jsonrecast.git", + "reference": "c7cfac84d68ce0a89babfeb3aab234db80dce790" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/boundwize/jsonrecast/zipball/c7cfac84d68ce0a89babfeb3aab234db80dce790", + "reference": "c7cfac84d68ce0a89babfeb3aab234db80dce790", + "shasum": "" + }, + "require": { + "php": "^8.2" + }, + "require-dev": { + "boundwize/pyrameter": "^0.5", + "boundwize/structarmed": "^0.15", + "laminas/laminas-coding-standard": "^3.1", + "phpstan/phpstan": "^2.2", + "phpunit/phpunit": "^11.5", + "rector/rector": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Boundwize\\JsonRecast\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abdul Malik Ikhsan", + "email": "samsonasik@gmail.com", + "homepage": "http://samsonasik.wordpress.com", + "role": "Developer" + } + ], + "description": "Editable JSON AST with visitor traversal and formatting-preserving printing.", + "homepage": "https://github.com/boundwize/jsonrecast", + "keywords": [ + "ast", + "formatting", + "json", + "parser", + "refactoring" + ], + "support": { + "issues": "https://github.com/boundwize/jsonrecast/issues", + "source": "https://github.com/boundwize/jsonrecast/tree/1.0.36" + }, + "funding": [ + { + "url": "https://github.com/samsonasik", + "type": "github" + } + ], + "time": "2026-08-15T00:35:36+00:00" + }, + { + "name": "boundwize/structarmed", + "version": "0.18.11", + "source": { + "type": "git", + "url": "https://github.com/boundwize/structarmed.git", + "reference": "21d20e29234b4b106718639a12dc3dd343d2e05b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/boundwize/structarmed/zipball/21d20e29234b4b106718639a12dc3dd343d2e05b", + "reference": "21d20e29234b4b106718639a12dc3dd343d2e05b", + "shasum": "" + }, + "require": { + "boundwize/jsonrecast": "^1.0", + "composer-runtime-api": "^2.0", + "fidry/cpu-core-counter": "^1.3", + "nikic/php-parser": "^5.9", + "php": "^8.2" + }, + "require-dev": { + "boundwize/pyrameter": "^0.5", + "laminas/laminas-coding-standard": "^3.1", + "phpstan/phpstan": "^2.2", + "phpunit/phpunit": "^11.5", + "rector/rector": "dev-main" + }, + "bin": [ + "bin/structarmed" + ], + "type": "library", + "autoload": { + "psr-4": { + "Boundwize\\StructArmed\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abdul Malik Ikhsan", + "email": "samsonasik@gmail.com", + "homepage": "http://samsonasik.wordpress.com", + "role": "Developer" + } + ], + "description": "Configurable PHP architecture guards — define your layers and rules, then keep them enforced", + "homepage": "https://github.com/boundwize/structarmed", + "keywords": [ + "Enforcement", + "analysis", + "architecture", + "ddd", + "dev", + "layer", + "mvc", + "psr1", + "psr12", + "psr15", + "psr4", + "static analysis", + "yagni" + ], + "support": { + "issues": "https://github.com/boundwize/structarmed/issues", + "source": "https://github.com/boundwize/structarmed/tree/0.18.11" + }, + "funding": [ + { + "url": "https://github.com/samsonasik", + "type": "github" + } + ], + "time": "2026-10-04T10:04:54+00:00" + }, { "name": "colinodell/json5", "version": "v3.0.0", @@ -620,27 +767,25 @@ }, { "name": "doctrine/lexer", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/71d305eaa6480d3d3460c7d053d1da7749fa9cca", + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.5.58 || ^12.5.4" }, "type": "library", "autoload": { @@ -677,7 +822,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.3" }, "funding": [ { @@ -693,27 +838,27 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:56:58+00:00" + "time": "2026-10-01T06:59:29+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/d384a7d0d6e67aa497327260ca95023e92dc2032", + "reference": "d384a7d0d6e67aa497327260ca95023e92dc2032", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "fidry/makefile": "^0.2.0", + "fidry/makefile": "^0.2.0 || ^1.1.2", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^2.0", @@ -721,6 +866,7 @@ "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "symfony/polyfill-mbstring": "^1.33", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", @@ -746,7 +892,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.4.1" }, "funding": [ { @@ -754,29 +900,31 @@ "type": "github" } ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2026-09-29T22:11:39+00:00" }, { "name": "infection/abstract-testframework-adapter", - "version": "0.5.0", + "version": "0.5.1", "source": { "type": "git", "url": "https://github.com/infection/abstract-testframework-adapter.git", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" + "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/b24bf3e850f70cd20a10621f08c3cef66f147ac8", + "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.3" }, "require-dev": { - "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^2.17", - "phpunit/phpunit": "^9.5" + "ergebnis/composer-normalize": "^2.18", + "fidry/makefile": "^1.0", + "friendsofphp/php-cs-fixer": "^3.95.2", + "phpunit/phpunit": "^12.0 || ^13.0", + "rector/rector": "^2.4.5" }, "type": "library", "autoload": { @@ -797,7 +945,7 @@ "description": "Abstract Test Framework Adapter for Infection", "support": { "issues": "https://github.com/infection/abstract-testframework-adapter/issues", - "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" + "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.1" }, "funding": [ { @@ -809,7 +957,7 @@ "type": "open_collective" } ], - "time": "2021-08-17T18:49:12+00:00" + "time": "2026-05-28T19:10:29+00:00" }, { "name": "infection/extension-installer", @@ -879,21 +1027,21 @@ }, { "name": "infection/include-interceptor", - "version": "0.2.5", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/infection/include-interceptor.git", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" + "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", + "url": "https://api.github.com/repos/infection/include-interceptor/zipball/c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992", + "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992", "shasum": "" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", - "infection/infection": "^0.15.0", + "infection/infection": "^0.19.0", "phan/phan": "^2.4 || ^3", "php-coveralls/php-coveralls": "^2.2", "phpstan/phpstan": "^0.12.8", @@ -919,7 +1067,7 @@ "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", "support": { "issues": "https://github.com/infection/include-interceptor/issues", - "source": "https://github.com/infection/include-interceptor/tree/0.2.5" + "source": "https://github.com/infection/include-interceptor/tree/1.0.0" }, "funding": [ { @@ -931,7 +1079,7 @@ "type": "open_collective" } ], - "time": "2021-08-09T10:03:57+00:00" + "time": "2024-05-03T21:48:06+00:00" }, { "name": "infection/infection", @@ -1127,16 +1275,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.11.0", + "version": "6.13.1", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "7e420a943a6fbc95e60e3cf67acfbee85b3b4da7" + "reference": "e54aacc4c0657b3a4af4f628428d2702146828c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/7e420a943a6fbc95e60e3cf67acfbee85b3b4da7", - "reference": "7e420a943a6fbc95e60e3cf67acfbee85b3b4da7", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/e54aacc4c0657b3a4af4f628428d2702146828c6", + "reference": "e54aacc4c0657b3a4af4f628428d2702146828c6", "shasum": "" }, "require": { @@ -1186,9 +1334,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.11.0" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.13.1" }, - "time": "2026-08-21T10:30:42+00:00" + "time": "2026-09-30T07:42:28+00:00" }, { "name": "laminas/laminas-eventmanager", @@ -1863,11 +2011,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.2.9", + "version": "2.3.0", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/13d6b4f347bad222da436580c8304fa6f83e6bd0", - "reference": "13d6b4f347bad222da436580c8304fa6f83e6bd0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b1f9890d9af53a25c58129e78f0aadd31f90d7f4", + "reference": "b1f9890d9af53a25c58129e78f0aadd31f90d7f4", "shasum": "" }, "require": { @@ -1923,7 +2071,7 @@ "type": "github" } ], - "time": "2026-08-22T07:38:16+00:00" + "time": "2026-10-06T06:15:36+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2274,16 +2422,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.56", + "version": "11.5.57", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5f83edffa6967c3db468d48a695ec7bcb02e9256" + "reference": "36b75bf56a8535623f5b3e24b27ea1823759da1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5f83edffa6967c3db468d48a695ec7bcb02e9256", - "reference": "5f83edffa6967c3db468d48a695ec7bcb02e9256", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/36b75bf56a8535623f5b3e24b27ea1823759da1a", + "reference": "36b75bf56a8535623f5b3e24b27ea1823759da1a", "shasum": "" }, "require": { @@ -2293,7 +2441,7 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", + "myclabs/deep-copy": "^1.14.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", @@ -2356,7 +2504,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.56" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.57" }, "funding": [ { @@ -2364,7 +2512,7 @@ "type": "other" } ], - "time": "2026-07-06T14:52:39+00:00" + "time": "2026-10-05T05:47:54+00:00" }, { "name": "psr/cache", @@ -2515,21 +2663,21 @@ }, { "name": "rector/rector", - "version": "2.6.3", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "7e46709996a4b3dc59e1d6ecbb6a38ace335bd58" + "reference": "4d6a39b7fff302cac0ce90cd959a53c2f6a32776" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/7e46709996a4b3dc59e1d6ecbb6a38ace335bd58", - "reference": "7e46709996a4b3dc59e1d6ecbb6a38ace335bd58", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/4d6a39b7fff302cac0ce90cd959a53c2f6a32776", + "reference": "4d6a39b7fff302cac0ce90cd959a53c2f6a32776", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.2.6" + "phpstan/phpstan": "^2.3.0" }, "conflict": { "rector/rector-doctrine": "*", @@ -2537,9 +2685,6 @@ "rector/rector-phpunit": "*", "rector/rector-symfony": "*" }, - "suggest": { - "ext-dom": "To manipulate phpunit.xml via the custom-rule command" - }, "bin": [ "bin/rector" ], @@ -2563,7 +2708,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.6.3" + "source": "https://github.com/rectorphp/rector/tree/2.7.0" }, "funding": [ { @@ -2571,7 +2716,7 @@ "type": "github" } ], - "time": "2026-08-18T22:01:18+00:00" + "time": "2026-10-06T08:46:45+00:00" }, { "name": "sanmai/di-container", @@ -2781,16 +2926,16 @@ }, { "name": "sanmai/pipeline", - "version": "7.10", + "version": "7.12", "source": { "type": "git", "url": "https://github.com/sanmai/pipeline.git", - "reference": "a8e4e57a6031efc7a92defd13fed9c1c4c73fc71" + "reference": "e7c1f115790ae68ea22f30a646578c587a691399" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a8e4e57a6031efc7a92defd13fed9c1c4c73fc71", - "reference": "a8e4e57a6031efc7a92defd13fed9c1c4c73fc71", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/e7c1f115790ae68ea22f30a646578c587a691399", + "reference": "e7c1f115790ae68ea22f30a646578c587a691399", "shasum": "" }, "require": { @@ -2807,7 +2952,6 @@ "phpstan/phpstan": "^2", "phpunit/phpunit": "^11 || ^12", "sanmai/phpstan-rules": "^0.3.11", - "sanmai/phpunit-double-colon-syntax": "^0.1.1", "vimeo/psalm": ">=2" }, "type": "library", @@ -2837,7 +2981,7 @@ "description": "General-purpose collections pipeline", "support": { "issues": "https://github.com/sanmai/pipeline/issues", - "source": "https://github.com/sanmai/pipeline/tree/7.10" + "source": "https://github.com/sanmai/pipeline/tree/7.12" }, "funding": [ { @@ -2845,7 +2989,7 @@ "type": "github" } ], - "time": "2026-08-03T04:56:22+00:00" + "time": "2026-09-30T13:46:33+00:00" }, { "name": "sebastian/cli-parser", @@ -3951,16 +4095,16 @@ }, { "name": "symfony/console", - "version": "v7.4.17", + "version": "v7.4.20", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "962e18f09ebe68a49039b4c82fc0ea4871824fca" + "reference": "d7bca2fe05241dc7732d0c8b6d551b879f5d0a7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/962e18f09ebe68a49039b4c82fc0ea4871824fca", - "reference": "962e18f09ebe68a49039b4c82fc0ea4871824fca", + "url": "https://api.github.com/repos/symfony/console/zipball/d7bca2fe05241dc7732d0c8b6d551b879f5d0a7d", + "reference": "d7bca2fe05241dc7732d0c8b6d551b879f5d0a7d", "shasum": "" }, "require": { @@ -4025,7 +4169,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.17" + "source": "https://github.com/symfony/console/tree/v7.4.20" }, "funding": [ { @@ -4045,7 +4189,7 @@ "type": "tidelift" } ], - "time": "2026-08-21T12:09:28+00:00" + "time": "2026-09-18T15:55:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4120,16 +4264,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.17", + "version": "v7.4.18", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "ee7bc7bca4c7079b88e57d5000aeeb20df570c8d" + "reference": "90d412aa5277c6819db39e7605aa46b1019e3232" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ee7bc7bca4c7079b88e57d5000aeeb20df570c8d", - "reference": "ee7bc7bca4c7079b88e57d5000aeeb20df570c8d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/90d412aa5277c6819db39e7605aa46b1019e3232", + "reference": "90d412aa5277c6819db39e7605aa46b1019e3232", "shasum": "" }, "require": { @@ -4166,7 +4310,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.17" + "source": "https://github.com/symfony/filesystem/tree/v7.4.18" }, "funding": [ { @@ -4186,20 +4330,20 @@ "type": "tidelift" } ], - "time": "2026-08-21T12:09:28+00:00" + "time": "2026-08-23T10:03:40+00:00" }, { "name": "symfony/finder", - "version": "v7.4.17", + "version": "v7.4.20", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5ce28827081f6d1f0c32eaf3882750f19cb5bbe6" + "reference": "2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5ce28827081f6d1f0c32eaf3882750f19cb5bbe6", - "reference": "5ce28827081f6d1f0c32eaf3882750f19cb5bbe6", + "url": "https://api.github.com/repos/symfony/finder/zipball/2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e", + "reference": "2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e", "shasum": "" }, "require": { @@ -4234,7 +4378,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.17" + "source": "https://github.com/symfony/finder/tree/v7.4.20" }, "funding": [ { @@ -4254,7 +4398,7 @@ "type": "tidelift" } ], - "time": "2026-08-21T12:09:28+00:00" + "time": "2026-09-26T06:31:10+00:00" }, { "name": "symfony/options-resolver", @@ -4412,16 +4556,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.41.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", - "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", "shasum": "" }, "require": { @@ -4470,7 +4614,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.0" }, "funding": [ { @@ -4490,20 +4634,20 @@ "type": "tidelift" } ], - "time": "2026-07-28T08:25:59+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.38.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", "shasum": "" }, "require": { @@ -4555,7 +4699,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.43.0" }, "funding": [ { @@ -4575,20 +4719,20 @@ "type": "tidelift" } ], - "time": "2026-05-25T13:48:31+00:00" + "time": "2026-09-23T22:02:09+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", "shasum": "" }, "require": { @@ -4640,7 +4784,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" }, "funding": [ { @@ -4660,20 +4804,20 @@ "type": "tidelift" } ], - "time": "2026-05-27T06:59:30+00:00" + "time": "2026-09-24T15:19:04+00:00" }, { "name": "symfony/polyfill-php85", - "version": "v1.41.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", - "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", "shasum": "" }, "require": { @@ -4720,7 +4864,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0" }, "funding": [ { @@ -4740,20 +4884,20 @@ "type": "tidelift" } ], - "time": "2026-07-01T12:47:55+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { "name": "symfony/process", - "version": "v7.4.17", + "version": "v7.4.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "058d17fc284cce14efb2385783b55014a461b176" + "reference": "ed0ae095b86994d370d5791612e55984f15aa30e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/058d17fc284cce14efb2385783b55014a461b176", - "reference": "058d17fc284cce14efb2385783b55014a461b176", + "url": "https://api.github.com/repos/symfony/process/zipball/ed0ae095b86994d370d5791612e55984f15aa30e", + "reference": "ed0ae095b86994d370d5791612e55984f15aa30e", "shasum": "" }, "require": { @@ -4785,7 +4929,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.17" + "source": "https://github.com/symfony/process/tree/v7.4.19" }, "funding": [ { @@ -4805,20 +4949,20 @@ "type": "tidelift" } ], - "time": "2026-08-21T17:40:08+00:00" + "time": "2026-09-02T12:38:34+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": { @@ -4872,7 +5016,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": [ { @@ -4892,20 +5036,20 @@ "type": "tidelift" } ], - "time": "2026-06-16T09:55:08+00:00" + "time": "2026-07-27T15:39:01+00:00" }, { "name": "symfony/string", - "version": "v7.4.15", + "version": "v7.4.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "e394af32256bf9e7bf80849d95e589167c10097b" + "reference": "02731ce2bd26514bec9efc0baef2cd0b0cf67f46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/e394af32256bf9e7bf80849d95e589167c10097b", - "reference": "e394af32256bf9e7bf80849d95e589167c10097b", + "url": "https://api.github.com/repos/symfony/string/zipball/02731ce2bd26514bec9efc0baef2cd0b0cf67f46", + "reference": "02731ce2bd26514bec9efc0baef2cd0b0cf67f46", "shasum": "" }, "require": { @@ -4963,7 +5107,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.15" + "source": "https://github.com/symfony/string/tree/v7.4.19" }, "funding": [ { @@ -4983,7 +5127,7 @@ "type": "tidelift" } ], - "time": "2026-07-28T07:33:02+00:00" + "time": "2026-09-11T14:46:58+00:00" }, { "name": "thecodingmachine/safe", @@ -5180,16 +5324,16 @@ }, { "name": "webmozart/assert", - "version": "2.4.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/8a163706bbcac613733dba03f51e13b5eb1bb819", + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819", "shasum": "" }, "require": { @@ -5240,9 +5384,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.4.1" + "source": "https://github.com/webmozarts/assert/tree/2.5.0" }, - "time": "2026-06-15T15:31:57+00:00" + "time": "2026-10-05T23:14:19+00:00" }, { "name": "webmozart/glob", diff --git a/structarmed.php b/structarmed.php new file mode 100644 index 00000000..6ec59a99 --- /dev/null +++ b/structarmed.php @@ -0,0 +1,107 @@ +withPresets(Preset::PSR4(), Preset::CODEQUALITY()) + ->layer('Exception', 'src/Exception') + ->layer('Feature', 'src/Feature') + ->layer('ConfigProvider', 'src/ConfigProvider.php') + ->layer('Container', 'src/Container') + ->layer('AdapterException', 'src/Adapter/Exception') + ->layer('AdapterPlatform', 'src/Adapter/Platform') + ->layer('AdapterProfiler', 'src/Adapter/Profiler') + ->layer('AdapterDriverFeature', 'src/Adapter/Driver/Feature') + ->layer('AdapterDriverPdo', 'src/Adapter/Driver/Pdo') + ->layer('AdapterDriver', 'src/Adapter/Driver', [ + 'src/Adapter/Driver/Feature', + 'src/Adapter/Driver/Pdo', + ]) + ->layer('Adapter', 'src/Adapter', [ + 'src/Adapter/Driver', + 'src/Adapter/Exception', + 'src/Adapter/Platform', + 'src/Adapter/Profiler', + ]) + ->layer('MetadataException', 'src/Metadata/Exception') + ->layer('MetadataObject', 'src/Metadata/Object') + ->layer('MetadataSource', 'src/Metadata/Source') + ->layer('Metadata', 'src/Metadata', [ + 'src/Metadata/Exception', + 'src/Metadata/Object', + 'src/Metadata/Source', + ]) + ->layer('ResultSetException', 'src/ResultSet/Exception') + ->layer('ResultSet', 'src/ResultSet', 'src/ResultSet/Exception') + ->layer('RowGatewayException', 'src/RowGateway/Exception') + ->layer('RowGatewayFeature', 'src/RowGateway/Feature') + ->layer('RowGateway', 'src/RowGateway', [ + 'src/RowGateway/Exception', + 'src/RowGateway/Feature', + ]) + ->layer('SqlException', 'src/Sql/Exception') + ->layer('SqlArgument', 'src/Sql/Argument') + ->layer('SqlPlatform', 'src/Sql/Platform') + ->layer('SqlPredicateException', 'src/Sql/Predicate/Exception') + ->layer('SqlPredicate', 'src/Sql/Predicate', 'src/Sql/Predicate/Exception') + ->layer('SqlDdlConstraint', 'src/Sql/Ddl/Constraint') + ->layer('SqlDdlColumn', 'src/Sql/Ddl/Column') + ->layer('SqlDdlIndex', 'src/Sql/Ddl/Index') + ->layer('SqlDdl', 'src/Sql/Ddl', [ + 'src/Sql/Ddl/Column', + 'src/Sql/Ddl/Constraint', + 'src/Sql/Ddl/Index', + ]) + ->layer('Sql', 'src/Sql', [ + 'src/Sql/Argument', + 'src/Sql/Ddl', + 'src/Sql/Exception', + 'src/Sql/Platform', + 'src/Sql/Predicate', + ]) + ->layer('TableGatewayException', 'src/TableGateway/Exception') + ->layer('TableGatewayEventFeature', 'src/TableGateway/Feature/EventFeature') + ->layer('TableGatewayFeature', 'src/TableGateway/Feature', 'src/TableGateway/Feature/EventFeature') + ->layer('TableGateway', 'src/TableGateway', [ + 'src/TableGateway/Exception', + 'src/TableGateway/Feature', + ]) + ->ruleset([ + 'Exception' => [], + 'Feature' => [], + 'ConfigProvider' => ['Adapter', 'Container', 'Sql'], + 'Container' => ['+SqlException', 'Adapter', 'AdapterDriver', 'AdapterPlatform', 'AdapterProfiler', 'ConfigProvider', 'ResultSet', 'Sql'], + 'AdapterException' => ['Exception'], + 'AdapterPlatform' => ['+AdapterException', 'SqlPlatform'], + 'AdapterProfiler' => ['+AdapterException', 'Adapter'], + 'AdapterDriverFeature' => ['+AdapterException', 'AdapterDriver'], + 'AdapterDriverPdo' => ['+AdapterDriver'], + 'AdapterDriver' => ['+AdapterProfiler', 'ResultSet'], + 'Adapter' => ['+AdapterDriver', 'AdapterPlatform'], + 'MetadataException' => ['Exception'], + 'MetadataObject' => [], + 'MetadataSource' => ['+Metadata', '+MetadataException', 'Adapter'], + 'Metadata' => ['MetadataObject'], + 'ResultSetException' => ['Exception'], + 'ResultSet' => ['+ResultSetException', 'AdapterDriver'], + 'RowGatewayException' => ['Exception'], + 'RowGatewayFeature' => ['+RowGateway', 'Feature'], + 'RowGateway' => ['+RowGatewayException', 'Adapter', 'ResultSet', 'RowGatewayFeature', 'Sql'], + 'SqlException' => ['Exception'], + 'SqlArgument' => ['Sql'], + 'SqlPlatform' => ['+SqlException', 'Adapter', 'AdapterPlatform', 'Sql'], + 'SqlPredicateException' => ['+SqlException'], + 'SqlPredicate' => ['+SqlArgument', '+SqlPredicateException'], + 'SqlDdlConstraint' => ['+SqlArgument', '+SqlException'], + 'SqlDdlColumn' => ['+SqlDdlConstraint'], + 'SqlDdlIndex' => ['+SqlDdlConstraint'], + 'SqlDdl' => ['+SqlDdlColumn', '+SqlPlatform', 'AdapterDriver'], + 'Sql' => ['+SqlPredicate', '+SqlPlatform', 'AdapterDriver'], + 'TableGatewayException' => ['Exception'], + 'TableGatewayEventFeature' => ['TableGateway'], + 'TableGatewayFeature' => ['+TableGateway', '+TableGatewayEventFeature', '+Metadata', 'AdapterDriver', 'Feature', 'RowGateway'], + 'TableGateway' => ['+TableGatewayException', 'Adapter', 'ResultSet', 'Sql', 'TableGatewayFeature'], + ]);