From 3a405f06af84791ef767c6421ab60ceb405af7f3 Mon Sep 17 00:00:00 2001 From: Alessandro Chitolina Date: Sun, 11 Feb 2024 14:10:59 +0100 Subject: [PATCH] feat!: add pathCallback filter to all finders --- .github/workflows/cscheck.yml | 2 +- .github/workflows/phpstan.yml | 2 +- .github/workflows/test.yml | 9 +- README.md | 7 +- composer.json | 4 +- composer.lock | 1077 ++++++++++------- lib/Finder/ComposerFinder.php | 15 +- lib/Finder/FinderInterface.php | 8 + lib/Finder/FinderTrait.php | 26 +- lib/Finder/PhpDocumentorFilterTrait.php | 6 +- lib/Finder/PhpDocumentorFinder.php | 3 +- lib/Finder/Psr0Finder.php | 7 +- lib/Finder/Psr4Finder.php | 9 +- lib/Finder/RecursiveFinder.php | 15 +- lib/Finder/ReflectionFilterTrait.php | 6 +- lib/Iterator/ClassIterator.php | 12 +- lib/Iterator/ComposerIterator.php | 25 +- lib/Iterator/FilteredComposerIterator.php | 25 +- lib/Iterator/PhpDocumentorIterator.php | 9 +- lib/Iterator/Psr0Iterator.php | 11 +- lib/Iterator/Psr4Iterator.php | 13 +- lib/Iterator/RecursiveIterator.php | 12 +- tests/Finder/ComposerFinderTest.php | 17 + tests/Finder/PhpDocumentorFinderTest.php | 18 + tests/Finder/Psr0FinderTest.php | 11 + tests/Finder/Psr4FinderTest.php | 14 + tests/Finder/RecursiveFinderTest.php | 4 +- tests/Iterator/ComposerIteratorTest.php | 22 + .../Iterator/FilteredComposerIteratorTest.php | 19 + tests/Iterator/PhpDocumentorIteratorTest.php | 23 + tests/Iterator/Psr0IteratorTest.php | 17 + tests/Iterator/Psr4IteratorTest.php | 22 +- tests/Iterator/RecursiveIteratorTest.php | 4 +- 33 files changed, 981 insertions(+), 493 deletions(-) diff --git a/.github/workflows/cscheck.yml b/.github/workflows/cscheck.yml index 3d0d709..413c727 100644 --- a/.github/workflows/cscheck.yml +++ b/.github/workflows/cscheck.yml @@ -19,7 +19,7 @@ jobs: uses: shivammathur/setup-php@v2 with: coverage: none - php-version: "8.0" + php-version: "8.1" tools: cs2pr - name: Install Composer dependencies diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index cce963a..24bc348 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -17,7 +17,7 @@ jobs: uses: shivammathur/setup-php@v2 with: coverage: none - php-version: "8.1" + php-version: "8.3" tools: cs2pr - name: Install Composer dependencies diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c74895d..1748d99 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,8 +18,9 @@ jobs: - windows-latest php_version: - - '8.0' - '8.1' + - '8.2' + - '8.3' composer_flags: - '' @@ -41,14 +42,14 @@ jobs: custom-cache-suffix: $(date -u "+%Y-%m") - run: vendor/bin/phpunit - if: ${{ matrix.php_version != '8.0' }} + if: ${{ matrix.php_version != '8.2' }} - run: vendor/bin/phpunit --coverage-clover coverage.xml - if: ${{ matrix.php_version == '8.0' }} + if: ${{ matrix.php_version == '8.2' }} env: XDEBUG_MODE: coverage - name: Upload coverage to Codecov - if: ${{ matrix.php_version == '8.0' }} + if: ${{ matrix.php_version == '8.2' }} uses: codecov/codecov-action@v3 with: file: ./coverage.xml diff --git a/README.md b/README.md index d78a6c7..b8dd774 100644 --- a/README.md +++ b/README.md @@ -49,12 +49,7 @@ You can filter classes using the methods exposed by `FinderInterface`: - `in(array $dirs)`: Searches only in given directories. - `inNamespace(array $namespaces)`: Searches only in given namespaces. - `filter(callable $callback)`: Custom filtering callback. - -#### Specific finder filters - -##### RecursiveFinder - -- `fileFilter(callable $callback)`: Custom filtering callback for loading files. +- `pathFilter(callable $callback)`: Custom filtering callback for loading files. ## License diff --git a/composer.json b/composer.json index 2a1b7ee..52ca41a 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ }, "minimum-stability": "stable", "require": { - "php": "^8.0", + "php": "^8.1", "thecodingmachine/safe": "^1.0 || ^2.0" }, "require-dev": { @@ -25,7 +25,7 @@ "phpunit/phpunit": "^9.5", "roave/security-advisories": "dev-master", "solido/php-coding-standards": "dev-master", - "symfony/error-handler": "^5.0 || ^6.0" + "symfony/error-handler": "^5.0 || ^6.0 || ^7.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index ba0cc78..8985cd9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d809e9452e29f79dd1150d226a0a4820", + "content-hash": "75c3c3d83504747c9d9c1a53e58b80a7", "packages": [ { "name": "thecodingmachine/safe", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", - "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3" + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/e788f3d09dcd36f806350aedb77eac348fafadd3", - "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", "shasum": "" }, "require": { @@ -141,9 +141,9 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.4.0" + "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" }, - "time": "2022-10-07T14:02:17+00:00" + "time": "2023-04-05T11:54:14+00:00" } ], "packages-dev": [ @@ -303,22 +303,22 @@ }, { "name": "doctrine/coding-standard", - "version": "11.1.0", + "version": "12.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/coding-standard.git", - "reference": "4bcfa9d922e13cb3b8078d4752e3ba276f959c88" + "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/4bcfa9d922e13cb3b8078d4752e3ba276f959c88", - "reference": "4bcfa9d922e13cb3b8078d4752e3ba276f959c88", + "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/1b2b7dc58c68833af481fb9325c25abd40681c79", + "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0.0", "php": "^7.2 || ^8.0", - "slevomat/coding-standard": "^8.6.2", + "slevomat/coding-standard": "^8.11", "squizlabs/php_codesniffer": "^3.7" }, "type": "phpcodesniffer-standard", @@ -353,31 +353,35 @@ ], "support": { "issues": "https://github.com/doctrine/coding-standard/issues", - "source": "https://github.com/doctrine/coding-standard/tree/11.1.0" + "source": "https://github.com/doctrine/coding-standard/tree/12.0.0" }, - "time": "2023-01-06T09:12:24+00:00" + "time": "2023-04-24T17:43:28+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -396,36 +400,36 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -452,7 +456,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -468,20 +472,20 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "shasum": "" }, "require": { @@ -489,11 +493,11 @@ "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", + "doctrine/coding-standard": "^9 || ^12", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^4.11 || ^5.21" }, "type": "library", "autoload": { @@ -530,7 +534,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/2.1.1" }, "funding": [ { @@ -546,7 +550,7 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2024-02-05T11:35:39+00:00" }, { "name": "myclabs/deep-copy", @@ -609,16 +613,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.4", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", "shasum": "" }, "require": { @@ -659,9 +663,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" }, - "time": "2023-03-05T19:49:14+00:00" + "time": "2023-12-10T21:03:43+00:00" }, { "name": "phar-io/manifest", @@ -776,36 +780,37 @@ }, { "name": "phpdocumentor/reflection", - "version": "5.3.1", + "version": "5.3.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "41cb981a699f757dc5bd75d99b277ffa1097e4aa" + "reference": "99926d699634bb16acd5bbf21b4b3b543690304a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/41cb981a699f757dc5bd75d99b277ffa1097e4aa", - "reference": "41cb981a699f757dc5bd75d99b277ffa1097e4aa", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/99926d699634bb16acd5bbf21b4b3b543690304a", + "reference": "99926d699634bb16acd5bbf21b4b3b543690304a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.13", - "php": "^7.4|8.0.*|8.1.*", + "nikic/php-parser": "~4.14", + "php": "^7.4|8.0.*|8.1.*|8.2.*|8.3.*", "phpdocumentor/reflection-common": "^2.1", "phpdocumentor/reflection-docblock": "^5", "phpdocumentor/type-resolver": "^1.2", + "symfony/polyfill-php80": "^1.28", "webmozart/assert": "^1.7" }, "require-dev": { "mikey179/vfsstream": "~1.2", - "mockery/mockery": "~1.5.0", + "mockery/mockery": "~1.6.0", "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-php-parser": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "rector/rector": "^0.15.0", + "rector/rector": "^0.18.0", "vimeo/psalm": "^5.0" }, "type": "library", @@ -833,9 +838,9 @@ ], "support": { "issues": "https://github.com/phpDocumentor/Reflection/issues", - "source": "https://github.com/phpDocumentor/Reflection/tree/5.3.1" + "source": "https://github.com/phpDocumentor/Reflection/tree/5.3.3" }, - "time": "2022-12-07T20:59:44+00:00" + "time": "2023-10-09T18:24:07+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -949,16 +954,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "1534aea9bde19a5c85c5d1e1f834ab63f4c5dcf5" + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1534aea9bde19a5c85c5d1e1f834ab63f4c5dcf5", - "reference": "1534aea9bde19a5c85c5d1e1f834ab63f4c5dcf5", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc", + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc", "shasum": "" }, "require": { @@ -1001,28 +1006,28 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0" }, - "time": "2023-03-12T10:13:29+00:00" + "time": "2024-01-11T11:49:22+00:00" }, { "name": "phpstan/extension-installer", - "version": "1.2.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/phpstan/extension-installer.git", - "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", - "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a", "shasum": "" }, "require": { "composer-plugin-api": "^2.0", "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.8.0" + "phpstan/phpstan": "^1.9.0" }, "require-dev": { "composer/composer": "^2.0", @@ -1045,28 +1050,30 @@ "description": "Composer plugin for automatic installation of PHPStan extensions", "support": { "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.2.0" + "source": "https://github.com/phpstan/extension-installer/tree/1.3.1" }, - "time": "2022-10-17T12:59:16+00:00" + "time": "2023-05-24T08:59:17+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.16.1", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e27e92d939e2e3636f0a1f0afaba59692c0bf571", - "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", @@ -1090,22 +1097,22 @@ "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/1.16.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" }, - "time": "2023-02-07T18:11:17+00:00" + "time": "2024-01-04T17:06:16+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.8", + "version": "1.10.57", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "0166aef76e066f0dd2adc2799bdadfa1635711e9" + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0166aef76e066f0dd2adc2799bdadfa1635711e9", - "reference": "0166aef76e066f0dd2adc2799bdadfa1635711e9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", "shasum": "" }, "require": { @@ -1154,27 +1161,27 @@ "type": "tidelift" } ], - "time": "2023-03-24T10:28:16+00:00" + "time": "2024-01-24T11:51:34+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.26", + "version": "9.2.30", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1223,7 +1230,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30" }, "funding": [ { @@ -1231,7 +1239,7 @@ "type": "github" } ], - "time": "2023-03-06T12:58:08+00:00" + "time": "2023-12-22T06:47:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1476,16 +1484,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.5", + "version": "9.6.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5" + "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86e761949019ae83f49240b2f2123fb5ab3b2fc5", - "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3767b2c56ce02d01e3491046f33466a1ae60a37f", + "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f", "shasum": "" }, "require": { @@ -1500,7 +1508,7 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -1558,7 +1566,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.5" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.16" }, "funding": [ { @@ -1574,7 +1583,7 @@ "type": "tidelift" } ], - "time": "2023-03-09T06:34:10+00:00" + "time": "2024-01-19T07:03:14+00:00" }, { "name": "psr/cache", @@ -1681,19 +1690,21 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "08c832d96735c46a9d5849a5412fc4304e12d242" + "reference": "feb85d42c6880b348e404115e011ae2201f49bba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/08c832d96735c46a9d5849a5412fc4304e12d242", - "reference": "08c832d96735c46a9d5849a5412fc4304e12d242", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/feb85d42c6880b348e404115e011ae2201f49bba", + "reference": "feb85d42c6880b348e404115e011ae2201f49bba", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.1.9", + "admidio/admidio": "<4.2.13", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", - "aheinze/cockpit": "<=2.2.1", + "aheinze/cockpit": "<2.2", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5", @@ -1704,30 +1715,41 @@ "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", "apereo/phpcas": "<1.6", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", - "appwrite/server-ce": "<0.11.1|>=0.12,<0.12.2", + "appwrite/server-ce": "<=1.2.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", - "automad/automad": "<1.8", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "automad/automad": "<=1.10.9", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": ">=3,<3.2.1", - "backdrop/backdrop": "<=1.23", + "aws/aws-sdk-php": "<3.288.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.24.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", + "bagisto/bagisto": "<1.3.2", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.7.5", + "baserproject/basercms": "<4.8", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", - "billz/raspap-webgui": "<=2.6.6", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<2.9.5", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.13", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", @@ -1736,84 +1758,100 @@ "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|= 1.3.7|>=4.1,<4.1.4", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "centreon/centreon": "<22.10-beta.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.0.0-beta1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "cockpit-hq/cockpit": "<2.4.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.17", + "cockpit-hq/cockpit": "<=2.6.3", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.2.11", - "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<=4.4.2", + "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", - "concrete5/concrete5": "<=9.1.3|>= 9.0.0RC1, < 9.1.3", + "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7", + "concrete5/concrete5": "<9.2.5", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3", + "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3|= 4.10.0", + "contao/core-bundle": ">=3,<3.5.35|>=4,<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10", "contao/listing-bundle": ">=4,<4.4.8", "contao/managed-edition": "<=1.5", - "craftcms/cms": "<3.7.64|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", - "croogo/croogo": "<3.0.7", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2", + "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", - "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", + "desperado/xml-bundle": "<=0.1.7", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<16|>=16.0.1,<16.0.3|= 12.0.5|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": "<2.0.2|= 2.0.2", - "drupal/core": ">=7,<7.91|>=8,<9.3.19|>=9.4,<9.4.3", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "dolibarr/dolibarr": "<18.0.2", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": "<9.5.11|>=10,<10.0.11|>=10.1,<10.1.4", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", - "elefant/cms": "<1.3.13", + "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", "exceedone/exment": "<4.4.3|>=5,<5.0.3", - "exceedone/laravel-admin": "= 3.0.0|<2.2.3", - "ezsystems/demobundle": ">=5.4,<5.4.6.1", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-graphql": ">=1-rc.1,<1.0.13|>=2-beta.1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1|>=1.3,<1.3.26", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.34", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<=2.3.7", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2|>=7,<7.5.30", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1|>=2.5,<2.5.15", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.8", + "facturascripts/facturascripts": "<=2022.08", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", @@ -1821,243 +1859,317 @@ "firebase/php-jwt": "<6", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.7", + "flarum/core": "<1.8.5", + "flarum/framework": "<1.8.5", "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3-beta.2,<1.1.7", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<10.8.2", + "francoisjacquet/rosariosis": "<11", "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<2.0.13", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", + "froxlor/froxlor": "<=2.1.1", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.34", - "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1", + "getgrav/grav": "<=1.7.42.1", + "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", + "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.11.4", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.2|==2", "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<5.8", + "grumpydictator/firefly-iii": "<6.1.7", + "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", - "guzzlehttp/psr7": "<1.8.4|>=2,<2.1.1", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "= 2.31|<=2.31", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", "hillelcoren/invoice-ninja": "<5.3.35", "himiklab/yii2-jqgrid-widget": "<1.0.8", "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.4", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", + "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", + "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.3", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", "innologi/typo3-appointments": "<2.0.6", - "intelliants/subrion": "<=4.2.1", + "intelliants/subrion": "<4.2.2", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.4|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "kimai/kimai": "<1.1", - "kitodo/presentation": "<3.1.2", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<2.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<=1.4.1", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", "krayin/laravel-crm": "<1.2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-diactoros": "<2.11.1", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "latte/latte": "<2.10.8", - "lavalite/cms": "<=5.8", + "lavalite/cms": "<=9", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.10", + "librenms/librenms": "<2017.08.18", "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3,<3.0.4", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", - "magento/magento1ce": "<1.9.4.3", - "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", + "magento/community-edition": "<2.4.3.0-patch3|>=2.4.4,<2.4.5", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", + "magneto/core": "<1.9.4.4-dev", "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.5", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<=2.25.7", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3|= 2.13.1", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mautic/core": "<4.3", + "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", "melisplatform/melis-asset-manager": "<5.0.1", "melisplatform/melis-cms": "<5.0.1", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<=1.3.2", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.4", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<= 2.8.3-pl|<2.8", + "modx/revolution": "<=2.8.3.0-patch", "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.0.7|>=4.1-beta,<4.1.2|= 3.11", + "moodle/moodle": "<4.3.0.0-RC2-dev", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munkireport": ">=2.5.3,<5.6.3", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.4", + "neorazorx/facturascripts": "<2022.04", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.0.23", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.5.2", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", - "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.2", + "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7", + "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.22|>=20,<20.0.19", - "orchid/platform": ">=9,<9.4.4", - "oro/commerce": ">=4.1,<5.0.6", + "openmage/magento-lts": "<20.2", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.2,<=4.2.8|>=5,<5.0.11|>=5.1,<5.1.1", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<5.0.8", + "oxid-esales/oxideshop-ce": "<4.5", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", + "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", "paragonie/random_compat": "<2", "passbolt/passbolt_api": "<2.11", "paypal/merchant-sdk-php": "<3.12", "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.1", "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpmyfaq/phpmyfaq": "<3.2.5", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", - "phpservermon/phpservermon": "<=3.5.2", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", + "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.34", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.3.3", + "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", - "pimcore/pimcore": "<11", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<11.1.1", "pixelfed/pixelfed": "<=0.11.4", + "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<4.12.5|>= 4.0.0-BETA5, < 4.4.2", + "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.0.1", + "prestashop/prestashop": "<8.1.3", "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", - "propel/propel": ">=2-alpha.1,<=2-alpha.7", + "processwire/processwire": "<=3.0.210", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", + "pwweb/laravel-core": "<=0.3.6.0-beta", "pyrocms/pyrocms": "<=3.9.1", + "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", "rankmath/seo-by-rank-math": "<=1.0.95", - "react/http": ">=0.7,<1.7", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", "remdex/livehelperchat": "<3.99", + "reportico-web/reportico": "<=7.1.21", + "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", + "robrichards/xmlseclibs": ">=1,<3.0.4", "roots/soil": "<4.1", "rudloff/alltube": "<3.0.3", "s-cart/core": "<6.9", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.18", - "shopware/platform": "<=6.4.18", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.5.7.3", + "shopware/platform": "<=6.5.7.3", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.14", + "shopware/shopware": "<=5.7.17", "shopware/storefront": "<=6.4.8.1", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", - "silverstripe/admin": ">=1,<1.11.3", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.11.14", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3|= 4.0.0-alpha1", + "silverstripe/framework": "<4.13.39|>=5,<5.1.11", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", @@ -2066,37 +2178,44 @@ "silverstripe/userforms": "<3", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.47|>=4,<4.2.1", - "snipe/snipe-it": "<=6.0.14|>= 6.0.0-RC-1, <= 6.0.0-RC-5", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<3.1.48|>=4,<4.3.1", + "snipe/snipe-it": "<=6.2.2", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", - "spipu/html2pdf": "<5.2.4", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.2.3", - "statamic/cms": "<3.2.39|>=3.3,<3.3.2", - "stormpath/sdk": ">=0,<9.9.99", - "studio-42/elfinder": "<2.1.59", - "subrion/cms": "<=4.2.1", + "ssddanbrown/bookstack": "<22.02.3", + "statamic/cms": "<4.46", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<2.1.62", + "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", - "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", + "sulu/sulu": "<1.6.44|>=2,<2.4.16|>=2.5,<2.5.12", "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", + "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", @@ -2107,7 +2226,7 @@ "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -2123,78 +2242,100 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": ">=2.2,<2.6.2", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", "tecnickcom/tcpdf": "<6.2.22", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1-beta.1,<2.1.3", + "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.1.11", - "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "tinymce/tinymce": "<5.10.9|>=6,<6.7.3", "tinymighty/wiki-seo": "<1.2.2", - "titon/framework": ">=0,<9.9.99", - "tobiasbg/tablepress": "<= 2.0-RC1", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", "topthink/framework": "<6.0.14", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", - "tribalsystems/zenario": "<=9.3.57595", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<=9.4.59197", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", - "typo3/cms": "<2.0.5|>=3,<3.0.3|>=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<8.7.51|>=9,<9.5.40|>=10,<10.4.36|>=11,<11.5.23|>=12,<12.2", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<8.7.55|>=9,<9.5.44|>=10,<10.4.41|>=11,<11.5.33|>=12,<12.4.8", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/cms-saltedpasswords": "<0.2.13", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<1.5|>=2,<2.1.1", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", - "unisharp/laravel-filemanager": "<=2.5.1", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", - "uvdesk/community-skeleton": "<1.1", + "uvdesk/community-skeleton": "<=1.1.1", "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "verot/class.upload.php": "<=2.1.6", "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.5.4", + "wallabag/wallabag": "<2.6.7", "wanglelecc/laracms": "<=1.0.3", "web-auth/webauthn-framework": ">=3.3,<3.3.4", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.0.475|>=1.1,<1.1.10|>=1.2,<1.2.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<1.2.3", "woocommerce/woocommerce": "<6.6", - "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<0.3.5", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", - "wwbn/avideo": "<12.4", + "wwbn/avideo": "<=12.4", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yeswiki/yeswiki": "<4.1", "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.27", + "yiisoft/yii": "<1.1.29", "yiisoft/yii2": "<2.0.38", + "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", "yiisoft/yii2-elasticsearch": "<2.0.5", @@ -2204,11 +2345,12 @@ "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", + "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", "zendframework/zend-diactoros": "<1.8.4", "zendframework/zend-feed": "<2.10.3", @@ -2224,13 +2366,22 @@ "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zendframework": "<=3", "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": ">=2,<2.0.2", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" + "zoujingli/thinkadmin": "<=6.1.53" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -2267,7 +2418,7 @@ "type": "tidelift" } ], - "time": "2023-03-27T09:04:40+00:00" + "time": "2024-02-09T23:04:23+00:00" }, { "name": "sebastian/cli-parser", @@ -2512,20 +2663,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2557,7 +2708,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -2565,20 +2716,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -2623,7 +2774,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -2631,7 +2782,7 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", @@ -2775,16 +2926,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bde739e7565280bda77be70044ac1047bc007e34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", "shasum": "" }, "require": { @@ -2827,7 +2978,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" }, "funding": [ { @@ -2835,24 +2986,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-08-02T09:26:13+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2884,7 +3035,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -2892,7 +3043,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -3235,32 +3386,32 @@ }, { "name": "slevomat/coding-standard", - "version": "8.9.1", + "version": "8.14.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "3d4fe0c803ae15829ef72d90d3d4eee3dd9f79b2" + "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/3d4fe0c803ae15829ef72d90d3d4eee3dd9f79b2", - "reference": "3d4fe0c803ae15829ef72d90d3d4eee3dd9f79b2", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926", + "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": ">=1.16.0 <1.17.0", + "phpstan/phpdoc-parser": "^1.23.1", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.10.8", - "phpstan/phpstan-deprecation-rules": "1.1.3", - "phpstan/phpstan-phpunit": "1.0.0|1.3.10", - "phpstan/phpstan-strict-rules": "1.5.0", - "phpunit/phpunit": "7.5.20|8.5.21|9.6.5" + "phpstan/phpstan": "1.10.37", + "phpstan/phpstan-deprecation-rules": "1.1.4", + "phpstan/phpstan-phpunit": "1.3.14", + "phpstan/phpstan-strict-rules": "1.5.1", + "phpunit/phpunit": "8.5.21|9.6.8|10.3.5" }, "type": "phpcodesniffer-standard", "extra": { @@ -3284,7 +3435,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.9.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.14.1" }, "funding": [ { @@ -3296,7 +3447,7 @@ "type": "tidelift" } ], - "time": "2023-03-27T11:00:16+00:00" + "time": "2023-10-08T07:28:08+00:00" }, { "name": "solido/php-coding-standards", @@ -3304,25 +3455,24 @@ "source": { "type": "git", "url": "https://github.com/solid-o/php-coding-standards.git", - "reference": "ad2380efddbcef6480df4d8aa3c5039711b23dca" + "reference": "c495c01e4a51b3979c1a19ff53537061eceac8c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/solid-o/php-coding-standards/zipball/ad2380efddbcef6480df4d8aa3c5039711b23dca", - "reference": "ad2380efddbcef6480df4d8aa3c5039711b23dca", + "url": "https://api.github.com/repos/solid-o/php-coding-standards/zipball/c495c01e4a51b3979c1a19ff53537061eceac8c9", + "reference": "c495c01e4a51b3979c1a19ff53537061eceac8c9", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "*", - "doctrine/coding-standard": "^9.0 || ^10.0 || ^11.0", + "doctrine/coding-standard": ">=11.0", "php": "^7.4 || ^8.0", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^0.12.23 || ^1.0", - "roave/security-advisories": "*", + "phpstan/phpstan": "^1.0", + "roave/security-advisories": "dev-latest || dev-master", "slevomat/coding-standard": "^7.0 || ^8.0", "solido/phpstan-rules": "^0.2", "squizlabs/php_codesniffer": "^3.6 || ^4.0", - "thecodingmachine/phpstan-safe-rule": "^1.0", "thecodingmachine/phpstan-strict-rules": "^0.12.0 || ^1.0", "thecodingmachine/safe": "^1.1 || ^2.0" }, @@ -3347,7 +3497,7 @@ "issues": "https://github.com/solid-o/php-coding-standards/issues", "source": "https://github.com/solid-o/php-coding-standards/tree/master" }, - "time": "2023-03-20T10:48:12+00:00" + "time": "2023-10-19T18:11:17+00:00" }, { "name": "solido/phpstan-rules", @@ -3410,16 +3560,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.8.1", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "14f5fff1e64118595db5408e946f3a22c75807f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7", + "reference": "14f5fff1e64118595db5408e946f3a22c75807f7", "shasum": "" }, "require": { @@ -3429,11 +3579,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -3448,46 +3598,140 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-01-11T20:47:48+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/error-handler", - "version": "v6.0.19", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67" + "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c7df52182f43a68522756ac31a532dd5b1e6db67", - "reference": "c7df52182f43a68522756ac31a532dd5b1e6db67", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6dc3c76a278b77f01d864a6005d640822c6f26a6", + "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -3518,7 +3762,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.0.19" + "source": "https://github.com/symfony/error-handler/tree/v6.4.3" }, "funding": [ { @@ -3534,20 +3778,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2024-01-29T15:40:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -3561,9 +3805,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3601,7 +3842,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -3617,55 +3858,41 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/var-dumper", - "version": "v6.0.19", + "name": "symfony/polyfill-php80", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "php": ">=7.1" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { "files": [ - "Resources/functions/dump.php" + "bootstrap.php" ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3673,6 +3900,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3682,14 +3913,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "debug", - "dump" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -3705,47 +3938,53 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { - "name": "thecodingmachine/phpstan-safe-rule", - "version": "v1.2.0", + "name": "symfony/var-dumper", + "version": "v6.4.3", "source": { "type": "git", - "url": "https://github.com/thecodingmachine/phpstan-safe-rule.git", - "reference": "8a7b88e0d54f209a488095085f183e9174c40e1e" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0435a08f69125535336177c29d56af3abc1f69da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/phpstan-safe-rule/zipball/8a7b88e0d54f209a488095085f183e9174c40e1e", - "reference": "8a7b88e0d54f209a488095085f183e9174c40e1e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0435a08f69125535336177c29d56af3abc1f69da", + "reference": "0435a08f69125535336177c29d56af3abc1f69da", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^1.0", - "thecodingmachine/safe": "^1.0 || ^2.0" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^7.5.2 || ^8.0", - "squizlabs/php_codesniffer": "^3.4" + "conflict": { + "symfony/console": "<5.4" }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "phpstan": { - "includes": [ - "phpstan-safe-rule.neon" - ] - } + "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" }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "TheCodingMachine\\Safe\\PHPStan\\": "src/" - } + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3753,16 +3992,38 @@ ], "authors": [ { - "name": "David NĂ©grier", - "email": "d.negrier@thecodingmachine.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHPStan rule to detect safety issues. Must be used in conjunction with thecodingmachine/safe", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], "support": { - "issues": "https://github.com/thecodingmachine/phpstan-safe-rule/issues", - "source": "https://github.com/thecodingmachine/phpstan-safe-rule/tree/v1.2.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.3" }, - "time": "2022-01-17T10:12:29+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:53:30+00:00" }, { "name": "thecodingmachine/phpstan-strict-rules", @@ -3821,16 +4082,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -3859,7 +4120,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.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -3867,7 +4128,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "webmozart/assert", @@ -3937,7 +4198,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.0" + "php": "^8.1" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/lib/Finder/ComposerFinder.php b/lib/Finder/ComposerFinder.php index 4decde5..0fcf3a3 100644 --- a/lib/Finder/ComposerFinder.php +++ b/lib/Finder/ComposerFinder.php @@ -43,9 +43,20 @@ public function setReflectorFactory(ReflectorFactoryInterface|null $reflectorFac public function getIterator(): Iterator { if ($this->namespaces || $this->dirs || $this->notNamespaces) { - $iterator = new FilteredComposerIterator($this->loader, $this->reflectorFactory, $this->namespaces, $this->notNamespaces, $this->dirs); + $iterator = new FilteredComposerIterator( + $this->loader, + $this->reflectorFactory, + $this->namespaces, + $this->notNamespaces, + $this->dirs, + pathCallback: $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null, + ); } else { - $iterator = new ComposerIterator($this->loader, $this->reflectorFactory); + $iterator = new ComposerIterator( + $this->loader, + $this->reflectorFactory, + pathCallback: $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null, + ); } return $this->applyFilters($iterator); diff --git a/lib/Finder/FinderInterface.php b/lib/Finder/FinderInterface.php index 6415a8f..41f7b24 100644 --- a/lib/Finder/FinderInterface.php +++ b/lib/Finder/FinderInterface.php @@ -120,4 +120,12 @@ public function path(string $pattern): self; * @return $this */ public function notPath(string $pattern): self; + + /** + * Sets a custom callback for file filtering. + * The callback will receive the full filepath as the only argument. + * + * @return $this + */ + public function pathFilter(callable|null $callback): self; } diff --git a/lib/Finder/FinderTrait.php b/lib/Finder/FinderTrait.php index 7d3a7ef..94b294b 100644 --- a/lib/Finder/FinderTrait.php +++ b/lib/Finder/FinderTrait.php @@ -51,10 +51,13 @@ trait FinderTrait private array|null $notPaths = null; /** @var callable|null */ - private $callback = null; + private $filterCallback = null; + + /** @var callable|null */ + private $pathFilterCallback = null; /** - * {@inheritdoc} + * {@inheritDoc} */ public function implementationOf($interface): self { @@ -85,7 +88,7 @@ public function withAttribute(string|null $attributeClass): self } /** - * {@inheritdoc} + * {@inheritDoc} */ public function in($dirs): self { @@ -111,7 +114,7 @@ public function in($dirs): self } /** - * {@inheritdoc} + * {@inheritDoc} */ public function inNamespace($namespaces): self { @@ -121,7 +124,7 @@ public function inNamespace($namespaces): self } /** - * {@inheritdoc} + * {@inheritDoc} */ public function notInNamespace($namespaces): self { @@ -132,13 +135,13 @@ public function notInNamespace($namespaces): self public function filter(callable|null $callback): self { - $this->callback = $callback; + $this->filterCallback = $callback; return $this; } /** - * {@inheritdoc} + * {@inheritDoc} */ public function path($pattern): self { @@ -148,7 +151,7 @@ public function path($pattern): self } /** - * {@inheritdoc} + * {@inheritDoc} */ public function notPath($pattern): self { @@ -156,4 +159,11 @@ public function notPath($pattern): self return $this; } + + public function pathFilter(callable|null $callback): self + { + $this->pathFilterCallback = $callback; + + return $this; + } } diff --git a/lib/Finder/PhpDocumentorFilterTrait.php b/lib/Finder/PhpDocumentorFilterTrait.php index af13574..a21fe5c 100644 --- a/lib/Finder/PhpDocumentorFilterTrait.php +++ b/lib/Finder/PhpDocumentorFilterTrait.php @@ -46,11 +46,11 @@ private function applyFilters(Iterator $iterator): Iterator $iterator = new Filters\AttributeFilterIterator($iterator, $this->attribute); } - if ($this->callback !== null) { + if ($this->filterCallback !== null) { $iterator = new CallbackFilterIterator($iterator, function ($current, $key) { - assert($this->callback !== null); + assert($this->filterCallback !== null); - return (bool) ($this->callback)($current, $key); + return (bool) ($this->filterCallback)($current, $key); }); } diff --git a/lib/Finder/PhpDocumentorFinder.php b/lib/Finder/PhpDocumentorFinder.php index 02e0dde..942e696 100644 --- a/lib/Finder/PhpDocumentorFinder.php +++ b/lib/Finder/PhpDocumentorFinder.php @@ -29,7 +29,8 @@ public function __construct(private string $dir) /** @return Iterator */ public function getIterator(): Iterator { - $iterator = new PhpDocumentorIterator($this->dir); + $pathCallback = $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null; + $iterator = new PhpDocumentorIterator($this->dir, pathCallback: $pathCallback); if ($this->dirs !== null) { $iterator->in($this->dirs); diff --git a/lib/Finder/Psr0Finder.php b/lib/Finder/Psr0Finder.php index 94c36ec..b0d12e4 100644 --- a/lib/Finder/Psr0Finder.php +++ b/lib/Finder/Psr0Finder.php @@ -50,6 +50,11 @@ public function setReflectorFactory(ReflectorFactoryInterface|null $reflectorFac /** @return Iterator */ public function getIterator(): Iterator { - return $this->applyFilters(new Psr0Iterator($this->namespace, $this->path, $this->reflectorFactory)); + return $this->applyFilters(new Psr0Iterator( + $this->namespace, + $this->path, + reflectorFactory: $this->reflectorFactory, + pathCallback: $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null, + )); } } diff --git a/lib/Finder/Psr4Finder.php b/lib/Finder/Psr4Finder.php index 4479b43..3c93462 100644 --- a/lib/Finder/Psr4Finder.php +++ b/lib/Finder/Psr4Finder.php @@ -10,7 +10,7 @@ use Kcs\ClassFinder\Reflection\ReflectorFactoryInterface; use Reflector; -use function Safe\substr; +use function substr; use const DIRECTORY_SEPARATOR; @@ -50,6 +50,11 @@ public function setReflectorFactory(ReflectorFactoryInterface|null $reflectorFac /** @return Iterator */ public function getIterator(): Iterator { - return $this->applyFilters(new Psr4Iterator($this->namespace, $this->path, $this->reflectorFactory)); + return $this->applyFilters(new Psr4Iterator( + $this->namespace, + $this->path, + $this->reflectorFactory, + pathCallback: $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null, + )); } } diff --git a/lib/Finder/RecursiveFinder.php b/lib/Finder/RecursiveFinder.php index 74757bb..6e5c5fc 100644 --- a/lib/Finder/RecursiveFinder.php +++ b/lib/Finder/RecursiveFinder.php @@ -15,9 +15,6 @@ final class RecursiveFinder implements FinderInterface private string $path; - /** @var callable|null */ - private $iteratorCallback = null; - public function __construct(string $path) { $path = PathNormalizer::resolvePath($path); @@ -27,13 +24,9 @@ public function __construct(string $path) /** @return Traversable */ public function getIterator(): Traversable { - return $this->applyFilters(new RecursiveIterator($this->path, 0, $this->iteratorCallback)); - } - - public function fileFilter(callable|null $callback): self - { - $this->iteratorCallback = $callback; - - return $this; + return $this->applyFilters(new RecursiveIterator( + $this->path, + pathCallback: $this->pathFilterCallback !== null ? ($this->pathFilterCallback)(...) : null, + )); } } diff --git a/lib/Finder/ReflectionFilterTrait.php b/lib/Finder/ReflectionFilterTrait.php index 5cdc148..80ed50c 100644 --- a/lib/Finder/ReflectionFilterTrait.php +++ b/lib/Finder/ReflectionFilterTrait.php @@ -48,11 +48,11 @@ private function applyFilters(Iterator $iterator): Iterator $iterator = new Filters\AttributeFilterIterator($iterator, $this->attribute); } - if ($this->callback !== null) { + if ($this->filterCallback !== null) { $iterator = new CallbackFilterIterator($iterator, function ($current, $key) { - assert($this->callback !== null); + assert($this->filterCallback !== null); - return (bool) ($this->callback)($current, $key); + return (bool) ($this->filterCallback)($current, $key); }); } diff --git a/lib/Iterator/ClassIterator.php b/lib/Iterator/ClassIterator.php index 97bd258..087f2c4 100644 --- a/lib/Iterator/ClassIterator.php +++ b/lib/Iterator/ClassIterator.php @@ -4,12 +4,12 @@ namespace Kcs\ClassFinder\Iterator; +use Closure; use Generator; use Iterator; use ReflectionClass; use function assert; -use function call_user_func; use function is_string; /** @@ -28,13 +28,11 @@ abstract class ClassIterator implements Iterator /** @var array */ private array $foundClasses = []; - /** @var callable */ - private $_apply; - + private Closure $_apply; private mixed $_currentElement; private mixed $_current = null; - public function __construct(private int $flags = 0) + public function __construct(private readonly int $flags = 0, protected Closure|null $pathCallback = null) { $this->apply(null); $this->rewind(); @@ -47,7 +45,7 @@ public function current(): mixed } if ($this->_current === null) { - $this->_current = call_user_func($this->_apply, $this->_currentElement); + $this->_current = ($this->_apply)($this->_currentElement); } return $this->_current; @@ -99,7 +97,7 @@ public function apply(callable|null $func = null): self } $this->_current = null; - $this->_apply = $func; + $this->_apply = $func(...); return $this; } diff --git a/lib/Iterator/ComposerIterator.php b/lib/Iterator/ComposerIterator.php index bd482a5..2873b8d 100644 --- a/lib/Iterator/ComposerIterator.php +++ b/lib/Iterator/ComposerIterator.php @@ -4,6 +4,7 @@ namespace Kcs\ClassFinder\Iterator; +use Closure; use Composer\Autoload\ClassLoader; use Generator; use Kcs\ClassFinder\Reflection\NativeReflectorFactory; @@ -18,11 +19,15 @@ final class ComposerIterator extends ClassIterator { private ReflectorFactoryInterface $reflectorFactory; - public function __construct(private ClassLoader $classLoader, ReflectorFactoryInterface|null $reflectorFactory = null, int $flags = 0) - { + public function __construct( + private readonly ClassLoader $classLoader, + ReflectorFactoryInterface|null $reflectorFactory = null, + int $flags = 0, + Closure|null $pathCallback = null, + ) { $this->reflectorFactory = $reflectorFactory ?? new NativeReflectorFactory(); - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } protected function getGenerator(): Generator @@ -38,6 +43,10 @@ private function searchInClassMap(): Generator { /** @var class-string $class */ foreach ($this->classLoader->getClassMap() as $class => $file) { + if ($this->pathCallback && ! ($this->pathCallback)($file)) { + continue; + } + ErrorHandler::register(); try { $reflectionClass = $this->reflectorFactory->reflect($class); @@ -66,13 +75,19 @@ private function searchInPsrMap(): Generator foreach ($this->classLoader->getPrefixesPsr4() as $ns => $dirs) { foreach ($dirs as $dir) { - yield from new Psr4Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap()); + $itr = new Psr4Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap()); + $itr->pathCallback = $this->pathCallback; + + yield from $itr; } } foreach ($this->classLoader->getPrefixes() as $ns => $dirs) { foreach ((array) $dirs as $dir) { - yield from new Psr0Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap()); + $itr = new Psr0Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap()); + $itr->pathCallback = $this->pathCallback; + + yield from $itr; } } } diff --git a/lib/Iterator/FilteredComposerIterator.php b/lib/Iterator/FilteredComposerIterator.php index 588712c..ad66e17 100644 --- a/lib/Iterator/FilteredComposerIterator.php +++ b/lib/Iterator/FilteredComposerIterator.php @@ -4,6 +4,7 @@ namespace Kcs\ClassFinder\Iterator; +use Closure; use Composer\Autoload\ClassLoader; use Generator; use Kcs\ClassFinder\PathNormalizer; @@ -45,8 +46,15 @@ final class FilteredComposerIterator extends ClassIterator * @param string[]|null $notNamespaces * @param string[]|null $dirs */ - public function __construct(private ClassLoader $classLoader, ReflectorFactoryInterface|null $reflectorFactory, array|null $namespaces, array|null $notNamespaces, array|null $dirs, int $flags = 0) - { + public function __construct( + private readonly ClassLoader $classLoader, + ReflectorFactoryInterface|null $reflectorFactory, + array|null $namespaces, + array|null $notNamespaces, + array|null $dirs, + int $flags = 0, + Closure|null $pathCallback = null, + ) { $this->reflectorFactory = $reflectorFactory ?? new NativeReflectorFactory(); $this->dirs = $dirs !== null ? array_map(PathNormalizer::class . '::resolvePath', $dirs) : $dirs; @@ -62,7 +70,7 @@ public function __construct(private ClassLoader $classLoader, ReflectorFactoryIn $this->notNamespaces = array_unique($notNamespaces); } - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } protected function getGenerator(): Generator @@ -82,7 +90,12 @@ private function searchInClassMap(): Generator continue; } - if (! $this->validDir(PathNormalizer::resolvePath($file))) { + $file = PathNormalizer::resolvePath($file); + if (! $this->validDir($file)) { + continue; + } + + if ($this->pathCallback && ! ($this->pathCallback)($file)) { continue; } @@ -113,11 +126,11 @@ private function searchInPsrMap(): Generator } foreach ($this->traversePrefixes($this->classLoader->getPrefixesPsr4()) as $ns => $dir) { - yield from new Psr4Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap(), $this->notNamespaces); + yield from new Psr4Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap(), $this->notNamespaces, $this->pathCallback); } foreach ($this->traversePrefixes($this->classLoader->getPrefixes()) as $ns => $dir) { - yield from new Psr0Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap(), $this->notNamespaces); + yield from new Psr0Iterator($ns, $dir, $this->reflectorFactory, 0, $this->classLoader->getClassMap(), $this->notNamespaces, $this->pathCallback); } } diff --git a/lib/Iterator/PhpDocumentorIterator.php b/lib/Iterator/PhpDocumentorIterator.php index 072db1a..70b6530 100644 --- a/lib/Iterator/PhpDocumentorIterator.php +++ b/lib/Iterator/PhpDocumentorIterator.php @@ -4,6 +4,7 @@ namespace Kcs\ClassFinder\Iterator; +use Closure; use FilesystemIterator; use Generator; use InvalidArgumentException; @@ -63,7 +64,7 @@ final class PhpDocumentorIterator extends ClassIterator private ProjectFactoryStrategies $strategies; private DocBlockFactory $docBlockFactory; - public function __construct(string $path, int $flags = 0) + public function __construct(string $path, int $flags = 0, Closure|null $pathCallback = null) { $this->path = PathNormalizer::resolvePath($path); $this->docBlockFactory = DocBlockFactory::createInstance(); @@ -102,7 +103,7 @@ public function __construct(string $path, int $flags = 0) $this->strategies->addStrategy(new Factory\Noop(), -1000); } - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } /** @@ -244,6 +245,10 @@ static function (SplFileInfo $file) { private function accept(string $path): bool { + if ($this->pathCallback && ! ($this->pathCallback)($path)) { + return false; + } + return $this->acceptDirs($path) && $this->acceptPaths($path); } diff --git a/lib/Iterator/Psr0Iterator.php b/lib/Iterator/Psr0Iterator.php index 0bd9930..6656e11 100644 --- a/lib/Iterator/Psr0Iterator.php +++ b/lib/Iterator/Psr0Iterator.php @@ -37,19 +37,20 @@ final class Psr0Iterator extends ClassIterator * @param string[] $excludeNamespaces */ public function __construct( - private string $namespace, + private readonly string $namespace, string $path, ReflectorFactoryInterface|null $reflectorFactory = null, int $flags = 0, array $classMap = [], - private array|null $excludeNamespaces = null, + private readonly array|null $excludeNamespaces = null, + Closure|null $pathCallback = null, ) { $this->path = PathNormalizer::resolvePath($path); $this->reflectorFactory = $reflectorFactory ?? new NativeReflectorFactory(); $this->pathLen = strlen($this->path); $this->classMap = array_map(PathNormalizer::class . '::resolvePath', $classMap); - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } protected function getGenerator(): Generator @@ -68,6 +69,10 @@ protected function getGenerator(): Generator continue; } + if ($this->pathCallback && ! ($this->pathCallback)($path)) { + continue; + } + /** @phpstan-var class-string $class */ $class = ltrim(str_replace('/', '\\', substr($path, $this->pathLen, -strlen($m[0]))), '\\'); if (strpos($class, $this->namespace) !== 0) { diff --git a/lib/Iterator/Psr4Iterator.php b/lib/Iterator/Psr4Iterator.php index 06a9c5e..4d65ac5 100644 --- a/lib/Iterator/Psr4Iterator.php +++ b/lib/Iterator/Psr4Iterator.php @@ -17,10 +17,10 @@ use function in_array; use function ltrim; use function Safe\preg_match; -use function Safe\substr; use function str_replace; use function strlen; use function strpos; +use function substr; final class Psr4Iterator extends ClassIterator { @@ -37,19 +37,20 @@ final class Psr4Iterator extends ClassIterator * @param string[] $excludeNamespaces */ public function __construct( - private string $namespace, + private readonly string $namespace, string $path, ReflectorFactoryInterface|null $reflectorFactory = null, int $flags = 0, array $classMap = [], - private array|null $excludeNamespaces = null, + private readonly array|null $excludeNamespaces = null, + Closure|null $pathCallback = null, ) { $this->path = PathNormalizer::resolvePath($path); $this->reflectorFactory = $reflectorFactory ?? new NativeReflectorFactory(); $this->prefixLen = strlen($this->path); $this->classMap = array_map(PathNormalizer::class . '::resolvePath', $classMap); - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } protected function getGenerator(): Generator @@ -68,6 +69,10 @@ protected function getGenerator(): Generator continue; } + if ($this->pathCallback && ! ($this->pathCallback)($path)) { + continue; + } + /** @phpstan-var class-string $class */ $class = $this->namespace . ltrim(str_replace('/', '\\', substr($path, $this->prefixLen, -strlen($m[0]))), '\\'); if ($this->excludeNamespaces !== null) { diff --git a/lib/Iterator/RecursiveIterator.php b/lib/Iterator/RecursiveIterator.php index c066dfb..a504d42 100644 --- a/lib/Iterator/RecursiveIterator.php +++ b/lib/Iterator/RecursiveIterator.php @@ -4,6 +4,7 @@ namespace Kcs\ClassFinder\Iterator; +use Closure; use Generator; use Kcs\ClassFinder\PathNormalizer; use ReflectionClass; @@ -19,16 +20,11 @@ final class RecursiveIterator extends ClassIterator { use RecursiveIteratorTrait; - /** @var callable|null */ - private $callback = null; - - public function __construct(string $path, int $flags = 0, callable|null $callback = null) + public function __construct(string $path, int $flags = 0, Closure|null $pathCallback = null) { $this->path = PathNormalizer::resolvePath($path); - $this->callback = $callback; - - parent::__construct($flags); + parent::__construct($flags, $pathCallback); } /** @return Generator */ @@ -42,7 +38,7 @@ protected function getGenerator(): Generator continue; } - if($this->callback && !call_user_func($this->callback, $path, $info)) { + if ($this->pathCallback && ! ($this->pathCallback)($path)) { continue; } diff --git a/tests/Finder/ComposerFinderTest.php b/tests/Finder/ComposerFinderTest.php index 7c0b10d..cf71904 100644 --- a/tests/Finder/ComposerFinderTest.php +++ b/tests/Finder/ComposerFinderTest.php @@ -209,4 +209,21 @@ public function testFinderShouldFilterByNotPathRegex(): void Psr4WithClassMap\BarBar::class => new ReflectionClass(Psr4WithClassMap\BarBar::class), ], iterator_to_array($finder)); } + + public function testFinderShouldFilterByPathCallback(): void + { + $finder = new ComposerFinder(); + $finder->in([__DIR__ . '/../../data']); + $finder->pathFilter(static fn (string $path): bool => !str_ends_with($path, 'BarBar.php')); + + self::assertEquals([ + Psr4\Foobar::class => new ReflectionClass(Psr4\Foobar::class), + Psr4\AbstractClass::class => new ReflectionClass(Psr4\AbstractClass::class), + Psr4\FooInterface::class => new ReflectionClass(Psr4\FooInterface::class), + Psr4\FooTrait::class => new ReflectionClass(Psr4\FooTrait::class), + Psr0\Foobar::class => new ReflectionClass(Psr0\Foobar::class), + Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), + Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), + ], iterator_to_array($finder)); + } } diff --git a/tests/Finder/PhpDocumentorFinderTest.php b/tests/Finder/PhpDocumentorFinderTest.php index 79219d9..1c8d007 100644 --- a/tests/Finder/PhpDocumentorFinderTest.php +++ b/tests/Finder/PhpDocumentorFinderTest.php @@ -55,6 +55,7 @@ public function testFinderShouldFilterByExcludedNamespace(): void $finder ->inNamespace(['Kcs\ClassFinder\Fixtures']) ->notInNamespace([ + 'Kcs\ClassFinder\Fixtures\Recursive', 'Kcs\ClassFinder\Fixtures\Psr4', 'Kcs\ClassFinder\Fixtures\Psr4WithClassMap', ]); @@ -151,4 +152,21 @@ public function testFinderShouldFilterByCallback(): void self::assertArrayHasKey(Psr4\AbstractClass::class, $classes); self::assertInstanceOf(Class_::class, $classes[Psr4\AbstractClass::class]); } + + public function testFinderShouldFilterByPathCallback(): void + { + $finder = new PhpDocumentorFinder(__DIR__ . '/../../data'); + $finder->in([__DIR__ . '/../../data/Composer/Psr?']); + $finder->pathFilter(static fn (string $path): bool => !str_ends_with($path, 'BarBar.php')); + + $classes = iterator_to_array($finder); + + self::assertCount(8, $classes); + self::assertArrayHasKey(Psr4\AbstractClass::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr4\AbstractClass::class]); + self::assertArrayHasKey(Psr0\Foobar::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr0\Foobar::class]); + self::assertArrayHasKey(Psr0\SubNs\FooBaz::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr0\SubNs\FooBaz::class]); + } } diff --git a/tests/Finder/Psr0FinderTest.php b/tests/Finder/Psr0FinderTest.php index 17417d8..aae3b48 100644 --- a/tests/Finder/Psr0FinderTest.php +++ b/tests/Finder/Psr0FinderTest.php @@ -84,4 +84,15 @@ public function testFinderShouldFilterByAttribute(): void Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), ], iterator_to_array($finder)); } + + public function testFinderShouldFilterByPathCallback(): void + { + $finder = new Psr0Finder('Kcs\ClassFinder\Fixtures\Psr0', __DIR__ . '/../../data/Composer/Psr0'); + $finder->pathFilter(static fn (string $path): bool => !str_ends_with($path, 'BarBar.php')); + + self::assertEquals([ + Psr0\Foobar::class => new ReflectionClass(Psr0\Foobar::class), + Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), + ], iterator_to_array($finder)); + } } diff --git a/tests/Finder/Psr4FinderTest.php b/tests/Finder/Psr4FinderTest.php index d5d7306..faa20d8 100644 --- a/tests/Finder/Psr4FinderTest.php +++ b/tests/Finder/Psr4FinderTest.php @@ -86,4 +86,18 @@ public function testFinderShouldFilterByAttribute(): void Psr4\AbstractClass::class => new ReflectionClass(Psr4\AbstractClass::class), ], iterator_to_array($finder)); } + + public function testFinderShouldFilterByPathCallback(): void + { + $finder = new Psr4Finder('Kcs\ClassFinder\Fixtures\Psr4', __DIR__ . '/../../data/Composer/Psr4'); + $finder->pathFilter(static fn (string $path): bool => !str_ends_with($path, 'BarBar.php')); + + self::assertEquals([ + Psr4\Foobar::class => new ReflectionClass(Psr4\Foobar::class), + Psr4\AbstractClass::class => new ReflectionClass(Psr4\AbstractClass::class), + Psr4\FooInterface::class => new ReflectionClass(Psr4\FooInterface::class), + Psr4\FooTrait::class => new ReflectionClass(Psr4\FooTrait::class), + Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), + ], iterator_to_array($finder)); + } } diff --git a/tests/Finder/RecursiveFinderTest.php b/tests/Finder/RecursiveFinderTest.php index 06d3c30..0ff448e 100644 --- a/tests/Finder/RecursiveFinderTest.php +++ b/tests/Finder/RecursiveFinderTest.php @@ -112,8 +112,8 @@ public function testFinderShouldFilterByCallback(): void public function testFinderShouldFilterByIteratorCallback(): void { $finder = new RecursiveFinder(__DIR__ . '/../../data/Recursive'); - $finder->fileFilter(static function (string $path, SplFileInfo $info): bool { - return !str_starts_with($info->getFilename(), 'class-'); + $finder->pathFilter(static function (string $path): bool { + return !str_starts_with(basename($path), 'class-'); }); $classes = iterator_to_array($finder); diff --git a/tests/Iterator/ComposerIteratorTest.php b/tests/Iterator/ComposerIteratorTest.php index dc27203..54ba9aa 100644 --- a/tests/Iterator/ComposerIteratorTest.php +++ b/tests/Iterator/ComposerIteratorTest.php @@ -14,6 +14,7 @@ use ReflectionClass; use function iterator_to_array; +use function str_ends_with; class ComposerIteratorTest extends TestCase { @@ -162,4 +163,25 @@ public function testComposerIteratorShouldNotYieldTheSameClassTwice(): void Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), ], iterator_to_array($iterator)); } + + public function testComposerIteratorShouldCallPathCallback(): void + { + $loader = new ClassLoader(); + (Closure::bind(static function () use ($loader) { + $loader->prefixDirsPsr4 = [ + 'Kcs\\ClassFinder\\Fixtures\\Psr4\\' => [ + __DIR__ . '/../..' . '/data/Composer/Psr4', + ], + ]; + }, null, ClassLoader::class))(); + + $iterator = new ComposerIterator($loader, null, ClassIterator::SKIP_NON_INSTANTIABLE, function (string $path): bool { + return !str_ends_with($path, 'BarBar.php'); + }); + + self::assertEquals([ + Psr4\Foobar::class => new ReflectionClass(Psr4\Foobar::class), + Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), + ], iterator_to_array($iterator)); + } } diff --git a/tests/Iterator/FilteredComposerIteratorTest.php b/tests/Iterator/FilteredComposerIteratorTest.php index 6281265..cdcaf54 100644 --- a/tests/Iterator/FilteredComposerIteratorTest.php +++ b/tests/Iterator/FilteredComposerIteratorTest.php @@ -13,6 +13,7 @@ use ReflectionClass; use function iterator_to_array; +use function str_ends_with; class FilteredComposerIteratorTest extends TestCase { @@ -60,6 +61,24 @@ public function testComposerIteratorShouldWork(): void ], iterator_to_array($iterator)); } + public function testComposerIteratorShouldCallPathCallback(): void + { + $iterator = new FilteredComposerIterator($this->loader, null, null, null, null, 0, function (string $path): bool { + return !str_ends_with($path, 'BarBar.php'); + }); + + self::assertEquals([ + self::class => new ReflectionClass(self::class), + Psr4\Foobar::class => new ReflectionClass(Psr4\Foobar::class), + Psr4\AbstractClass::class => new ReflectionClass(Psr4\AbstractClass::class), + Psr4\FooInterface::class => new ReflectionClass(Psr4\FooInterface::class), + Psr4\FooTrait::class => new ReflectionClass(Psr4\FooTrait::class), + Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), + Psr0\Foobar::class => new ReflectionClass(Psr0\Foobar::class), + Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), + ], iterator_to_array($iterator)); + } + public function testComposerIteratorShouldFilterNotIntersectingPath(): void { // NOTE: This test could be interpreted as wrong, but is not: diff --git a/tests/Iterator/PhpDocumentorIteratorTest.php b/tests/Iterator/PhpDocumentorIteratorTest.php index aba49b1..bc65530 100644 --- a/tests/Iterator/PhpDocumentorIteratorTest.php +++ b/tests/Iterator/PhpDocumentorIteratorTest.php @@ -83,4 +83,27 @@ public function testComposerIteratorShouldFilterNotIntersectingPath(): void Psr0\SubNs\FooBaz::class, ], array_keys($classes)); } + + public function testIteratorShouldCallPathCallback(): void + { + $iterator = new PhpDocumentorIterator( + realpath(__DIR__ . '/../../data/Composer/Psr4'), + pathCallback: function (string $path): bool { + return !str_ends_with($path, 'BarBar.php'); + } + ); + + $classes = iterator_to_array($iterator); + + self::assertArrayHasKey(Psr4\Foobar::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr4\Foobar::class]); + self::assertArrayHasKey(Psr4\AbstractClass::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr4\AbstractClass::class]); + self::assertArrayHasKey(Psr4\SubNs\FooBaz::class, $classes); + self::assertInstanceOf(Class_::class, $classes[Psr4\SubNs\FooBaz::class]); + self::assertArrayHasKey(Psr4\FooInterface::class, $classes); + self::assertInstanceOf(Interface_::class, $classes[Psr4\FooInterface::class]); + self::assertArrayHasKey(Psr4\FooTrait::class, $classes); + self::assertInstanceOf(Trait_::class, $classes[Psr4\FooTrait::class]); + } } diff --git a/tests/Iterator/Psr0IteratorTest.php b/tests/Iterator/Psr0IteratorTest.php index 03ec481..9e4b30a 100644 --- a/tests/Iterator/Psr0IteratorTest.php +++ b/tests/Iterator/Psr0IteratorTest.php @@ -29,4 +29,21 @@ public function testIteratorShouldWork(): void Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), ], iterator_to_array($iterator)); } + + public function testIteratorShouldCallPathCallback(): void + { + $iterator = new Psr0Iterator( + 'Kcs\\ClassFinder\\Fixtures\\Psr0\\', + realpath(__DIR__ . '/../../data/Composer/Psr0'), + new NativeReflectorFactory(), + pathCallback: function (string $path): bool { + return !str_ends_with($path, 'BarBar.php'); + }, + ); + + self::assertEquals([ + Psr0\Foobar::class => new ReflectionClass(Psr0\Foobar::class), + Psr0\SubNs\FooBaz::class => new ReflectionClass(Psr0\SubNs\FooBaz::class), + ], iterator_to_array($iterator)); + } } diff --git a/tests/Iterator/Psr4IteratorTest.php b/tests/Iterator/Psr4IteratorTest.php index 314bebd..b1adb10 100644 --- a/tests/Iterator/Psr4IteratorTest.php +++ b/tests/Iterator/Psr4IteratorTest.php @@ -20,7 +20,7 @@ public function testIteratorShouldWork(): void $iterator = new Psr4Iterator( 'Kcs\\ClassFinder\\Fixtures\\Psr4\\', realpath(__DIR__ . '/../../data/Composer/Psr4'), - new NativeReflectorFactory() + new NativeReflectorFactory(), ); self::assertEquals([ @@ -32,4 +32,24 @@ public function testIteratorShouldWork(): void Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), ], iterator_to_array($iterator)); } + + public function testIteratorShouldCallPathCallback(): void + { + $iterator = new Psr4Iterator( + 'Kcs\\ClassFinder\\Fixtures\\Psr4\\', + realpath(__DIR__ . '/../../data/Composer/Psr4'), + new NativeReflectorFactory(), + pathCallback: function (string $path): bool { + return !str_ends_with($path, 'BarBar.php'); + }, + ); + + self::assertEquals([ + Psr4\Foobar::class => new ReflectionClass(Psr4\Foobar::class), + Psr4\AbstractClass::class => new ReflectionClass(Psr4\AbstractClass::class), + Psr4\FooInterface::class => new ReflectionClass(Psr4\FooInterface::class), + Psr4\FooTrait::class => new ReflectionClass(Psr4\FooTrait::class), + Psr4\SubNs\FooBaz::class => new ReflectionClass(Psr4\SubNs\FooBaz::class), + ], iterator_to_array($iterator)); + } } diff --git a/tests/Iterator/RecursiveIteratorTest.php b/tests/Iterator/RecursiveIteratorTest.php index c76cbc7..7d716ed 100644 --- a/tests/Iterator/RecursiveIteratorTest.php +++ b/tests/Iterator/RecursiveIteratorTest.php @@ -31,8 +31,8 @@ public function testRecursiveIteratorShouldSkipFilesThatDoNotMatchFilter(): void $iterator = new RecursiveIterator( __DIR__ . '/../../data/Recursive', 0, - static function ( string $path, SplFileInfo $info ): bool { - return str_starts_with( $info->getFilename(), 'class-' ); + static function (string $path): bool { + return str_starts_with(basename($path), 'class-'); }); self::assertEquals([