From 774c1496e5524e1bd2e2908b22eb4df9d8a0ef99 Mon Sep 17 00:00:00 2001 From: Michael Reichardt Date: Thu, 22 Feb 2024 15:14:40 +0100 Subject: [PATCH 1/5] Downgrade to PHP 7.4, move to PHPUnit, set up CI --- .github/workflows/ci.yml | 62 + composer.json | 42 +- composer.lock | 3110 +++++++---------- php.ini | 6 + phpunit.xml | 15 +- .../Blueprints/BlueprintException.php | 5 +- src/WordPress/Blueprints/BlueprintParser.php | 383 +- .../Blueprints/Compile/BlueprintCompiler.php | 10 +- src/WordPress/Blueprints/ContainerBuilder.php | 12 +- .../Resolver/FilesystemResourceResolver.php | 2 +- .../Resolver/InlineResourceResolver.php | 2 +- .../Resolver/ResourceResolverCollection.php | 2 +- .../Resolver/ResourceResolverInterface.php | 2 +- .../Resource/Resolver/UrlResourceResolver.php | 2 +- .../Blueprints/Resource/ResourceManager.php | 2 +- .../Blueprints/Resource/ResourceMap.php | 53 - .../Resolver/FilesystemResourceResolver.php | 41 + .../Resolver/InlineResourceResolver.php | 43 + .../Resolver/ResourceResolverCollection.php | 57 + .../Resolver/ResourceResolverInterface.php | 16 + .../Resolver/UrlResourceResolver.php | 48 + .../Blueprints/Resources/ResourceManager.php | 49 + .../Blueprints/Resources/ResourceMap.php | 60 + .../Blueprints/Runner/Step/BaseStepRunner.php | 46 +- .../Blueprints/Runner/Step/RmStepRunner.php | 4 +- .../Runner/Step/StepRunnerInterface.php | 12 +- src/WordPress/Blueprints/Runtime/Runtime.php | 14 +- .../Runner/Step/RmStepRunnerTest.php | 175 + tests/TestCase.php | 9 - tests/Unit/CompilerTest.php | 18 +- tests/Unit/TrackerTest.php | 452 +-- tests/Unit/stream_str_replace_Test.php | 76 +- 32 files changed, 2344 insertions(+), 2486 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 php.ini delete mode 100644 src/WordPress/Blueprints/Resource/ResourceMap.php create mode 100644 src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php create mode 100644 src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php create mode 100644 src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php create mode 100644 src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php create mode 100644 src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php create mode 100644 src/WordPress/Blueprints/Resources/ResourceManager.php create mode 100644 src/WordPress/Blueprints/Resources/ResourceMap.php create mode 100644 tests/Blueprints/Runner/Step/RmStepRunnerTest.php delete mode 100644 tests/TestCase.php diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..2fdb442d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,62 @@ +name: CI + +on: + push: + branches: + - trunk + pull_request: + +jobs: + php-cs-check: + name: 'PHP 7.4 compatibility (via PHP Code Sniffer)' + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + tools: composer:v2 + coverage: xdebug + + - name: Install Dependencies + run: composer install --no-interaction --prefer-dist --optimize-autoloader + + - name: Check PHP version compatibility + uses: pantheon-systems/phpcompatibility-action@v1 + with: + skip-php-setup: true + test-versions: 7.4- + paths: ${{ github.workspace }}/src + + test-unit: + needs: [php-cs-check] + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + php: [ '7.4', '8.0', '8.1', '8.2', '8.3' ] + dependency_version: [ prefer-stable ] + + name: ${{ matrix.os }} - PHP ${{ matrix.php }} - ${{ matrix.dependency_version }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: composer:v2 + coverage: none + + - name: Install PHP dependencies + run: composer update --${{ matrix.dependency_version }} --no-interaction --prefer-dist --optimize-autoloader + + - name: Run tests + run: ./vendor/bin/phpunit --testdox diff --git a/composer.json b/composer.json index 9d2818e0..5ae966c2 100644 --- a/composer.json +++ b/composer.json @@ -1,31 +1,40 @@ { + "prefer-stable": true, "require": { - "json-mapper/json-mapper": "^2.21", - "symfony/event-dispatcher": "^7.0", - "symfony/filesystem": "^7.0", - "symfony/process": "^7.0", - "symfony/http-client": "^7.0", - "symfony/http-kernel": "^7.0", - "pimple/pimple": "^3.0", - "psr/simple-cache": "^3.0", - "opis/json-schema": "^2.3" + "json-mapper/json-mapper": "*", + "symfony/event-dispatcher": "*", + "symfony/filesystem": "*", + "symfony/process": "*", + "symfony/http-client": "*", + "symfony/http-kernel": "*", + "pimple/pimple": "*", + "psr/simple-cache": "*", + "opis/json-schema": "*" }, "require-dev": { - "pestphp/pest": "^2.33", - "nette/php-generator": "^4.1", - "jane-php/json-schema": "^7.6", - "bamarni/composer-bin-plugin": "^1.8" + "phpunit/phpunit": "*", + "squizlabs/php_codesniffer":"*", + "nette/php-generator": "*", + "jane-php/json-schema": "*", + "bamarni/composer-bin-plugin": "*", + "wp-coding-standards/wpcs": "3.0" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "allow-plugins": { - "pestphp/pest-plugin": true, "php-http/discovery": true, - "bamarni/composer-bin-plugin": true + "bamarni/composer-bin-plugin": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "platform": { + "php": "7.4" } }, "autoload": { + "classmap": [ + "src/" + ], "psr-4": { "WordPress\\": "src/WordPress", "Symfony\\Component\\Process\\": "vendor/symfony/process" @@ -35,5 +44,8 @@ "src/WordPress/Zip/functions.php", "src/WordPress/Streams/stream_str_replace.php" ] + }, + "scripts": { + "phpcs": "phpcs --standard=WordPress" } } diff --git a/composer.lock b/composer.lock index 79705992..e2fb007b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f70fd8a5043c08bdc0f94e0b5bbb93c0", + "content-hash": "b74762c3eed483809953e21464cf1760", "packages": [ { "name": "json-mapper/json-mapper", @@ -439,20 +439,20 @@ }, { "name": "psr/cache", - "version": "3.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -472,7 +472,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -482,33 +482,28 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "source": "https://github.com/php-fig/cache/tree/master" }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", - "version": "2.0.2", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -535,9 +530,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -591,30 +586,30 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -635,31 +630,31 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "psr/simple-cache", - "version": "3.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -674,7 +669,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -686,63 +681,64 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + "source": "https://github.com/php-fig/simple-cache/tree/master" }, - "time": "2021-10-29T13:26:27+00:00" + "time": "2017-10-23T01:57:42+00:00" }, { "name": "symfony/cache", - "version": "v6.4.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "49f8cdee544a621a621cd21b6cda32a38926d310" + "reference": "a30f316214d908cf5874f700f3f3fb29ceee91ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/49f8cdee544a621a621cd21b6cda32a38926d310", - "reference": "49f8cdee544a621a621cd21b6cda32a38926d310", + "url": "https://api.github.com/repos/symfony/cache/zipball/a30f316214d908cf5874f700f3f3fb29ceee91ba", + "reference": "a30f316214d908cf5874f700f3f3fb29ceee91ba", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^2.0|^3.0", + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6|^7.0" + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "conflict": { "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, - "classmap": [ - "Traits/ValueWrapper.php" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -768,7 +764,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.3" + "source": "https://github.com/symfony/cache/tree/v5.4.36" }, "funding": [ { @@ -784,30 +780,33 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-02-19T13:08:14+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778" + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^3.0" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -844,7 +843,74 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2" + }, + "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": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-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/v2.5.2" }, "funding": [ { @@ -860,35 +926,31 @@ "type": "tidelift" } ], - "time": "2023-09-25T12:52:38+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/error-handler", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "9441608b79577176b6d8e44012cc3d20b4b45242" + "reference": "90b1d7799bfc1b3ed5f902e8b334eeb7dba537a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/9441608b79577176b6d8e44012cc3d20b4b45242", - "reference": "9441608b79577176b6d8e44012cc3d20b4b45242", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/90b1d7799bfc1b3ed5f902e8b334eeb7dba537a1", + "reference": "90b1d7799bfc1b3ed5f902e8b334eeb7dba537a1", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -919,7 +981,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/v7.0.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.36" }, "funding": [ { @@ -935,43 +997,48 @@ "type": "tidelift" } ], - "time": "2024-01-29T15:41:16+00:00" + "time": "2024-02-22T11:40:53+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.0.3", + "version": "v5.4.35", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" + "reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7a69a85c7ea5bdd1e875806a99c51a87d3a74b38", + "reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/service-contracts": "<2.5" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "autoload": { @@ -999,7 +1066,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.35" }, "funding": [ { @@ -1015,30 +1082,33 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-01-23T13:51:25+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1075,7 +1145,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" }, "funding": [ { @@ -1091,26 +1161,27 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/filesystem", - "version": "v7.0.3", + "version": "v5.4.35", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" + "reference": "5a553607d4ffbfa9c0ab62facadea296c9db7086" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/5a553607d4ffbfa9c0ab62facadea296c9db7086", + "reference": "5a553607d4ffbfa9c0ab62facadea296c9db7086", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -1138,7 +1209,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.3" + "source": "https://github.com/symfony/filesystem/tree/v5.4.35" }, "funding": [ { @@ -1154,37 +1225,36 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-01-23T13:51:25+00:00" }, { "name": "symfony/http-client", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada" + "reference": "3e147c34ce44644f7bf7c2b8c8ecf76c0aac94b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/3d2605c07cd14aec294f72f5bf8147702f7a5ada", - "reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada", + "url": "https://api.github.com/repos/symfony/http-client/zipball/3e147c34ce44644f7bf7c2b8c8ecf76c0aac94b9", + "reference": "3e147c34ce44644f7bf7c2b8c8ecf76c0aac94b9", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", "psr/log": "^1|^2|^3", - "symfony/http-client-contracts": "^3", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.4" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-client-contracts": "^2.4", + "symfony/polyfill-php73": "^1.11", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.0|^2|^3" }, "provide": { "php-http/async-client-implementation": "*", "php-http/client-implementation": "*", "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "3.0" + "symfony/http-client-implementation": "2.4" }, "require-dev": { "amphp/amp": "^2.5", @@ -1194,12 +1264,12 @@ "guzzlehttp/promises": "^1.4", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", + "php-http/message-factory": "^1.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -1230,7 +1300,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.0.3" + "source": "https://github.com/symfony/http-client/tree/v5.4.36" }, "funding": [ { @@ -1246,29 +1316,32 @@ "type": "tidelift" } ], - "time": "2024-01-29T15:41:16+00:00" + "time": "2024-02-14T15:13:37+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "1ee70e699b41909c209a0c930f11034b93578654" + "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", - "reference": "1ee70e699b41909c209a0c930f11034b93578654", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", + "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1278,10 +1351,7 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1308,7 +1378,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2" }, "funding": [ { @@ -1324,40 +1394,39 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2022-04-12T15:48:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.0.3", + "version": "v5.4.35", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f24e2568376e98978022fd09ce45e2dd049e67c8" + "reference": "f2ab692a22aef1cd54beb893aa0068bdfb093928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f24e2568376e98978022fd09ce45e2dd049e67c8", - "reference": "f24e2568376e98978022fd09ce45e2dd049e67c8", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f2ab692a22aef1cd54beb893aa0068bdfb093928", + "reference": "f2ab692a22aef1cd54beb893aa0068bdfb093928", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "autoload": { @@ -1385,7 +1454,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.0.3" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.35" }, "funding": [ { @@ -1401,75 +1470,75 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-01-23T13:51:25+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6352029d6667e8ac5b54aae95afe10b2706b31ac" + "reference": "63a872e01fd70802b77023e2f5924170c99b2825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6352029d6667e8ac5b54aae95afe10b2706b31ac", - "reference": "6352029d6667e8ac5b54aae95afe10b2706b31ac", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/63a872e01fd70802b77023e2f5924170c99b2825", + "reference": "63a872e01fd70802b77023e2f5924170c99b2825", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/polyfill-ctype": "^1.8" + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" }, "type": "library", "autoload": { @@ -1497,7 +1566,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.0.3" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.36" }, "funding": [ { @@ -1513,7 +1582,7 @@ "type": "tidelift" } ], - "time": "2024-01-31T07:32:56+00:00" + "time": "2024-02-27T06:22:59+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1831,39 +1900,30 @@ "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.29.0", + "name": "symfony/process", + "version": "v5.4.36", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + "url": "https://github.com/symfony/process.git", + "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "url": "https://api.github.com/repos/symfony/process/zipball/4fdf34004f149cc20b2f51d7d119aa500caad975", + "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Component\\Process\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1872,24 +1932,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + "source": "https://github.com/symfony/process/tree/v5.4.36" }, "funding": [ { @@ -1905,33 +1959,37 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-02-12T15:49:53+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.1", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, + "suggest": { + "symfony/service-implementation": "" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1941,10 +1999,7 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1971,7 +2026,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -1987,36 +2042,42 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a7a061abbf6fe3d4a79032cbc5149a4d65a10234" + "reference": "2e9c2b11267119d9c90d6b3fdce5e4e9f15e2e90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a7a061abbf6fe3d4a79032cbc5149a4d65a10234", - "reference": "a7a061abbf6fe3d4a79032cbc5149a4d65a10234", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2e9c2b11267119d9c90d6b3fdce5e4e9f15e2e90", + "reference": "2e9c2b11267119d9c90d6b3fdce5e4e9f15e2e90", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<4.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^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" }, "bin": [ "Resources/bin/var-dump-server" @@ -2054,7 +2115,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.0.3" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.36" }, "funding": [ { @@ -2070,27 +2131,28 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-02-15T11:19:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.3", + "version": "v5.4.35", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8" + "reference": "abb0a151b62d6b07e816487e20040464af96cae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", - "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7", + "reference": "abb0a151b62d6b07e816487e20040464af96cae7", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/var-dumper": "^6.4|^7.0" + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "autoload": { @@ -2123,12 +2185,10 @@ "export", "hydrate", "instantiate", - "lazy-loading", - "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.3" + "source": "https://github.com/symfony/var-exporter/tree/v5.4.35" }, "funding": [ { @@ -2144,7 +2204,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-01-23T13:51:25+00:00" } ], "packages-dev": [ @@ -2206,57 +2266,39 @@ "time": "2022-10-31T08:38:03+00:00" }, { - "name": "brianium/paratest", - "version": "v7.4.3", + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec" + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "4be43904336affa5c2f70744a348312336afd0da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", - "reference": "64fcfd0e28a6b8078a19dbf9127be2ee645b92ec", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", + "reference": "4be43904336affa5c2f70744a348312336afd0da", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.1.0", - "jean85/pretty-package-versions": "^2.0.5", - "php": "~8.2.0 || ~8.3.0", - "phpunit/php-code-coverage": "^10.1.11 || ^11.0.0", - "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", - "phpunit/php-timer": "^6.0.0 || ^7.0.0", - "phpunit/phpunit": "^10.5.9 || ^11.0.3", - "sebastian/environment": "^6.0.1 || ^7.0.0", - "symfony/console": "^6.4.3 || ^7.0.3", - "symfony/process": "^6.4.3 || ^7.0.3" + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { - "doctrine/coding-standard": "^12.0.0", - "ext-pcov": "*", - "ext-posix": "*", - "phpstan/phpstan": "^1.10.58", - "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-phpunit": "^1.3.15", - "phpstan/phpstan-strict-rules": "^1.5.2", - "squizlabs/php_codesniffer": "^3.9.0", - "symfony/filesystem": "^6.4.3 || ^7.0.3" + "composer/composer": "*", + "ext-json": "*", + "ext-zip": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, - "bin": [ - "bin/paratest", - "bin/paratest.bat", - "bin/paratest_for_phpstorm" - ], - "type": "library", "autoload": { "psr-4": { - "ParaTest\\": [ - "src/" - ] + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2265,86 +2307,41 @@ ], "authors": [ { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" }, { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" } ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.4.3" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2024-02-20T07:24:02+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "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" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2023-01-05T11:28:13+00:00" }, { "name": "doctrine/inflector", @@ -2438,37 +2435,36 @@ "time": "2024-02-18T20:23:39+00:00" }, { - "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "name": "doctrine/instantiator", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" + "doctrine/coding-standard": "^9 || ^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" }, "type": "library", "autoload": { "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2477,133 +2473,72 @@ ], "authors": [ { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" } ], - "description": "Tiny utility to get the number of CPU cores.", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ - "CPU", - "core" + "constructor", + "instantiate" ], "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-02-07T09:43:46+00:00" - }, - { - "name": "filp/whoops", - "version": "2.15.4", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" - }, - "funding": [ + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, { - "url": "https://github.com/denis-sokolov", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" } ], - "time": "2023-11-03T12:00:00+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "jane-php/json-schema", - "version": "v7.6.0", + "version": "v7.5.5", "source": { "type": "git", "url": "https://github.com/janephp/json-schema.git", - "reference": "5cd54d4cedd7aabb02037cc5114063149f437ca9" + "reference": "283e7ae383cef1dda5f284987201e1facb050ab4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/janephp/json-schema/zipball/5cd54d4cedd7aabb02037cc5114063149f437ca9", - "reference": "5cd54d4cedd7aabb02037cc5114063149f437ca9", + "url": "https://api.github.com/repos/janephp/json-schema/zipball/283e7ae383cef1dda5f284987201e1facb050ab4", + "reference": "283e7ae383cef1dda5f284987201e1facb050ab4", "shasum": "" }, "require": { "doctrine/inflector": "^1.4 || ^2.0", "ext-json": "*", - "jane-php/json-schema-runtime": "^7.5", - "nikic/php-parser": "^4.18", - "php": "^8.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/serializer": "^5.4 || ^6.4 || ^7.0", - "symfony/validator": "^5.4 || ^6.4 || ^7.0", - "symfony/var-dumper": "^5.4 || ^6.4 || ^7.0", - "symfony/yaml": "^5.4 || ^6.4 || ^7.0" + "jane-php/json-schema-runtime": "^7.0", + "nikic/php-parser": "^4.0", + "php": "^7.2 || ^8.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4 || ^5.0 || ^6.0", + "symfony/serializer": "^4.4 || ^5.0 || ^6.0", + "symfony/validator": "^5.1 || ^6.0", + "symfony/var-dumper": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "~4.4.9 || ^5.0 || ^6.0" }, "conflict": { "nikic/php-parser": "<4.0.4", "symfony/framework-bundle": "5.1.0" }, "require-dev": { - "phpunit/phpunit": "^8.5", - "symfony/finder": "^5.4 || ^6.4 || ^7.0" + "phpunit/phpunit": "^8.0", + "symfony/finder": "^4.4 || ^5.0 || ^6.0" }, "suggest": { "friendsofphp/php-cs-fixer": "Allow to automatically fix cs on generated code for better visualisation" @@ -2641,37 +2576,37 @@ ], "description": "Generate a serializable / deserializable object model given a json schema", "support": { - "source": "https://github.com/janephp/json-schema/tree/v7.6.0" + "source": "https://github.com/janephp/json-schema/tree/v7.5.5" }, - "time": "2024-01-31T09:18:22+00:00" + "time": "2023-11-20T09:16:59+00:00" }, { "name": "jane-php/json-schema-runtime", - "version": "v7.6.0", + "version": "v7.5.5", "source": { "type": "git", "url": "https://github.com/janephp/json-schema-runtime.git", - "reference": "658c68abf7e429db2ae71afe9e7a6a5d43d5d247" + "reference": "02e5a960f5e6db8cba1f711ca10a0d589174402f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/janephp/json-schema-runtime/zipball/658c68abf7e429db2ae71afe9e7a6a5d43d5d247", - "reference": "658c68abf7e429db2ae71afe9e7a6a5d43d5d247", + "url": "https://api.github.com/repos/janephp/json-schema-runtime/zipball/02e5a960f5e6db8cba1f711ca10a0d589174402f", + "reference": "02e5a960f5e6db8cba1f711ca10a0d589174402f", "shasum": "" }, "require": { "ext-json": "*", - "league/uri": "^6.7.2 || ^7.4", - "php": "^8.0", + "league/uri": "^6.0 || ^7.0", + "php": "^7.2 || ^8.0", "php-jsonpointer/php-jsonpointer": "^3.0 || ^4.0", - "symfony/serializer": "^5.4 || ^6.4 || ^7.0", - "symfony/yaml": "^5.4 || ^6.4 || ^7.0" + "symfony/serializer": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "~4.4.9 || ^5.0 || ^6.0" }, "conflict": { "symfony/framework-bundle": "5.1.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^8.0" }, "type": "library", "extra": { @@ -2703,109 +2638,59 @@ ], "description": "Jane runtime Library", "support": { - "source": "https://github.com/janephp/json-schema-runtime/tree/v7.6.0" + "source": "https://github.com/janephp/json-schema-runtime/tree/v7.5.5" }, - "time": "2024-01-31T09:18:22+00:00" + "time": "2023-09-08T13:25:01+00:00" }, { - "name": "jean85/pretty-package-versions", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", - "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.17", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^0.12.66", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" - }, - "time": "2021-10-08T21:21:46+00:00" - }, - { - "name": "league/uri", - "version": "7.4.0", + "name": "league/uri", + "version": "6.7.2", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" + "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/d3b50812dd51f3fbf176344cc2981db03d10fe06", + "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.3", - "php": "^8.1" + "ext-json": "*", + "league/uri-interfaces": "^2.3", + "php": "^7.4 || ^8.0", + "psr/http-message": "^1.0" }, "conflict": { "league/uri-schemes": "^1.0" }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.3.2", + "nyholm/psr7": "^1.5", + "php-http/psr7-integration-tests": "^1.1", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.5.10", + "psr/http-factory": "^1.0" + }, "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "ext-fileinfo": "Needed to create Data URI from a filepath", + "ext-intl": "Needed to improve host validation", + "league/uri-components": "Needed to easily manipulate URI objects", + "psr/http-factory": "Needed to use the URI factory" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "6.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "League\\Uri\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2845,8 +2730,8 @@ "support": { "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.0" + "issues": "https://github.com/thephpleague/uri/issues", + "source": "https://github.com/thephpleague/uri/tree/6.7.2" }, "funding": [ { @@ -2854,44 +2739,46 @@ "type": "github" } ], - "time": "2023-12-01T06:24:25+00:00" + "time": "2022-09-13T19:50:42+00:00" }, { "name": "league/uri-interfaces", - "version": "7.4.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-factory": "^1", - "psr/http-message": "^1.1 || ^2.0" + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19", + "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan-phpunit": "^0.12.19", + "phpstan/phpstan-strict-rules": "^0.12.9", + "phpunit/phpunit": "^8.5.15 || ^9.5" }, "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "ext-intl": "to use the IDNA feature", + "symfony/intl": "to use the IDNA feature via Symfony Polyfill" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "League\\Uri\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2905,32 +2792,17 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", - "homepage": "https://uri.thephpleague.com", + "description": "Common interface for URI representation", + "homepage": "http://github.com/thephpleague/uri-interfaces", "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", "rfc3986", "rfc3987", - "rfc6570", "uri", - "url", - "ws" + "url" ], "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0" + "issues": "https://github.com/thephpleague/uri-interfaces/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" }, "funding": [ { @@ -2938,7 +2810,7 @@ "type": "github" } ], - "time": "2023-11-24T15:40:42+00:00" + "time": "2021-06-28T04:27:21+00:00" }, { "name": "myclabs/deep-copy", @@ -3001,36 +2873,35 @@ }, { "name": "nette/php-generator", - "version": "v4.1.3", + "version": "v3.6.9", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "08ab9bff22ae34fe4e1d2fe8ba16b3770ea2459f" + "reference": "d31782f7bd2ae84ad06f863391ec3fb77ca4d0a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/08ab9bff22ae34fe4e1d2fe8ba16b3770ea2459f", - "reference": "08ab9bff22ae34fe4e1d2fe8ba16b3770ea2459f", + "url": "https://api.github.com/repos/nette/php-generator/zipball/d31782f7bd2ae84ad06f863391ec3fb77ca4d0a6", + "reference": "d31782f7bd2ae84ad06f863391ec3fb77ca4d0a6", "shasum": "" }, "require": { - "nette/utils": "^3.2.9 || ^4.0", - "php": "8.0 - 8.3" + "nette/utils": "^3.1.2", + "php": ">=7.2 <8.3" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", "nette/tester": "^2.4", - "nikic/php-parser": "^4.18 || ^5.0", - "phpstan/phpstan": "^1.0", + "nikic/php-parser": "^4.13", + "phpstan/phpstan": "^0.12", "tracy/tracy": "^2.8" }, "suggest": { - "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" + "nikic/php-parser": "to use ClassType::withBodiesFrom() & GlobalFunction::withBodyFrom()" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "3.6-dev" } }, "autoload": { @@ -3054,7 +2925,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.1 features.", "homepage": "https://nette.org", "keywords": [ "code", @@ -3064,36 +2935,35 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.1.3" + "source": "https://github.com/nette/php-generator/tree/v3.6.9" }, - "time": "2024-01-18T17:44:20+00:00" + "time": "2022-10-04T11:49:47+00:00" }, { "name": "nette/utils", - "version": "v4.0.4", + "version": "v3.2.10", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", "shasum": "" }, "require": { - "php": ">=8.0 <8.4" + "php": ">=7.2 <8.4" }, "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" + "nette/di": "<3.0.6" }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", + "nette/tester": "~2.0", "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" + "tracy/tracy": "^2.3" }, "suggest": { "ext-gd": "to use Image", @@ -3101,12 +2971,13 @@ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -3150,443 +3021,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.4" - }, - "time": "2024-01-17T16:50:36+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357", - "reference": "0d655ffbf3edf9b366e0eea5ab9c7871e0ab3357", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.15.4", - "nunomaduro/termwind": "^2.0.0", - "php": "^8.2.0", - "symfony/console": "^7.0.2" - }, - "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" - }, - "require-dev": { - "larastan/larastan": "^2.8.1", - "laravel/framework": "^11.0.0", - "laravel/pint": "^1.13.8", - "laravel/sail": "^1.27.0", - "laravel/sanctum": "^4.0.0", - "laravel/tinker": "^2.9.0", - "orchestra/testbench-core": "^9.0.0", - "pestphp/pest": "^2.31.0 || ^3.0.0", - "sebastian/environment": "^6.0.1 || ^7.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, - "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-01-12T13:38:24+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.0.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "e534f661e09b712e51971e2cf0f662f83116d5ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e534f661e09b712e51971e2cf0f662f83116d5ad", - "reference": "e534f661e09b712e51971e2cf0f662f83116d5ad", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.0.1" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^2.1.0", - "illuminate/console": "^11.0.0", - "laravel/pint": "^1.13.7", - "mockery/mockery": "^1.6.6", - "pestphp/pest": "^2.28.0", - "phpstan/phpstan": "^1.10.48", - "phpstan/phpstan-strict-rules": "^1.5.2", - "symfony/var-dumper": "^7.0.0", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.0.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2023-12-08T16:23:40+00:00" - }, - { - "name": "pestphp/pest", - "version": "v2.34.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "602b696348efdf4da83c9719de3062462cc1d146" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/602b696348efdf4da83c9719de3062462cc1d146", - "reference": "602b696348efdf4da83c9719de3062462cc1d146", - "shasum": "" - }, - "require": { - "brianium/paratest": "^7.3.1", - "nunomaduro/collision": "^7.10.0|^8.1.0", - "nunomaduro/termwind": "^1.15.1|^2.0.0", - "pestphp/pest-plugin": "^2.1.1", - "pestphp/pest-plugin-arch": "^2.7.0", - "php": "^8.1.0", - "phpunit/phpunit": "^10.5.10" - }, - "conflict": { - "phpunit/phpunit": ">10.5.10", - "sebastian/exporter": "<5.1.0", - "webmozart/assert": "<1.11.0" - }, - "require-dev": { - "pestphp/pest-dev-tools": "^2.16.0", - "pestphp/pest-plugin-type-coverage": "^2.8.0", - "symfony/process": "^6.4.0|^7.0.3" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Plugins\\Bail", - "Pest\\Plugins\\Cache", - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Environment", - "Pest\\Plugins\\Help", - "Pest\\Plugins\\Memory", - "Pest\\Plugins\\Only", - "Pest\\Plugins\\Printer", - "Pest\\Plugins\\ProcessIsolation", - "Pest\\Plugins\\Profile", - "Pest\\Plugins\\Retry", - "Pest\\Plugins\\Snapshot", - "Pest\\Plugins\\Verbose", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Parallel" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "The elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.34.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-02-17T10:06:53+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e05d2859e08c2567ee38ce8b005d044e72648c0b", - "reference": "e05d2859e08c2567ee38ce8b005d044e72648c0b", - "shasum": "" + "source": "https://github.com/nette/utils/tree/v3.2.10" }, - "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.2.2", - "php": "^8.1" - }, - "conflict": { - "pestphp/pest": "<2.2.3" - }, - "require-dev": { - "composer/composer": "^2.5.8", - "pestphp/pest": "^2.16.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v2.1.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-08-22T08:40:06+00:00" - }, - { - "name": "pestphp/pest-plugin-arch", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/d23b2d7498475354522c3818c42ef355dca3fcda", - "reference": "d23b2d7498475354522c3818c42ef355dca3fcda", - "shasum": "" - }, - "require": { - "nunomaduro/collision": "^7.10.0|^8.1.0", - "pestphp/pest-plugin": "^2.1.1", - "php": "^8.1", - "ta-tikoma/phpunit-architecture-test": "^0.8.4" - }, - "require-dev": { - "pestphp/pest": "^2.33.0", - "pestphp/pest-dev-tools": "^2.16.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Arch\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Arch\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Arch plugin for Pest PHP.", - "keywords": [ - "arch", - "architecture", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v2.7.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-01-26T09:46:42+00:00" + "time": "2023-07-30T15:38:18+00:00" }, { "name": "phar-io/manifest", @@ -3756,232 +3193,183 @@ "time": "2022-01-11T14:28:07+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpcsstandards/phpcsextra", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=5.4", + "phpcsstandards/phpcsutils": "^1.0.9", + "squizlabs/php_codesniffer": "^3.8.0" }, - "type": "library", + "require-dev": { + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "phpcsstandards/phpcsdevtools": "^1.2.1", + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "standards", "static analysis" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", + "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSExtra" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2023-12-08T16:49:07+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "name": "phpcsstandards/phpcsutils", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/908247bc65010c7b7541a9551e002db12e9dae70", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.8.0 || 4.0.x-dev@dev" }, "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "ext-filter": "*", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "PHPCSUtils/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "A suite of utility functions for use with PHP_CodeSniffer", + "homepage": "https://phpcsutils.com/", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "phpcs3", + "standards", + "static analysis", + "tokens", + "utility" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.25.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" - }, - "dist": { - "type": "zip", - "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", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" + "docs": "https://phpcsutils.com/", + "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", + "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSUtils" }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" ], - "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.25.0" - }, - "time": "2024-01-04T17:06:16+00:00" + "time": "2023-12-08T14:50:00+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.11", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { @@ -3989,18 +3377,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -4009,7 +3397,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -4038,7 +3426,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -4046,32 +3434,32 @@ "type": "github" } ], - "time": "2023-12-21T15:38:30+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4098,8 +3486,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -4107,28 +3494,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcntl": "*" @@ -4136,7 +3523,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -4162,7 +3549,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, "funding": [ { @@ -4170,32 +3557,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4221,8 +3608,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { @@ -4230,32 +3616,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -4281,7 +3667,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { @@ -4289,23 +3675,24 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.10", + "version": "9.6.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c" + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd", + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -4315,26 +3702,27 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "php": ">=7.3", + "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", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -4342,7 +3730,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -4374,7 +3762,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17" }, "funding": [ { @@ -4387,78 +3775,23 @@ }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-02-04T09:07:51+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" + "type": "tidelift" + } ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" - }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-02-23T13:14:51+00:00" }, { "name": "psr/http-message", - "version": "2.0", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", "shasum": "" }, "require": { @@ -4467,7 +3800,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -4482,7 +3815,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -4496,34 +3829,34 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" + "source": "https://github.com/php-fig/http-message/tree/1.1" }, - "time": "2023-04-04T09:54:51+00:00" + "time": "2023-04-04T09:50:52+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.0", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4546,7 +3879,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -4554,32 +3887,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:15+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4602,7 +3935,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { @@ -4610,32 +3943,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4657,7 +3990,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { @@ -4665,36 +3998,34 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4733,8 +4064,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -4742,33 +4072,33 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4791,8 +4121,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -4800,33 +4129,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "5.1.0", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^9.3", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4858,8 +4187,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -4867,27 +4195,27 @@ "type": "github" } ], - "time": "2023-12-22T10:55:06+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "6.0.1", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -4895,7 +4223,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4914,7 +4242,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4922,8 +4250,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -4931,34 +4258,34 @@ "type": "github" } ], - "time": "2023-04-11T05:39:26+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.1", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5000,8 +4327,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -5009,35 +4335,38 @@ "type": "github" } ], - "time": "2023-09-24T13:22:09+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.1", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -5062,8 +4391,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -5071,33 +4399,33 @@ "type": "github" } ], - "time": "2023-07-19T07:19:23+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -5120,8 +4448,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -5129,34 +4456,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5178,7 +4505,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { @@ -5186,32 +4513,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5233,7 +4560,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { @@ -5241,32 +4568,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5296,7 +4623,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -5304,32 +4631,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { - "name": "sebastian/type", - "version": "4.0.0", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5344,15 +4671,14 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, "funding": [ { @@ -5360,29 +4686,32 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "sebastian/version", - "version": "4.0.1", + "name": "sebastian/type", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -5401,11 +4730,11 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -5413,192 +4742,194 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { - "name": "symfony/console", - "version": "v7.0.3", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c5010d50f1ee4b25cfa0201d9915cf1b14071456" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c5010d50f1ee4b25cfa0201d9915cf1b14071456", - "reference": "c5010d50f1ee4b25cfa0201d9915cf1b14071456", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "php": ">=7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "source": "https://github.com/symfony/console/tree/v7.0.3" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "name": "squizlabs/php_codesniffer", + "version": "3.9.0", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/d63cee4890a8afaf86a22e51ad4d97c91dd4579b", + "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b", "shasum": "" }, "require": { - "php": ">=8.1" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "3.x-dev" } }, - "autoload": { - "files": [ - "function.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Greg Sherwood", + "role": "Former lead" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "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" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/jrfnl", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-02-16T15:06:51+00:00" }, { - "name": "symfony/finder", - "version": "v7.0.0", + "name": "symfony/console", + "version": "v5.4.36", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" + "url": "https://github.com/symfony/console.git", + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "url": "https://api.github.com/repos/symfony/console/zipball/39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" + "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5618,10 +4949,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Finds files and directories via an intuitive fluent interface", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v7.0.0" + "source": "https://github.com/symfony/console/tree/v5.4.36" }, "funding": [ { @@ -5637,25 +4974,27 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:59:56+00:00" + "time": "2024-02-20T16:33:57+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.0.0", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "700ff4096e346f54cb628ea650767c8130f1001f" + "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f", - "reference": "700ff4096e346f54cb628ea650767c8130f1001f", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", + "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -5688,7 +5027,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.21" }, "funding": [ { @@ -5704,7 +5043,7 @@ "type": "tidelift" } ], - "time": "2023-08-08T10:20:21+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -5866,29 +5205,38 @@ "time": "2024-01-29T20:11:03+00:00" }, { - "name": "symfony/process", - "version": "v7.0.3", + "name": "symfony/polyfill-php81", + "version": "v1.29.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "937a195147e0c27b2759ade834169ed006d0bc74" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/937a195147e0c27b2759ade834169ed006d0bc74", - "reference": "937a195147e0c27b2759ade834169ed006d0bc74", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5897,18 +5245,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Executes commands in sub-processes", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/process/tree/v7.0.3" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -5924,58 +5278,66 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/serializer", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "6e83031c481e50b6f28e72531660341f1f120e6f" + "reference": "05137a513f4c5a5e56ffbcf53847a93284b49f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/6e83031c481e50b6f28e72531660341f1f120e6f", - "reference": "6e83031c481e50b6f28e72531660341f1f120e6f", + "url": "https://api.github.com/repos/symfony/serializer/zipball/05137a513f4c5a5e56ffbcf53847a93284b49f67", + "reference": "05137a513f4c5a5e56ffbcf53847a93284b49f67", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "conflict": { + "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<6.4", - "symfony/property-access": "<6.4", - "symfony/property-info": "<6.4", - "symfony/uid": "<6.4", - "symfony/validator": "<6.4", - "symfony/yaml": "<6.4" + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4.24|>=6,<6.2.11", + "symfony/uid": "<5.3", + "symfony/yaml": "<4.4" }, "require-dev": { + "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "seld/jsonlint": "^1.10", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4.26|^6.3", + "symfony/property-info": "^5.4.24|^6.2.11", + "symfony/uid": "^5.3|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0", + "symfony/var-exporter": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/var-exporter": "For using the metadata compiler.", + "symfony/yaml": "For using the default YAML mapping loader." }, "type": "library", "autoload": { @@ -6003,7 +5365,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.0.3" + "source": "https://github.com/symfony/serializer/tree/v5.4.36" }, "funding": [ { @@ -6019,38 +5381,38 @@ "type": "tidelift" } ], - "time": "2024-01-30T08:34:29+00:00" + "time": "2024-02-22T18:40:43+00:00" }, { "name": "symfony/string", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "524aac4a280b90a4420d8d6a040718d0586505ac" + "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/524aac4a280b90a4420d8d6a040718d0586505ac", - "reference": "524aac4a280b90a4420d8d6a040718d0586505ac", + "url": "https://api.github.com/repos/symfony/string/zipball/4e232c83622bd8cd32b794216aa29d0d266d353b", + "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, "conflict": { - "symfony/translation-contracts": "<2.5" + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -6089,7 +5451,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.3" + "source": "https://github.com/symfony/string/tree/v5.4.36" }, "funding": [ { @@ -6105,29 +5467,32 @@ "type": "tidelift" } ], - "time": "2024-01-29T15:41:16+00:00" + "time": "2024-02-01T08:49:30+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.1", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "06450585bf65e978026bda220cdebca3f867fde7" + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", - "reference": "06450585bf65e978026bda220cdebca3f867fde7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6137,10 +5502,7 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6167,7 +5529,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" }, "funding": [ { @@ -6183,57 +5545,75 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/validator", - "version": "v7.0.3", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "03b0c75d7d3df1ef9a0fd9fb8db1e86f83ffa2bb" + "reference": "e80028e0f7814a8824fc1f474f1566a7bddceec5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/03b0c75d7d3df1ef9a0fd9fb8db1e86f83ffa2bb", - "reference": "03b0c75d7d3df1ef9a0fd9fb8db1e86f83ffa2bb", + "url": "https://api.github.com/repos/symfony/validator/zipball/e80028e0f7814a8824fc1f474f1566a7bddceec5", + "reference": "e80028e0f7814a8824fc1f474f1566a7bddceec5", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php83": "^1.27", - "symfony/translation-contracts": "^2.5|^3" + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/translation-contracts": "^1.1|^2|^3" }, "conflict": { + "doctrine/annotations": "<1.13", + "doctrine/cache": "<1.11", "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<7.0", - "symfony/expression-language": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/intl": "<6.4", - "symfony/property-info": "<6.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<6.4" + "symfony/dependency-injection": "<4.4", + "symfony/expression-language": "<5.1", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/property-info": "<5.3", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", + "symfony/yaml": "<4.4" }, "require-dev": { + "doctrine/annotations": "^1.13|^2", + "doctrine/cache": "^1.11|^2.0", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/translation": "^6.4.3|^7.0.3", - "symfony/yaml": "^6.4|^7.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^5.1|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/property-info": "^5.3|^6.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" }, "type": "library", "autoload": { @@ -6261,7 +5641,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.0.3" + "source": "https://github.com/symfony/validator/tree/v5.4.36" }, "funding": [ { @@ -6277,31 +5657,35 @@ "type": "tidelift" } ], - "time": "2024-01-29T15:41:16+00:00" + "time": "2024-02-21T11:39:05+00:00" }, { "name": "symfony/yaml", - "version": "v7.0.3", + "version": "v5.4.35", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" + "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e78db7f5c70a21f0417a31f414c4a95fe76c07e4", + "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^5.3|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "bin": [ "Resources/bin/yaml-lint" @@ -6332,7 +5716,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.0.3" + "source": "https://github.com/symfony/yaml/tree/v5.4.35" }, "funding": [ { @@ -6348,66 +5732,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" - }, - { - "name": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.4", - "source": { - "type": "git", - "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18.0 || ^5.0.0", - "php": "^8.1.0", - "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0", - "symfony/finder": "^6.4.0 || ^7.0.0" - }, - "require-dev": { - "laravel/pint": "^1.13.7", - "phpstan/phpstan": "^1.10.52" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPUnit\\Architecture\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ni Shi", - "email": "futik0ma011@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Methods for testing application architecture", - "keywords": [ - "architecture", - "phpunit", - "stucture", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" - }, - "time": "2024-01-05T14:10:56+00:00" + "time": "2024-01-23T13:51:25+00:00" }, { "name": "theseer/tokenizer", @@ -6460,70 +5785,75 @@ "time": "2023-11-20T00:12:19+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "wp-coding-standards/wpcs", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", + "reference": "bb792cb331472b82c5d7f28fb9b8ec2d20f68826" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/bb792cb331472b82c5d7f28fb9b8ec2d20f68826", + "reference": "bb792cb331472b82c5d7f28fb9b8ec2d20f68826", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-filter": "*", + "ext-libxml": "*", + "ext-tokenizer": "*", + "ext-xmlreader": "*", + "php": ">=5.4", + "phpcsstandards/phpcsextra": "^1.1.0", + "phpcsstandards/phpcsutils": "^1.0.8", + "squizlabs/php_codesniffer": "^3.7.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.0", + "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "suggest": { + "ext-iconv": "For improved results", + "ext-mbstring": "For improved results" }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Contributors", + "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", "keywords": [ - "assert", - "check", - "validate" + "phpcs", + "standards", + "static analysis", + "wordpress" ], "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", + "source": "https://github.com/WordPress/WordPress-Coding-Standards", + "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2023-08-21T14:28:38+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], - "prefer-stable": false, + "prefer-stable": true, "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-overrides": { + "php": "7.4" + }, + "plugin-api-version": "2.6.0" } diff --git a/php.ini b/php.ini new file mode 100644 index 00000000..c0d5759b --- /dev/null +++ b/php.ini @@ -0,0 +1,6 @@ +memory_limit=-1 +error_reporting=-1 +log_errors_max_len=0 +zend.assertions=1 +assert.exception=1 +xdebug.show_exception_trace=0 diff --git a/phpunit.xml b/phpunit.xml index 0efd5c61..45a4851a 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,17 +1,8 @@ - + - - ./tests + + tests - - - ./Playground - - diff --git a/src/WordPress/Blueprints/BlueprintException.php b/src/WordPress/Blueprints/BlueprintException.php index ea96d7ce..a53c7dfc 100644 --- a/src/WordPress/Blueprints/BlueprintException.php +++ b/src/WordPress/Blueprints/BlueprintException.php @@ -2,6 +2,9 @@ namespace WordPress\Blueprints; -class BlueprintException extends \Exception { +use Exception; + +class BlueprintException extends Exception +{ } diff --git a/src/WordPress/Blueprints/BlueprintParser.php b/src/WordPress/Blueprints/BlueprintParser.php index e37efd87..76b98330 100644 --- a/src/WordPress/Blueprints/BlueprintParser.php +++ b/src/WordPress/Blueprints/BlueprintParser.php @@ -5,187 +5,206 @@ use Opis\JsonSchema\Errors\ErrorFormatter; use WordPress\Blueprints\Model\BlueprintBuilder; use WordPress\Blueprints\Model\DataClass\Blueprint; -use WordPress\Blueprints\Model\DataClass\WriteFileStep; -use WordPress\Blueprints\Resource\Resolver\ResourceResolverInterface; - -class BlueprintParser { - - public function __construct( - protected BlueprintValidator $validator, - protected BlueprintMapper $mapper - ) { - } - - public function parse( $rawBlueprint ) { - if ( is_string( $rawBlueprint ) ) { - return $this->fromJson( $rawBlueprint ); - } elseif ( $rawBlueprint instanceof Blueprint ) { - return $this->fromBlueprint( $rawBlueprint ); - } elseif ( $rawBlueprint instanceof BlueprintBuilder ) { - return $this->fromBlueprint( $rawBlueprint->toBlueprint() ); - } elseif ( $rawBlueprint instanceof \stdClass ) { - return $this->fromObject( $rawBlueprint ); - } - throw new \InvalidArgumentException( 'Unsupported $rawBlueprint type. Use a JSON string, a parsed JSON object, or a BlueprintBuilder instance.' ); - } - - public function fromJson( $json ) { - return $this->fromObject( json_decode( $json, false ) ); - } - - public function fromObject( object $data ) { - $result = $this->validator->validate( $data ); - if ( ! $result->isValid() ) { - print_r( ( new ErrorFormatter() )->format( $result->error() ) ); - die(); - } - - return $this->mapper->map( $data ); - } - - public function fromBlueprint( Blueprint $blueprint ) { - $result = $this->validator->validate( $blueprint ); - if ( ! $result->isValid() ) { - print_r( ( new ErrorFormatter() )->format( $result->error() ) ); -// $errorReport = [ -// "dataPointer" => $rootError->getDataPointer(), -// "schemaPointer" => $rootError->getSchemaPointer(), -// "Message" => $rootError->getMessage(), -// "Data" => $rootError->data, -// "Constraint" => $rootError->constraint, -// ]; - -// $specificError = $this->getSpecificAnyOfError( $rootError ); -// if ( $specificError ) { -// throw $specificError; -// } -// throw $rootError; - die(); - } - - return $blueprint; - } - - /** - * Narrows down ambiguous anyOf errors using the discriminator property. - * - * When one of the `anyOf` inputs doesn't match the schema, Swaggest\JsonSchema will return as many errors, - * as there are `anyOf` options. Sometimes that means 26 errors to sieve through. For example: - * - * ``` - * No valid results for oneOf { - * 0: Enum failed, enum: ["a"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[0] - * 1: Enum failed, enum: ["b"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[1] - * 2: No valid results for anyOf { - * 0: Enum failed, enum: ["c"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[0] - * 1: Enum failed, enum: ["d"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[1] - * 2: Enum failed, enum: ["e"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[2] - * } at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde] - * } at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo - * ``` - * - * It's highly impractical to reason about that much output, so we narrow down the error to the specific `anyOf` option that failed. - * - * This function uses the discriminator property to find the specific `anyOf` option that failed. - * For example, if the data looks like this: - * - * ``` - * { - * "steps": [ - * { "step": "activatePlugin", "plugin": null }, - * ] - * } - * ``` - * - * And the schema looks like this: - * - * ``` - * "StepDefinition": { - * "type": "object", - * "discriminator": { - * "propertyName": "step" - * }, - * "oneOf": [ - * { "$ref": "#/definitions/ActivatePluginStep" }, - * { "$ref": "#/definitions/ActivateThemeStep" }, - * ``` - * - * This function will go through all the errors reported by Swaggest\JsonSchema and find the one associated - * with the `ActivatePluginStep` definition, since its `step` property is set to `activatePlugin`. - * - * @param InvalidValue $e - * - * @return \Swaggest\JsonSchema\Exception\Error|void|null - */ - function getSpecificAnyOfError( InvalidValue $e ): \Throwable|null { - $subSchema = $this->getSubschema( $e->getSchemaPointer() ); - - if ( property_exists( $subSchema, '$ref' ) ) { - $discriminatedDefinition = $this->getSubschema( $subSchema->{'$ref'} ); - if ( property_exists( $discriminatedDefinition, 'discriminator' ) ) { - $discriminatorField = $discriminatedDefinition->discriminator->propertyName; - $discriminatorValue = $e->data->$discriminatorField; - - foreach ( $discriminatedDefinition->oneOf as $discriminatorOption ) { - if ( property_exists( $discriminatorOption, '$ref' ) ) { - $optionDefinition = $this->getSubschema( $discriminatorOption->{'$ref'} ); - $optionDiscriminatorValue = $optionDefinition->properties->{$discriminatorField}->const; - if ( $optionDiscriminatorValue === $discriminatorValue ) { - return $this->findSubErrorForSpecificAnyOfOption( $e->inspect(), - $discriminatorOption->{'$ref'} ); - } - } - } - } - } - } - - private function findSubErrorForSpecificAnyOfOption( \Swaggest\JsonSchema\Exception\Error $e, string $anyOfRef ) { - if ( $anyOfRef[0] === '#' ) { - $anyOfRef = substr( $anyOfRef, 1 ); - } - if ( $e->schemaPointers ) { - foreach ( $e->schemaPointers as $pointer ) { - if ( str_starts_with( $pointer, $anyOfRef ) ) { - return $e; - } - } - } - if ( ! $e->subErrors ) { - return; - } - foreach ( $e->subErrors as $subError ) { - $subError = findSubErrorForSpecificAnyOfOption( $subError, $anyOfRef ); - if ( $subError !== null ) { - return $subError; - } - } - } - - private function getSubschema( $pointer ) { - if ( $pointer[0] === '#' ) { - $pointer = substr( $pointer, 1 ); - } - if ( $pointer[0] !== '/' ) { - $pointer = substr( $pointer, 1 ); - } - $path = explode( '/', substr( $pointer, 1 ) ); - $subSchema = $this->blueprintSchema; - foreach ( $path as $key ) { - if ( is_numeric( $key ) && ! property_exists( $subSchema, $key ) ) { - foreach ( $subSchema->anyOf as $v ) { - if ( is_object( $v ) && property_exists( $v, '$ref' ) ) { - $subSchema = $v; - break; - } - } - } else { - $subSchema = $subSchema->$key; - } - } - - return $subSchema; - } - +// TODO Review class +class BlueprintParser +{ + + protected BlueprintValidator $validator; + protected BlueprintMapper $mapper; + + public function __construct( + BlueprintValidator $validator, + BlueprintMapper $mapper + ) { + $this->mapper = $mapper; + $this->validator = $validator; + } + + public function parse($rawBlueprint) + { + if (is_string($rawBlueprint)) { + return $this->fromJson($rawBlueprint); + } elseif ($rawBlueprint instanceof Blueprint) { + return $this->fromBlueprint($rawBlueprint); + } elseif ($rawBlueprint instanceof BlueprintBuilder) { + return $this->fromBlueprint($rawBlueprint->toBlueprint()); + } elseif ($rawBlueprint instanceof \stdClass) { + return $this->fromObject($rawBlueprint); + } + throw new \InvalidArgumentException( + 'Unsupported $rawBlueprint type. Use a JSON string, a parsed JSON object, or a BlueprintBuilder instance.' + ); + } + // TODO Evaluate waring: missing function's return type + public function fromJson($json) + { + // TODO Evaluate warning: 'ext-json' is missing in composer.json + return $this->fromObject(json_decode($json, false)); + } + + public function fromObject(object $data) + { + $result = $this->validator->validate($data); + if (!$result->isValid()) { + print_r((new ErrorFormatter())->format($result->error())); + die(); + } + + return $this->mapper->map($data); + } + + public function fromBlueprint(Blueprint $blueprint) + { + $result = $this->validator->validate($blueprint); + if (!$result->isValid()) { + print_r((new ErrorFormatter())->format($result->error())); +// $errorReport = [ +// "dataPointer" => $rootError->getDataPointer(), +// "schemaPointer" => $rootError->getSchemaPointer(), +// "Message" => $rootError->getMessage(), +// "Data" => $rootError->data, +// "Constraint" => $rootError->constraint, +// ]; + +// $specificError = $this->getSpecificAnyOfError( $rootError ); +// if ( $specificError ) { +// throw $specificError; +// } +// throw $rootError; + die(); + } + + return $blueprint; + } + +// /** +// * Narrows down ambiguous anyOf errors using the discriminator property. +// * +// * When one of the `anyOf` inputs doesn't match the schema, Swaggest\JsonSchema will return as many errors, +// * as there are `anyOf` options. Sometimes that means 26 errors to sieve through. For example: +// * +// * ``` +// * No valid results for oneOf { +// * 0: Enum failed, enum: ["a"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[0] +// * 1: Enum failed, enum: ["b"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[1] +// * 2: No valid results for anyOf { +// * 0: Enum failed, enum: ["c"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[0] +// * 1: Enum failed, enum: ["d"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[1] +// * 2: Enum failed, enum: ["e"], data: "f" at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde]->anyOf[2] +// * } at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo->oneOf[2]->$ref[#/cde] +// * } at #->properties:root->patternProperties[^[a-zA-Z0-9_]+$]:zoo +// * ``` +// * +// * It's highly impractical to reason about that much output, so we narrow down the error to the specific `anyOf` option that failed. +// * +// * This function uses the discriminator property to find the specific `anyOf` option that failed. +// * For example, if the data looks like this: +// * +// * ``` +// * { +// * "steps": [ +// * { "step": "activatePlugin", "plugin": null }, +// * ] +// * } +// * ``` +// * +// * And the schema looks like this: +// * +// * ``` +// * "StepDefinition": { +// * "type": "object", +// * "discriminator": { +// * "propertyName": "step" +// * }, +// * "oneOf": [ +// * { "$ref": "#/definitions/ActivatePluginStep" }, +// * { "$ref": "#/definitions/ActivateThemeStep" }, +// * ``` +// * +// * This function will go through all the errors reported by Swaggest\JsonSchema and find the one associated +// * with the `ActivatePluginStep` definition, since its `step` property is set to `activatePlugin`. +// * +// * @param InvalidValue $e +// * +// * @return Error|void|null +// */ +// function getSpecificAnyOfError(InvalidValue $e): \Throwable|null +// { +// $subSchema = $this->getSubschema($e->getSchemaPointer()); +// +// if (property_exists($subSchema, '$ref')) { +// $discriminatedDefinition = $this->getSubschema($subSchema->{'$ref'}); +// if (property_exists($discriminatedDefinition, 'discriminator')) { +// $discriminatorField = $discriminatedDefinition->discriminator->propertyName; +// $discriminatorValue = $e->data->$discriminatorField; +// +// foreach ($discriminatedDefinition->oneOf as $discriminatorOption) { +// if (property_exists($discriminatorOption, '$ref')) { +// $optionDefinition = $this->getSubschema($discriminatorOption->{'$ref'}); +// $optionDiscriminatorValue = $optionDefinition->properties->{$discriminatorField}->const; +// if ($optionDiscriminatorValue === $discriminatorValue) { +// return $this->findSubErrorForSpecificAnyOfOption( +// $e->inspect(), +// $discriminatorOption->{'$ref'} +// ); +// } +// } +// } +// } +// } +// } +// + +// TODO Review logic in this method (might've been corrupted during downgrade) + +// private function findSubErrorForSpecificAnyOfOption(Error $e, string $anyOfRef) +// { +// if ($anyOfRef[0] === '#') { +// $anyOfRef = substr($anyOfRef, 1); +// } +// if ($e->schemaPointers) { +// foreach ($e->schemaPointers as $pointer) { +// if (str_starts_with($pointer, $anyOfRef)) { +// return $e; +// } +// } +// } +// if (!$e->subErrors) { +// return $e->error; +// } +// foreach ($e->subErrors as $subError) { +// $subError = findSubErrorForSpecificAnyOfOption($subError, $anyOfRef); +// if ($subError !== null) { +// return $subError; +// } +// } +// return $e; +// } + +// private function getSubschema($pointer) +// { +// if ($pointer[0] === '#') { +// $pointer = substr($pointer, 1); +// } +// if ($pointer[0] !== '/') { +// $pointer = substr($pointer, 1); +// } +// $path = explode('/', substr($pointer, 1)); +// $subSchema = $this->blueprintSchema; +// foreach ($path as $key) { +// if (is_numeric($key) && !property_exists($subSchema, $key)) { +// foreach ($subSchema->anyOf as $v) { +// if (is_object($v) && property_exists($v, '$ref')) { +// $subSchema = $v; +// break; +// } +// } +// } else { +// $subSchema = $subSchema->$key; +// } +// } +// +// return $subSchema; +// } } diff --git a/src/WordPress/Blueprints/Compile/BlueprintCompiler.php b/src/WordPress/Blueprints/Compile/BlueprintCompiler.php index b25fb93e..84115b87 100644 --- a/src/WordPress/Blueprints/Compile/BlueprintCompiler.php +++ b/src/WordPress/Blueprints/Compile/BlueprintCompiler.php @@ -13,15 +13,19 @@ use WordPress\Blueprints\Model\DataClass\UrlResource; use WordPress\Blueprints\Model\DataClass\WordPressInstallationOptions; use WordPress\Blueprints\Model\DataClass\WriteFileStep; +use WordPress\Blueprints\Resources\Resolver\ResourceResolverInterface; use WordPress\Blueprints\Progress\Tracker; -use WordPress\Blueprints\Resource\Resolver\ResourceResolverInterface; class BlueprintCompiler { + protected $stepRunnerFactory; + protected ResourceResolverInterface $resourceResolver; public function __construct( - protected $stepRunnerFactory, - protected ResourceResolverInterface $resourceResolver + $stepRunnerFactory, + ResourceResolverInterface $resourceResolver ) { + $this->resourceResolver = $resourceResolver; + $this->stepRunnerFactory = $stepRunnerFactory; } public function compile( Blueprint $blueprint ): CompiledBlueprint { diff --git a/src/WordPress/Blueprints/ContainerBuilder.php b/src/WordPress/Blueprints/ContainerBuilder.php index f3748875..4c173dd9 100644 --- a/src/WordPress/Blueprints/ContainerBuilder.php +++ b/src/WordPress/Blueprints/ContainerBuilder.php @@ -21,7 +21,6 @@ use WordPress\Blueprints\Model\DataClass\InstallSqliteIntegrationStep; use WordPress\Blueprints\Model\DataClass\InstallThemeStep; use WordPress\Blueprints\Model\DataClass\MvStep; -use WordPress\Blueprints\Model\DataClass\RmDirStep; use WordPress\Blueprints\Model\DataClass\RmStep; use WordPress\Blueprints\Model\DataClass\RunPHPStep; use WordPress\Blueprints\Model\DataClass\RunSQLStep; @@ -32,11 +31,11 @@ use WordPress\Blueprints\Model\DataClass\WPCLIStep; use WordPress\Blueprints\Model\DataClass\WriteFileStep; use WordPress\Blueprints\BlueprintMapper; -use WordPress\Blueprints\Resource\Resolver\FilesystemResourceResolver; -use WordPress\Blueprints\Resource\Resolver\InlineResourceResolver; -use WordPress\Blueprints\Resource\Resolver\ResourceResolverCollection; -use WordPress\Blueprints\Resource\Resolver\UrlResourceResolver; -use WordPress\Blueprints\Resource\ResourceManager; +use WordPress\Blueprints\Resources\Resolver\FilesystemResourceResolver; +use WordPress\Blueprints\Resources\Resolver\InlineResourceResolver; +use WordPress\Blueprints\Resources\Resolver\ResourceResolverCollection; +use WordPress\Blueprints\Resources\Resolver\UrlResourceResolver; +use WordPress\Blueprints\Resources\ResourceManager; use WordPress\Blueprints\Runner\Blueprint\BlueprintRunner; use WordPress\Blueprints\Runner\Step\ActivatePluginStepRunner; use WordPress\Blueprints\Runner\Step\ActivateThemeStepRunner; @@ -50,7 +49,6 @@ use WordPress\Blueprints\Runner\Step\InstallSqliteIntegrationStepRunner; use WordPress\Blueprints\Runner\Step\InstallThemeStepRunner; use WordPress\Blueprints\Runner\Step\MvStepRunner; -use WordPress\Blueprints\Runner\Step\RmDirStepRunner; use WordPress\Blueprints\Runner\Step\RmStepRunner; use WordPress\Blueprints\Runner\Step\RunPHPStepRunner; use WordPress\Blueprints\Runner\Step\RunSQLStepRunner; diff --git a/src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php b/src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php index 83a74022..db52ca3b 100644 --- a/src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php +++ b/src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php @@ -1,6 +1,6 @@ fs = new Filesystem(); - } - - public function offsetExists( $offset ): bool { - foreach ( $this->pairs as $pair ) { - if ( $pair[0] === $offset ) { - return true; - } - } - } - - public function offsetGet( $offset ): mixed { - foreach ( $this->pairs as $pair ) { - if ( $pair[0] === $offset ) { - return $pair[1]; - } - } - - throw new \Exception( "Stream for resource " . json_encode( $offset ) . " not found" ); - } - - public function offsetSet( $offset, $value ): void { - foreach ( $this->pairs as $k => $pair ) { - if ( $pair[0] === $offset ) { - $this->pairs[ $k ] = [ $offset, $value ]; - - return; - } - } - $this->pairs[] = [ $offset, $value ]; - } - - public function offsetUnset( $offset ): void { - foreach ( $this->pairs as $i => $pair ) { - if ( $pair[0] === $offset ) { - unset( $this->pairs[ $i ] ); - } - } - } - - -} diff --git a/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php new file mode 100644 index 00000000..4c74f2ea --- /dev/null +++ b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php @@ -0,0 +1,41 @@ +setPath($url); + return $resource; + } + + public static function getResourceClass(): string + { + return FilesystemResource::class; + } + + public function supports(ResourceDefinitionInterface $resource): bool + { + return $resource instanceof FilesystemResource; + } + + public function stream(ResourceDefinitionInterface $resource) + { + if (! $this->supports($resource)) { + throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); + } + + /** @var $resource FilesystemResource */ + return fopen($resource->path, 'r'); + } +} diff --git a/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php new file mode 100644 index 00000000..17b5e49e --- /dev/null +++ b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php @@ -0,0 +1,43 @@ +setContents($url); + } + + public static function getResourceClass(): string + { + return InlineResource::class; + } + + public function supports(ResourceDefinitionInterface $resource): bool + { + return $resource instanceof InlineResource; + } + + public function stream(ResourceDefinitionInterface $resource) + { + if (! $this->supports($resource)) { + throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); + } + /** @var $resource InlineResource */ + $fp = fopen("php://temp", 'r+'); + fwrite($fp, $resource->contents); + rewind($fp); + + return $fp; + } +} diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php new file mode 100644 index 00000000..09deaf66 --- /dev/null +++ b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php @@ -0,0 +1,57 @@ +ResourceResolvers = $ResourceResolvers; + } + + public static function getResourceClass(): string + { + throw new \RuntimeException('Not implemented'); + } + + public function parseUrl(string $url): ?ResourceDefinitionInterface + { + foreach ($this->ResourceResolvers as $handler) { + $resource = $handler->parseUrl($url); + if ($resource) { + return $resource; + } + } + + return null; + } + + public function supports(ResourceDefinitionInterface $resource): bool + { + foreach ($this->ResourceResolvers as $handler) { + if ($handler->supports($resource)) { + return true; + } + } + + return false; + } + + public function stream(ResourceDefinitionInterface $resource) + { + foreach ($this->ResourceResolvers as $handler) { + if ($handler->supports($resource)) { + return $handler->stream($resource); + } + } + + throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); + } +} diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php new file mode 100644 index 00000000..231054d6 --- /dev/null +++ b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php @@ -0,0 +1,16 @@ +dataSource = $dataSource; + } + + public function parseUrl(string $url): ?ResourceDefinitionInterface + { + if (! str_starts_with($url, 'http://') && ! str_starts_with($url, 'https://')) { + return null; + } + + return ( new UrlResource() )->setUrl($url); + } + + + public static function getResourceClass(): string + { + return UrlResource::class; + } + + public function supports(ResourceDefinitionInterface $resource): bool + { + return $resource instanceof UrlResource; + } + + public function stream(ResourceDefinitionInterface $resource) + { + if (! $this->supports($resource)) { + throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); + } + + /** @var $resource UrlResource */ + return $this->dataSource->stream($resource->url); + } +} diff --git a/src/WordPress/Blueprints/Resources/ResourceManager.php b/src/WordPress/Blueprints/Resources/ResourceManager.php new file mode 100644 index 00000000..80f89692 --- /dev/null +++ b/src/WordPress/Blueprints/Resources/ResourceManager.php @@ -0,0 +1,49 @@ +resourceResolver = $resourceResolver; + $this->fs = new Filesystem(); + $this->map = new ResourceMap(); + } + + public function enqueue(array $resourceDeclarations) + { + foreach ($resourceDeclarations as [$originalInput, $resource]) { + $this->map[ $originalInput ] = $this->resourceResolver->stream($resource); + } + } + + public function getStream($key) + { + return $this->map[ $key ]; + } + + + public function bufferToTemporaryFile($resource, $callback, $suffix = null) + { + $fp = $this->getStream($resource); + $path = $this->fs->tempnam(sys_get_temp_dir(), 'resource', $suffix); + $this->fs->dumpFile($path, $fp); + + try { + return $callback($path); + } finally { + $this->fs->remove($path); + } + } +} diff --git a/src/WordPress/Blueprints/Resources/ResourceMap.php b/src/WordPress/Blueprints/Resources/ResourceMap.php new file mode 100644 index 00000000..4a1482c2 --- /dev/null +++ b/src/WordPress/Blueprints/Resources/ResourceMap.php @@ -0,0 +1,60 @@ +fs = new Filesystem(); + } + + public function offsetExists($offset): bool + { + foreach ($this->pairs as $pair) { + if ($pair[0] === $offset) { + return true; + } + } + return false; + } + + public function offsetGet($offset) + { + foreach ($this->pairs as $pair) { + if ($pair[0] === $offset) { + return $pair[1]; + } + } + + // TODO Evaluate waring: 'ext-json' is missing in composer.json + throw new \Exception("Stream for resource " . json_encode($offset) . " not found"); + } + + public function offsetSet($offset, $value): void + { + foreach ($this->pairs as $k => $pair) { + if ($pair[0] === $offset) { + $this->pairs[ $k ] = [ $offset, $value ]; + + return; + } + } + $this->pairs[] = [ $offset, $value ]; + } + + public function offsetUnset($offset): void + { + foreach ($this->pairs as $i => $pair) { + if ($pair[0] === $offset) { + unset($this->pairs[ $i ]); + } + } + } +} diff --git a/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php b/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php index 72d97a32..500a684b 100644 --- a/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php +++ b/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php @@ -2,33 +2,37 @@ namespace WordPress\Blueprints\Runner\Step; -use WordPress\Blueprints\Context\ExecutionContext; -use WordPress\Blueprints\Resource\ResourceManager; +use WordPress\Blueprints\Resources\ResourceManager; use WordPress\Blueprints\Runtime\RuntimeInterface; -abstract class BaseStepRunner implements StepRunnerInterface { - protected ResourceManager $resourceManager; +abstract class BaseStepRunner implements StepRunnerInterface +{ + protected ResourceManager $resourceManager; - protected RuntimeInterface $runtime; + protected RuntimeInterface $runtime; - public function setResourceManager( ResourceManager $map ) { - $this->resourceManager = $map; - } + public function setResourceManager(ResourceManager $map) + { + $this->resourceManager = $map; + } - protected function getResource( $declaration ) { - return $this->resourceManager->getStream( $declaration ); - } + protected function getResource($declaration) + { + return $this->resourceManager->getStream($declaration); + } - public function setRuntime( RuntimeInterface $runtime ): void { - $this->runtime = $runtime; - } + public function setRuntime(RuntimeInterface $runtime): void + { + $this->runtime = $runtime; + } - protected function getRuntime(): RuntimeInterface { - return $this->runtime; - } - - public function getDefaultCaption( $input ): string|null { - return null; - } + protected function getRuntime(): RuntimeInterface + { + return $this->runtime; + } + protected function getDefaultCaption($input): ?string + { + return null; + } } diff --git a/src/WordPress/Blueprints/Runner/Step/RmStepRunner.php b/src/WordPress/Blueprints/Runner/Step/RmStepRunner.php index 33516d09..b16c75e2 100644 --- a/src/WordPress/Blueprints/Runner/Step/RmStepRunner.php +++ b/src/WordPress/Blueprints/Runner/Step/RmStepRunner.php @@ -7,13 +7,13 @@ use WordPress\Blueprints\BlueprintException; use WordPress\Blueprints\Model\DataClass\RmStep; - class RmStepRunner extends BaseStepRunner { /** * @param RmStep $input */ - function run(RmStep $input) { + public function run(RmStep $input) + { $resolvedPath = $this->getRuntime()->resolvePath($input->path); $fileSystem = new Filesystem(); if (false === $fileSystem->exists($resolvedPath)) { diff --git a/src/WordPress/Blueprints/Runner/Step/StepRunnerInterface.php b/src/WordPress/Blueprints/Runner/Step/StepRunnerInterface.php index 4b32178b..2b61b87e 100644 --- a/src/WordPress/Blueprints/Runner/Step/StepRunnerInterface.php +++ b/src/WordPress/Blueprints/Runner/Step/StepRunnerInterface.php @@ -2,17 +2,17 @@ namespace WordPress\Blueprints\Runner\Step; -use WordPress\Blueprints\Resource\ResourceManager; +use WordPress\Blueprints\Resources\ResourceManager; use WordPress\Blueprints\Runtime\RuntimeInterface; -interface StepRunnerInterface { +interface StepRunnerInterface +{ - function setResourceManager( ResourceManager $map ); + public function setResourceManager(ResourceManager $map); - function setRuntime( RuntimeInterface $runtime ): void; + public function setRuntime(RuntimeInterface $runtime): void; // @TODO: Document how this method isn't defined because // PHP doens't support covariant arguments -// function run( StepInterface $input, Tracker $tracker ); - +// function run( StepInterface $input, Tracker $tracker ); } diff --git a/src/WordPress/Blueprints/Runtime/Runtime.php b/src/WordPress/Blueprints/Runtime/Runtime.php index 79240a11..40d8a5b4 100644 --- a/src/WordPress/Blueprints/Runtime/Runtime.php +++ b/src/WordPress/Blueprints/Runtime/Runtime.php @@ -10,11 +10,13 @@ class Runtime implements RuntimeInterface { public Filesystem $fs; + protected string $documentRoot; - public function __construct( - protected string $documentRoot + public function __construct( + string $documentRoot ) { - $this->fs = new Filesystem(); + $this->documentRoot = $documentRoot; + $this->fs = new Filesystem(); if ( ! file_exists( $this->getDocumentRoot() ) ) { $this->fs->mkdir( $this->getDocumentRoot() ); } @@ -69,7 +71,7 @@ public function getTempRoot() { public function evalPhpInSubProcess( $code, ?array $env = null, - mixed $input = null, + $input = null, ?float $timeout = 60 ) { return $this->runShellCommand( @@ -93,7 +95,7 @@ public function runShellCommand( array $command, ?string $cwd = null, ?array $env = null, - mixed $input = null, + $input = null, ?float $timeout = 60 ) { $process = $this->startProcess( @@ -116,7 +118,7 @@ public function startProcess( array $command, ?string $cwd = null, ?array $env = null, - mixed $input = null, + $input = null, ?float $timeout = 60 ): Process { $cwd ??= $this->getDocumentRoot(); diff --git a/tests/Blueprints/Runner/Step/RmStepRunnerTest.php b/tests/Blueprints/Runner/Step/RmStepRunnerTest.php new file mode 100644 index 00000000..946a07fd --- /dev/null +++ b/tests/Blueprints/Runner/Step/RmStepRunnerTest.php @@ -0,0 +1,175 @@ +documentRoot = Path::makeAbsolute("test", sys_get_temp_dir()); + $this->runtime = new NativePHPRuntime($this->documentRoot); + + $this->step = new RmStepRunner(); + $this->step->setRuntime($this->runtime); + + $this->fileSystem = new Filesystem(); + } + + /** + * @after + */ + public function after() + { + $this->fileSystem->remove($this->documentRoot); + } + + public function testRemoveDirectoryWhenUsingAbsolutePath(): void + { + $absolutePath = $this->runtime->resolvePath("dir"); + $this->fileSystem->mkdir($absolutePath); + + $input = new RmStep(); + $input->path = $absolutePath; + + $this->step->run($input); + + $this->assertDirectoryDoesNotExist($absolutePath); + } + + public function testRemoveDirectoryWhenUsingRelativePath(): void + { + $relativePath = "dir"; + $absolutePath = $this->runtime->resolvePath($relativePath); + $this->fileSystem->mkdir($absolutePath); + + $input = new RmStep(); + $input->path = $relativePath; + + $this->step->run($input); + + $this->assertDirectoryDoesNotExist($absolutePath); + } + + public function testRemoveDirectoryWithSubdirectory(): void + { + $relativePath = "dir/subdir"; + $absolutePath = $this->runtime->resolvePath($relativePath); + $this->fileSystem->mkdir($absolutePath); + + $input = new RmStep(); + $input->path = dirname($relativePath); + + $this->step->run($input); + + $this->assertDirectoryDoesNotExist($absolutePath); + } + + public function testRemoveDirectoryWithFile(): void + { + $relativePath = "dir/file.txt"; + $absolutePath = $this->runtime->resolvePath($relativePath); + $this->fileSystem->dumpFile($absolutePath, "test"); + + $input = new RmStep(); + $input->path = dirname($relativePath); + + $this->step->run($input); + + $this->assertDirectoryDoesNotExist(dirname($absolutePath)); + } + + public function testRemoveFile(): void + { + $relativePath = "file.txt"; + $absolutePath = $this->runtime->resolvePath($relativePath); + $this->fileSystem->dumpFile($absolutePath, "test"); + + $input = new RmStep(); + $input->path = $relativePath; + + $this->step->run($input); + + $this->assertDirectoryDoesNotExist($absolutePath); + } + + public function testThrowExceptionWhenRemovingNonexistentDirectoryAndUsingRelativePath(): void + { + $relativePath = "dir"; + $absolutePath = $this->runtime->resolvePath($relativePath); + + $input = new RmStep(); + $input->path = $relativePath; + + $this->expectException(BlueprintException::class); + $this->expectExceptionMessage("Failed to remove \"$absolutePath\": the directory or file does not exist."); + $this->step->run($input); + } + + public function testThrowExceptionWhenRemovingNonexistentDirectoryAndUsingAbsolutePath(): void + { + $absolutePath = "/dir"; + + $input = new RmStep(); + $input->path = $absolutePath; + + $this->expectException(BlueprintException::class); + $this->expectExceptionMessage("Failed to remove \"$absolutePath\": the directory or file does not exist."); + $this->step->run($input); + } + + public function testThrowExceptionWhenRemovingNonexistentFileAndUsingAbsolutePath(): void + { + $relativePath = "/file.txt"; + + $input = new RmStep(); + $input->path = $relativePath; + + $this->expectException(BlueprintException::class); + $this->expectExceptionMessage("Failed to remove \"$relativePath\": the directory or file does not exist."); + $this->step->run($input); + } + + public function testThrowExceptionWhenRemovingNonexistentFileAndUsingRelativePath(): void + { + $relativePath = "file.txt"; + $absolutePath = $this->runtime->resolvePath($relativePath); + + $input = new RmStep(); + $input->path = $relativePath; + + $this->expectException(BlueprintException::class); + $this->expectExceptionMessage("Failed to remove \"$absolutePath\": the directory or file does not exist."); + $this->step->run($input); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php deleted file mode 100644 index 79893ff2..00000000 --- a/tests/TestCase.php +++ /dev/null @@ -1,9 +0,0 @@ -compile([ - 'steps' => [] - ]); -}); +// +//use \WordPress\Blueprints\Compiler; +// +//it('Compiler should validate Blueprints', function () { +// $c = new Compiler(); +// $c->compile([ +// 'steps' => [] +// ]); +//}); diff --git a/tests/Unit/TrackerTest.php b/tests/Unit/TrackerTest.php index 1a1f8dd1..f6142b52 100644 --- a/tests/Unit/TrackerTest.php +++ b/tests/Unit/TrackerTest.php @@ -1,227 +1,227 @@ set( 50 ); - - expect( (int) $tracker->getProgress() )->toBe( 50 ); - } ); - - it( 'Equally-weighted subtrackers should sum to 100 total progress after completion', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); - $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); - $partial3 = $tracker->stage( 1 / 3, 'Part 3' ); - - $partial1->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 33, 2 ); - - $partial2->set( 100 ); - $partial2->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 66, 2 ); - - $partial3->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 100 ); - } ); - - it( 'Differently-weighted subtrackers should sum to 100 total progress after completion', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 0.2, 'Part 1' ); - $partial2 = $tracker->stage( 0.3, 'Part 2' ); - $partial3 = $tracker->stage( 0.5, 'Part 3' ); - - $partial1->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 20 ); - - $partial2->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 50 ); - - $partial3->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 100 ); - } ); - - describe( 'Subtrackers should sum to 100 total progress after completion even if the top-level tracker also has self-progress', - function () { - it( 'When subtrackers cover the entire progress range ', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); - $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); - $partial3 = $tracker->stage( 1 / 3, 'Part 3' ); - - $tracker->set( 100 ); - $partial1->set( 100 ); - $partial2->set( 100 ); - $partial3->set( 100 ); - expect( $tracker->getProgress() )->toBe( 100 ); - } ); - it( 'When subtrackers only cover 2/3 of the progress range ', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); - $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); - - $tracker->set( 100 ); - $partial1->set( 100 ); - $partial2->set( 100 ); - expect( (int) $tracker->getProgress() )->toBe( 100 ); - } ); - } ); - - it( 'Two levels of sub-trackers should sum to 100 total progress after completion', function () { - $tracker = new Tracker(); - $level1A = $tracker->stage( 0.6, 'Level 1A' ); - $level1B = $tracker->stage( 0.4, 'Level 1B' ); - - $level2A1 = $level1A->stage( 0.5, 'Level 2A1' ); - $level2A2 = $level1A->stage( 0.5, 'Level 2A2' ); - $level2B1 = $level1B->stage( 0.7, 'Level 2B1' ); - $level2B2 = $level1B->stage( 0.3, 'Level 2B2' ); - $level2A1->set( 100 ); - expect( $tracker->getProgress() )->toBe( 30.0, 2 ); - - $level2A2->set( 100 ); - expect( $tracker->getProgress() )->toBe( 60.0, 2 ); - - $level2B1->set( 100 ); - expect( $tracker->getProgress() )->toBe( 88.0, 2 ); - - $level2B2->set( 100 ); - expect( $tracker->getProgress() )->toBe( 100.0 ); - } ); -} ); - -describe( 'Events', function () { - it( 'Progress event emitted when using set', function () { - $tracker = new Tracker(); - $eventProgress = 0; - - $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventProgress ) { - $eventProgress = $event->progress; - } ); - - $tracker->set( 50 ); - - expect( $eventProgress )->toBe( 50.0 ); - } ); - - it( 'Progress event emitted when setting caption', function () { - $tracker = new Tracker(); - $eventCaption = ''; - - $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventCaption ) { - $eventCaption = $event->caption; - } ); - - $tracker->setCaption( 'Test caption' ); - - expect( $eventCaption )->toBe( 'Test caption' ); - } ); - - it( 'Progress event emitted for sub trackers', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 0.5, 'Part 1' ); - $eventProgress = 0; - - $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventProgress ) { - $eventProgress = $event->progress; - } ); - - $partial1->set( 100 ); - - expect( $eventProgress )->toBe( 50.0 ); - } ); -} ); - -describe( 'Caption management', function () { - it( 'Should return caption of a Tracker', function () { - $tracker = new Tracker( [ "caption" => 'Initial caption' ] ); - - expect( $tracker->getCaption() )->toBe( 'Initial caption' ); - } ); - - it( 'Should return the updated caption of a single Tracker', function () { - $tracker = new Tracker( [ "caption" => 'Initial caption' ] ); - $tracker->setCaption( 'Updated caption' ); - - expect( $tracker->getCaption() )->toBe( 'Updated caption' ); - } ); - - it( 'Should return caption of the most recently started sub tracker', function () { - $tracker = new Tracker(); - $tracker->stage( 0.5, 'Part 1' ); - $tracker->stage( 0.5, 'Part 2' ); - expect( $tracker->getCaption() )->toBe( 'Part 2' ); - } ); - - it( 'Should return caption of the most recently started sub tracker – multi-level', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 0.5, 'Part 1' ); - expect( $tracker->getCaption() )->toBe( 'Part 1' ); - - $partial1->stage( 0.5, 'Part 1.a' ); - expect( $tracker->getCaption() )->toBe( 'Part 1.a' ); - - $partial1->stage( 0.5, 'Part 1.b' ); - expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); - - $partial2 = $tracker->stage( 0.5, 'Part 2' ); - expect( $tracker->getCaption() )->toBe( 'Part 2' ); - - $partial2->stage( 0.5, 'Part 2.a' ); - expect( $tracker->getCaption() )->toBe( 'Part 2.a' ); - - $partial2->stage( 0.5, 'Part 2.b' ); - expect( $tracker->getCaption() )->toBe( 'Part 2.b' ); - } ); - - it( 'Should return caption of the most recent incomplete sub tracker – multi-level', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 0.5, 'Part 1' ); - expect( $tracker->getCaption() )->toBe( 'Part 1' ); - - $partial1a = $partial1->stage( 0.5, 'Part 1.a' ); - $partial1b = $partial1->stage( 0.5, 'Part 1.b' ); - $partial2 = $tracker->stage( 0.5, 'Part 2' ); - $partial2a = $partial2->stage( 0.5, 'Part 2.a' ); - $partial2b = $partial2->stage( 0.5, 'Part 2.b' ); - - $partial2b->set( 100 ); - expect( $tracker->getCaption() )->toBe( 'Part 2.a' ); - - $partial2a->set( 100 ); - expect( $partial2->isDone() )->toBe( true ); - expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); - - $partial1a->set( 100 ); - expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); - - $partial1b->set( 100 ); - expect( $tracker->getCaption() )->toBe( '' ); - } ); - - it( 'Should return caption of the most recently started and not completed sub tracker', function () { - $tracker = new Tracker(); - $tracker->stage( 0.5, 'Part 1' ); - $partial2 = $tracker->stage( 0.5, 'Part 2' ); - - $partial2->set( 95 ); - expect( $tracker->getCaption() )->toBe( 'Part 2' ); - - $partial2->set( 100 ); - expect( $tracker->getCaption() )->toBe( 'Part 1' ); - } ); - - it( 'Should return no caption when all sub trackers are completed', function () { - $tracker = new Tracker(); - $partial1 = $tracker->stage( 0.5, 'Part 1' ); - $partial2 = $tracker->stage( 0.5, 'Part 2' ); - - $partial1->set( 100 ); - $partial2->set( 100 ); - - expect( $tracker->getCaption() )->toBe( '' ); - } ); -} ); +// +//use WordPress\Blueprints\Progress\ProgressEvent; +//use WordPress\Blueprints\Progress\Tracker; +// +//describe( 'Tracks total progress', function () { +// it( 'A single Tracker populated via set', function () { +// $tracker = new Tracker(); +// $tracker->set( 50 ); +// +// expect( (int) $tracker->getProgress() )->toBe( 50 ); +// } ); +// +// it( 'Equally-weighted subtrackers should sum to 100 total progress after completion', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); +// $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); +// $partial3 = $tracker->stage( 1 / 3, 'Part 3' ); +// +// $partial1->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 33, 2 ); +// +// $partial2->set( 100 ); +// $partial2->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 66, 2 ); +// +// $partial3->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 100 ); +// } ); +// +// it( 'Differently-weighted subtrackers should sum to 100 total progress after completion', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 0.2, 'Part 1' ); +// $partial2 = $tracker->stage( 0.3, 'Part 2' ); +// $partial3 = $tracker->stage( 0.5, 'Part 3' ); +// +// $partial1->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 20 ); +// +// $partial2->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 50 ); +// +// $partial3->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 100 ); +// } ); +// +// describe( 'Subtrackers should sum to 100 total progress after completion even if the top-level tracker also has self-progress', +// function () { +// it( 'When subtrackers cover the entire progress range ', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); +// $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); +// $partial3 = $tracker->stage( 1 / 3, 'Part 3' ); +// +// $tracker->set( 100 ); +// $partial1->set( 100 ); +// $partial2->set( 100 ); +// $partial3->set( 100 ); +// expect( $tracker->getProgress() )->toBe( 100 ); +// } ); +// it( 'When subtrackers only cover 2/3 of the progress range ', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 1 / 3, 'Part 1' ); +// $partial2 = $tracker->stage( 1 / 3, 'Part 2' ); +// +// $tracker->set( 100 ); +// $partial1->set( 100 ); +// $partial2->set( 100 ); +// expect( (int) $tracker->getProgress() )->toBe( 100 ); +// } ); +// } ); +// +// it( 'Two levels of sub-trackers should sum to 100 total progress after completion', function () { +// $tracker = new Tracker(); +// $level1A = $tracker->stage( 0.6, 'Level 1A' ); +// $level1B = $tracker->stage( 0.4, 'Level 1B' ); +// +// $level2A1 = $level1A->stage( 0.5, 'Level 2A1' ); +// $level2A2 = $level1A->stage( 0.5, 'Level 2A2' ); +// $level2B1 = $level1B->stage( 0.7, 'Level 2B1' ); +// $level2B2 = $level1B->stage( 0.3, 'Level 2B2' ); +// $level2A1->set( 100 ); +// expect( $tracker->getProgress() )->toBe( 30.0, 2 ); +// +// $level2A2->set( 100 ); +// expect( $tracker->getProgress() )->toBe( 60.0, 2 ); +// +// $level2B1->set( 100 ); +// expect( $tracker->getProgress() )->toBe( 88.0, 2 ); +// +// $level2B2->set( 100 ); +// expect( $tracker->getProgress() )->toBe( 100.0 ); +// } ); +//} ); +// +//describe( 'Events', function () { +// it( 'Progress event emitted when using set', function () { +// $tracker = new Tracker(); +// $eventProgress = 0; +// +// $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventProgress ) { +// $eventProgress = $event->progress; +// } ); +// +// $tracker->set( 50 ); +// +// expect( $eventProgress )->toBe( 50.0 ); +// } ); +// +// it( 'Progress event emitted when setting caption', function () { +// $tracker = new Tracker(); +// $eventCaption = ''; +// +// $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventCaption ) { +// $eventCaption = $event->caption; +// } ); +// +// $tracker->setCaption( 'Test caption' ); +// +// expect( $eventCaption )->toBe( 'Test caption' ); +// } ); +// +// it( 'Progress event emitted for sub trackers', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 0.5, 'Part 1' ); +// $eventProgress = 0; +// +// $tracker->events->addListener( 'progress', function ( ProgressEvent $event ) use ( &$eventProgress ) { +// $eventProgress = $event->progress; +// } ); +// +// $partial1->set( 100 ); +// +// expect( $eventProgress )->toBe( 50.0 ); +// } ); +//} ); +// +//describe( 'Caption management', function () { +// it( 'Should return caption of a Tracker', function () { +// $tracker = new Tracker( [ "caption" => 'Initial caption' ] ); +// +// expect( $tracker->getCaption() )->toBe( 'Initial caption' ); +// } ); +// +// it( 'Should return the updated caption of a single Tracker', function () { +// $tracker = new Tracker( [ "caption" => 'Initial caption' ] ); +// $tracker->setCaption( 'Updated caption' ); +// +// expect( $tracker->getCaption() )->toBe( 'Updated caption' ); +// } ); +// +// it( 'Should return caption of the most recently started sub tracker', function () { +// $tracker = new Tracker(); +// $tracker->stage( 0.5, 'Part 1' ); +// $tracker->stage( 0.5, 'Part 2' ); +// expect( $tracker->getCaption() )->toBe( 'Part 2' ); +// } ); +// +// it( 'Should return caption of the most recently started sub tracker – multi-level', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 0.5, 'Part 1' ); +// expect( $tracker->getCaption() )->toBe( 'Part 1' ); +// +// $partial1->stage( 0.5, 'Part 1.a' ); +// expect( $tracker->getCaption() )->toBe( 'Part 1.a' ); +// +// $partial1->stage( 0.5, 'Part 1.b' ); +// expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); +// +// $partial2 = $tracker->stage( 0.5, 'Part 2' ); +// expect( $tracker->getCaption() )->toBe( 'Part 2' ); +// +// $partial2->stage( 0.5, 'Part 2.a' ); +// expect( $tracker->getCaption() )->toBe( 'Part 2.a' ); +// +// $partial2->stage( 0.5, 'Part 2.b' ); +// expect( $tracker->getCaption() )->toBe( 'Part 2.b' ); +// } ); +// +// it( 'Should return caption of the most recent incomplete sub tracker – multi-level', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 0.5, 'Part 1' ); +// expect( $tracker->getCaption() )->toBe( 'Part 1' ); +// +// $partial1a = $partial1->stage( 0.5, 'Part 1.a' ); +// $partial1b = $partial1->stage( 0.5, 'Part 1.b' ); +// $partial2 = $tracker->stage( 0.5, 'Part 2' ); +// $partial2a = $partial2->stage( 0.5, 'Part 2.a' ); +// $partial2b = $partial2->stage( 0.5, 'Part 2.b' ); +// +// $partial2b->set( 100 ); +// expect( $tracker->getCaption() )->toBe( 'Part 2.a' ); +// +// $partial2a->set( 100 ); +// expect( $partial2->isDone() )->toBe( true ); +// expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); +// +// $partial1a->set( 100 ); +// expect( $tracker->getCaption() )->toBe( 'Part 1.b' ); +// +// $partial1b->set( 100 ); +// expect( $tracker->getCaption() )->toBe( '' ); +// } ); +// +// it( 'Should return caption of the most recently started and not completed sub tracker', function () { +// $tracker = new Tracker(); +// $tracker->stage( 0.5, 'Part 1' ); +// $partial2 = $tracker->stage( 0.5, 'Part 2' ); +// +// $partial2->set( 95 ); +// expect( $tracker->getCaption() )->toBe( 'Part 2' ); +// +// $partial2->set( 100 ); +// expect( $tracker->getCaption() )->toBe( 'Part 1' ); +// } ); +// +// it( 'Should return no caption when all sub trackers are completed', function () { +// $tracker = new Tracker(); +// $partial1 = $tracker->stage( 0.5, 'Part 1' ); +// $partial2 = $tracker->stage( 0.5, 'Part 2' ); +// +// $partial1->set( 100 ); +// $partial2->set( 100 ); +// +// expect( $tracker->getCaption() )->toBe( '' ); +// } ); +//} ); diff --git a/tests/Unit/stream_str_replace_Test.php b/tests/Unit/stream_str_replace_Test.php index 38fb7045..5c5e6c81 100644 --- a/tests/Unit/stream_str_replace_Test.php +++ b/tests/Unit/stream_str_replace_Test.php @@ -1,39 +1,39 @@ toBe( $expected ); -} ); - -it( "Replace a URL in a longer string", function () { - $data = << - - - Test - - -

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

- Example - -EOT; - - $source = fopen( 'php://memory', 'w+' ); - fwrite( $source, $data ); - rewind( $source ); - - $generator = stream_str_replace( $source, "https://example.com", "https://playground.internal" ); - $chunks = iterator_to_array( $generator ); - $expected = str_replace( "https://example.com", "https://playground.internal", $data ); - - expect( implode( "", $chunks ) )->toBe( $expected ); -} ); +// +//use function WordPress\Streams\stream_str_replace; +// +//it( "Replace a string in a stream", function () { +// $source = fopen( 'php://memory', 'w+' ); +// fwrite( $source, "Hello, world, and all the other places too!" ); +// rewind( $source ); +// +// $generator = stream_str_replace( $source, "and all ", "" ); +// $chunks = iterator_to_array( $generator ); +// $expected = "Hello, world, the other places too!"; +// +// expect( implode( "", $chunks ) )->toBe( $expected ); +//} ); +// +//it( "Replace a URL in a longer string", function () { +// $data = << +// +// +// Test +// +// +//

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+// Example +// +//EOT; +// +// $source = fopen( 'php://memory', 'w+' ); +// fwrite( $source, $data ); +// rewind( $source ); +// +// $generator = stream_str_replace( $source, "https://example.com", "https://playground.internal" ); +// $chunks = iterator_to_array( $generator ); +// $expected = str_replace( "https://example.com", "https://playground.internal", $data ); +// +// expect( implode( "", $chunks ) )->toBe( $expected ); +//} ); From 2c8432fd6407cb799e443e9c164840e46258367e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Zieli=C5=84ski?= Date: Mon, 4 Mar 2024 10:17:20 +0100 Subject: [PATCH 2/5] Move Resources to resource --- .../{Resources => Resource}/ResourceMap.php | 0 .../Resolver/FilesystemResourceResolver.php | 41 ------------- .../Resolver/InlineResourceResolver.php | 43 -------------- .../Resolver/ResourceResolverCollection.php | 57 ------------------- .../Resolver/ResourceResolverInterface.php | 16 ------ .../Resolver/UrlResourceResolver.php | 48 ---------------- .../Blueprints/Resources/ResourceManager.php | 49 ---------------- 7 files changed, 254 deletions(-) rename src/WordPress/Blueprints/{Resources => Resource}/ResourceMap.php (100%) delete mode 100644 src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php delete mode 100644 src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php delete mode 100644 src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php delete mode 100644 src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php delete mode 100644 src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php delete mode 100644 src/WordPress/Blueprints/Resources/ResourceManager.php diff --git a/src/WordPress/Blueprints/Resources/ResourceMap.php b/src/WordPress/Blueprints/Resource/ResourceMap.php similarity index 100% rename from src/WordPress/Blueprints/Resources/ResourceMap.php rename to src/WordPress/Blueprints/Resource/ResourceMap.php diff --git a/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php deleted file mode 100644 index 4c74f2ea..00000000 --- a/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php +++ /dev/null @@ -1,41 +0,0 @@ -setPath($url); - return $resource; - } - - public static function getResourceClass(): string - { - return FilesystemResource::class; - } - - public function supports(ResourceDefinitionInterface $resource): bool - { - return $resource instanceof FilesystemResource; - } - - public function stream(ResourceDefinitionInterface $resource) - { - if (! $this->supports($resource)) { - throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); - } - - /** @var $resource FilesystemResource */ - return fopen($resource->path, 'r'); - } -} diff --git a/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php deleted file mode 100644 index 17b5e49e..00000000 --- a/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php +++ /dev/null @@ -1,43 +0,0 @@ -setContents($url); - } - - public static function getResourceClass(): string - { - return InlineResource::class; - } - - public function supports(ResourceDefinitionInterface $resource): bool - { - return $resource instanceof InlineResource; - } - - public function stream(ResourceDefinitionInterface $resource) - { - if (! $this->supports($resource)) { - throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); - } - /** @var $resource InlineResource */ - $fp = fopen("php://temp", 'r+'); - fwrite($fp, $resource->contents); - rewind($fp); - - return $fp; - } -} diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php deleted file mode 100644 index 09deaf66..00000000 --- a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php +++ /dev/null @@ -1,57 +0,0 @@ -ResourceResolvers = $ResourceResolvers; - } - - public static function getResourceClass(): string - { - throw new \RuntimeException('Not implemented'); - } - - public function parseUrl(string $url): ?ResourceDefinitionInterface - { - foreach ($this->ResourceResolvers as $handler) { - $resource = $handler->parseUrl($url); - if ($resource) { - return $resource; - } - } - - return null; - } - - public function supports(ResourceDefinitionInterface $resource): bool - { - foreach ($this->ResourceResolvers as $handler) { - if ($handler->supports($resource)) { - return true; - } - } - - return false; - } - - public function stream(ResourceDefinitionInterface $resource) - { - foreach ($this->ResourceResolvers as $handler) { - if ($handler->supports($resource)) { - return $handler->stream($resource); - } - } - - throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); - } -} diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php deleted file mode 100644 index 231054d6..00000000 --- a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -dataSource = $dataSource; - } - - public function parseUrl(string $url): ?ResourceDefinitionInterface - { - if (! str_starts_with($url, 'http://') && ! str_starts_with($url, 'https://')) { - return null; - } - - return ( new UrlResource() )->setUrl($url); - } - - - public static function getResourceClass(): string - { - return UrlResource::class; - } - - public function supports(ResourceDefinitionInterface $resource): bool - { - return $resource instanceof UrlResource; - } - - public function stream(ResourceDefinitionInterface $resource) - { - if (! $this->supports($resource)) { - throw new \InvalidArgumentException('Resource ' . get_class($resource) . ' unsupported'); - } - - /** @var $resource UrlResource */ - return $this->dataSource->stream($resource->url); - } -} diff --git a/src/WordPress/Blueprints/Resources/ResourceManager.php b/src/WordPress/Blueprints/Resources/ResourceManager.php deleted file mode 100644 index 80f89692..00000000 --- a/src/WordPress/Blueprints/Resources/ResourceManager.php +++ /dev/null @@ -1,49 +0,0 @@ -resourceResolver = $resourceResolver; - $this->fs = new Filesystem(); - $this->map = new ResourceMap(); - } - - public function enqueue(array $resourceDeclarations) - { - foreach ($resourceDeclarations as [$originalInput, $resource]) { - $this->map[ $originalInput ] = $this->resourceResolver->stream($resource); - } - } - - public function getStream($key) - { - return $this->map[ $key ]; - } - - - public function bufferToTemporaryFile($resource, $callback, $suffix = null) - { - $fp = $this->getStream($resource); - $path = $this->fs->tempnam(sys_get_temp_dir(), 'resource', $suffix); - $this->fs->dumpFile($path, $fp); - - try { - return $callback($path); - } finally { - $this->fs->remove($path); - } - } -} From e20decc1135432e3bc36ce6647748f5f377e6021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Zieli=C5=84ski?= Date: Mon, 4 Mar 2024 10:17:34 +0100 Subject: [PATCH 3/5] Move Resource to Resources --- .../Resolver/FilesystemResourceResolver.php | 0 .../{Resource => Resources}/Resolver/InlineResourceResolver.php | 0 .../Resolver/ResourceResolverCollection.php | 0 .../Resolver/ResourceResolverInterface.php | 0 .../{Resource => Resources}/Resolver/UrlResourceResolver.php | 0 .../Blueprints/{Resource => Resources}/ResourceManager.php | 0 src/WordPress/Blueprints/{Resource => Resources}/ResourceMap.php | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename src/WordPress/Blueprints/{Resource => Resources}/Resolver/FilesystemResourceResolver.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/Resolver/InlineResourceResolver.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/Resolver/ResourceResolverCollection.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/Resolver/ResourceResolverInterface.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/Resolver/UrlResourceResolver.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/ResourceManager.php (100%) rename src/WordPress/Blueprints/{Resource => Resources}/ResourceMap.php (100%) diff --git a/src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php similarity index 100% rename from src/WordPress/Blueprints/Resource/Resolver/FilesystemResourceResolver.php rename to src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php diff --git a/src/WordPress/Blueprints/Resource/Resolver/InlineResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php similarity index 100% rename from src/WordPress/Blueprints/Resource/Resolver/InlineResourceResolver.php rename to src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php diff --git a/src/WordPress/Blueprints/Resource/Resolver/ResourceResolverCollection.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php similarity index 100% rename from src/WordPress/Blueprints/Resource/Resolver/ResourceResolverCollection.php rename to src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php diff --git a/src/WordPress/Blueprints/Resource/Resolver/ResourceResolverInterface.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php similarity index 100% rename from src/WordPress/Blueprints/Resource/Resolver/ResourceResolverInterface.php rename to src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php diff --git a/src/WordPress/Blueprints/Resource/Resolver/UrlResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php similarity index 100% rename from src/WordPress/Blueprints/Resource/Resolver/UrlResourceResolver.php rename to src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php diff --git a/src/WordPress/Blueprints/Resource/ResourceManager.php b/src/WordPress/Blueprints/Resources/ResourceManager.php similarity index 100% rename from src/WordPress/Blueprints/Resource/ResourceManager.php rename to src/WordPress/Blueprints/Resources/ResourceManager.php diff --git a/src/WordPress/Blueprints/Resource/ResourceMap.php b/src/WordPress/Blueprints/Resources/ResourceMap.php similarity index 100% rename from src/WordPress/Blueprints/Resource/ResourceMap.php rename to src/WordPress/Blueprints/Resources/ResourceMap.php From 89500ce39de861ca80cb6ca15a7a61e2fb1c4f37 Mon Sep 17 00:00:00 2001 From: Adam Zielinski Date: Mon, 4 Mar 2024 10:37:13 +0100 Subject: [PATCH 4/5] Remove unused tests/Unit/CompilerTest.php --- tests/Unit/CompilerTest.php | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 tests/Unit/CompilerTest.php diff --git a/tests/Unit/CompilerTest.php b/tests/Unit/CompilerTest.php deleted file mode 100644 index 10de6ddd..00000000 --- a/tests/Unit/CompilerTest.php +++ /dev/null @@ -1,10 +0,0 @@ -compile([ -// 'steps' => [] -// ]); -//}); From f065407055a3a619acb3d81dccd390a83fbad7c4 Mon Sep 17 00:00:00 2001 From: Michael Reichardt Date: Mon, 4 Mar 2024 13:52:24 +0100 Subject: [PATCH 5/5] Fix test after merge --- .../Runner/Step/RmStepRunnerTest.php | 8 +- tests/Unit/RmStepTest.php | 119 ------------------ 2 files changed, 4 insertions(+), 123 deletions(-) delete mode 100644 tests/Unit/RmStepTest.php diff --git a/tests/Blueprints/Runner/Step/RmStepRunnerTest.php b/tests/Blueprints/Runner/Step/RmStepRunnerTest.php index 946a07fd..df2c03e4 100644 --- a/tests/Blueprints/Runner/Step/RmStepRunnerTest.php +++ b/tests/Blueprints/Runner/Step/RmStepRunnerTest.php @@ -8,7 +8,7 @@ use WordPress\Blueprints\Model\DataClass\RmStep; use WordPress\Blueprints\Runner\Step\RmStepRunner; use PHPUnit\Framework\TestCase; -use WordPress\Blueprints\Runtime\NativePHPRuntime; +use WordPress\Blueprints\Runtime\Runtime; class RmStepRunnerTest extends TestCase { @@ -18,9 +18,9 @@ class RmStepRunnerTest extends TestCase private string $documentRoot; /** - * @var NativePHPRuntime + * @var Runtime */ - private NativePHPRuntime $runtime; + private Runtime $runtime; /** * @var RmStepRunner @@ -38,7 +38,7 @@ class RmStepRunnerTest extends TestCase public function before() { $this->documentRoot = Path::makeAbsolute("test", sys_get_temp_dir()); - $this->runtime = new NativePHPRuntime($this->documentRoot); + $this->runtime = new Runtime($this->documentRoot); $this->step = new RmStepRunner(); $this->step->setRuntime($this->runtime); diff --git a/tests/Unit/RmStepTest.php b/tests/Unit/RmStepTest.php deleted file mode 100644 index 231935d1..00000000 --- a/tests/Unit/RmStepTest.php +++ /dev/null @@ -1,119 +0,0 @@ -documentRoot = Path::makeAbsolute( "test", sys_get_temp_dir() ); - $this->runtime = new Runtime( $this->documentRoot ); - - $this->step = new RmStepRunner(); - $this->step->setRuntime( $this->runtime ); - - $this->fileSystem = new Filesystem(); -} ); - -afterEach( function () { - $this->fileSystem->remove( $this->documentRoot ); -} ); - -it( 'should remove a directory (using an absolute path)', function () { - $absolutePath = $this->runtime->resolvePath( "dir" ); - $this->fileSystem->mkdir( $absolutePath ); - - $input = new RmStep(); - $input->path = $absolutePath; - - $this->step->run( $input ); - - expect( $this->fileSystem->exists( $absolutePath ) )->toBeFalse(); -} ); - -it( 'should remove a directory (using a relative path)', function () { - $relativePath = "dir"; - $absolutePath = $this->runtime->resolvePath( $relativePath ); - $this->fileSystem->mkdir( $absolutePath ); - - $input = new RmStep(); - $input->path = $relativePath; - - $this->step->run( $input ); - - expect( $this->fileSystem->exists( $absolutePath ) )->toBeFalse(); -} ); - -it( 'should remove a directory with a subdirectory', function () { - $relativePath = "dir/subdir"; - $absolutePath = $this->runtime->resolvePath( $relativePath ); - $this->fileSystem->mkdir( $absolutePath ); - - $input = new RmStep(); - $input->path = dirname( $relativePath ); - - $this->step->run( $input ); - - expect( $this->fileSystem->exists( dirname( $absolutePath ) ) )->toBeFalse(); -} ); - -it( 'should remove a directory with a file', function () { - $relativePath = "dir/file.txt"; - $absolutePath = $this->runtime->resolvePath( $relativePath ); - $this->fileSystem->dumpFile( $absolutePath, "test" ); - - $input = new RmStep(); - $input->path = dirname( $relativePath ); - - $this->step->run( $input ); - - expect( $this->fileSystem->exists( dirname( $absolutePath ) ) )->toBeFalse(); -} ); - -it( 'should remove a file', function () { - $relativePath = "file.txt"; - $absolutePath = $this->runtime->resolvePath( $relativePath ); - $this->fileSystem->dumpFile( $absolutePath, "test" ); - - $input = new RmStep(); - $input->path = $relativePath; - - $this->step->run( $input ); - - expect( $this->fileSystem->exists( $absolutePath ) )->toBeFalse(); -} ); - -it( 'should throw an exception when asked to remove a nonexistent directory (using a relative path)', function () { - $relativePath = "dir"; - - $input = new RmStep(); - $input->path = $relativePath; - - $absolutePath = $this->runtime->resolvePath( $relativePath ); - expect( fn() => $this->step->run( $input ) )->toThrow( BlueprintException::class, - "Failed to remove \"$absolutePath\": the directory or file does not exist." ); -} ); - -it( 'should throw an exception when asked to remove a nonexistent directory (using an absolute path)', function () { - $absolutePath = "/dir"; - - $input = new RmStep(); - $input->path = $absolutePath; - - expect( fn() => $this->step->run( $input ) )->toThrow( BlueprintException::class, - "Failed to remove \"$absolutePath\": the directory or file does not exist." ); -} ); - -it( 'should throw an exception when asked to remove a nonexistent file', function () { - $relativePath = "file.txt"; - - $input = new RmStep(); - $input->path = $relativePath; - - $absolutePath = $this->runtime->resolvePath( $relativePath ); - expect( fn() => $this->step->run( $input ) )->toThrow( BlueprintException::class, - "Failed to remove \"$absolutePath\": the directory or file does not exist." ); -} );