From 0a58ba84d8f2888b26d601717f318645ee2bdb04 Mon Sep 17 00:00:00 2001 From: hdelaforce-payplug <51410640+hdelaforce-payplug@users.noreply.github.com> Date: Thu, 25 Jun 2026 11:34:44 +0200 Subject: [PATCH 1/2] Feature/pre 3360 add refund tool (#19) --- .github/workflows/ci.yml | 81 +- .gitignore | 1 + .php-cs-fixer.dist.php | 21 +- Dockerfile | 40 +- Makefile | 30 +- captainhook.json | 6 +- composer.json | 24 +- composer.lock | 4813 +++++++---------- docker-compose.yml | 3 +- phpstan.neon | 5 +- rector.php | 24 - scripts/check-branch-name.sh | 22 + scripts/generate-release-composer.php | 53 +- src/Actions/PaymentAction.php | 75 +- src/Gateways/AbstractPaymentGateway.php | 9 +- .../Payment/EmailLinkPaymentGateway.php | 6 +- .../Payment/StandardPaymentGateway.php | 6 +- src/Gateways/PaymentGatewayManager.php | 4 +- src/Gateways/RefundGateway.php | 28 + src/Models/Entities/PaymentInputDTO.php | 45 +- src/Models/Entities/PaymentOutputDTO.php | 11 +- src/Models/Entities/RefundInputDTO.php | 150 + src/Models/Entities/RefundOutputDTO.php | 138 + src/Utilities/Services/Api.php | 60 +- src/Utilities/Traits/DependenciesLoader.php | 66 - src/Validators/PaymentResourceValidator.php | 63 + src/Validators/RefundValidator.php | 103 + stubs/PayplugPayment.stub | 27 + .../PaymentAction/createActionTest.php | 22 +- .../PaymentAction/refundActionTest.php | 83 + tests/Mock/PaymentInputDTOMock.php | 6 +- tests/Mock/PaymentMock.php | 4 +- tests/Mock/PaymentOutputDTOMock.php | 9 +- tests/Mock/RefundInputDTOMock.php | 39 + tests/Mock/RefundOutputDTOMock.php | 48 + tests/Traits/FormatDataProvider.php | 12 +- tests/Traits/TestingTools.php | 22 +- .../PaymentAction/createActionTest.php | 53 +- .../PaymentAction/paymentActionBase.php | 7 +- .../PaymentAction/refundActionTest.php | 176 + .../formatPaymentAttributesTest.php | 7 +- .../standardPaymentGatewayBase.php | 7 +- tests/Units/Gateways/PaymentGateway.php | 11 +- .../formatRefundAttributesTest.php | 55 + .../RefundGateway/refundGatewayBase.php | 25 + 45 files changed, 3157 insertions(+), 3343 deletions(-) delete mode 100644 rector.php create mode 100755 scripts/check-branch-name.sh create mode 100644 src/Gateways/RefundGateway.php create mode 100644 src/Models/Entities/RefundInputDTO.php create mode 100644 src/Models/Entities/RefundOutputDTO.php delete mode 100644 src/Utilities/Traits/DependenciesLoader.php create mode 100644 src/Validators/PaymentResourceValidator.php create mode 100644 src/Validators/RefundValidator.php create mode 100644 stubs/PayplugPayment.stub create mode 100644 tests/Integration/PaymentAction/refundActionTest.php create mode 100644 tests/Mock/RefundInputDTOMock.php create mode 100644 tests/Mock/RefundOutputDTOMock.php create mode 100644 tests/Units/Actions/PaymentAction/refundActionTest.php create mode 100644 tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php create mode 100644 tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 86c6f0e..4f131e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,91 +20,24 @@ jobs: if: github.ref_type != 'tag' && github.event.action != 'closed' uses: payplug/template-ci/.github/workflows/php-quality.yml@main with: - php-version: '8.4' + php-version: '7.1' # ----------------------------------------------------------------------- - # 2. DOWNGRADE — transpile src/ + tests/ to PHP 7.2 - # Runs on: push to feature branch | PR opened/updated → develop - # ----------------------------------------------------------------------- - downgrade: - if: github.ref_type != 'tag' && github.event.action != 'closed' - needs: quality - uses: payplug/template-ci/.github/workflows/php-downgrade.yml@main - with: - php-version: '8.4' - artifact-name: 'payplug-core-php72' - artifact-retention-days: 7 - - # ----------------------------------------------------------------------- - # 3. VALIDATE — install the downgraded package under PHP 7.2 - # Runs on: push to feature branch | PR opened/updated → develop - # ----------------------------------------------------------------------- - validate: - if: github.ref_type != 'tag' && github.event.action != 'closed' - needs: downgrade - uses: payplug/template-ci/.github/workflows/php-validate.yml@main - with: - php-version: '7.2' - artifact-name: 'payplug-core-php72' - - # ----------------------------------------------------------------------- - # 4. TEST — run unit tests against the downgraded PHP 7.2 code - # Runs on: push to feature branch | PR opened/updated → develop - # ----------------------------------------------------------------------- - test-php72: - if: github.ref_type != 'tag' && github.event.action != 'closed' - needs: validate - uses: payplug/template-ci/.github/workflows/php-test-php72.yml@main - with: - php-version: '7.2' - artifact-name: 'payplug-core-php72' - test-namespace: 'PayplugPluginCore\tests\' - - # ----------------------------------------------------------------------- - # 5. PUSH-DIST — push transpiled code to dist/{php-target}/{branch} - # Runs in parallel with validate, as soon as downgrade succeeds. - # On feature branch push → dist/php72/feature/xxxx - # On push to develop → dist/php72/develop - # ----------------------------------------------------------------------- - push-dist: - if: github.ref_type != 'tag' && github.event.action != 'closed' - needs: validate - permissions: - contents: write - uses: payplug/template-ci/.github/workflows/php72-push-dist.yml@main - with: - artifact-name: 'payplug-core-php72' - source-branch: ${{ github.head_ref || github.ref_name }} - php-target: 'php72' - - # ----------------------------------------------------------------------- - # 6. PACKAGE — zip and store the artifact on PR merged → develop + # 2. PACKAGE — zip and store the artifact on PR merged → develop # ----------------------------------------------------------------------- package: if: github.ref_type != 'tag' && github.event.action != 'closed' uses: payplug/template-ci/.github/workflows/php-package.yml@main with: - php-version: '8.4' - zip-prefix: 'payplug-plugin-core-php72' - - # ----------------------------------------------------------------------- - # 7. CLEANUP-DIST — delete dist/php72/feature/xxxx when PR is merged - # ----------------------------------------------------------------------- - cleanup-dist: - if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true - permissions: - contents: write - uses: payplug/template-ci/.github/workflows/php72-delete-dist.yml@main - with: - source-branch: ${{ github.head_ref }} - php-target: 'php72' + php-version: '7.1' + zip-prefix: 'payplug-plugin-core-php71' # ----------------------------------------------------------------------- - # 8. RELEASE — create a GitHub Release from a tag on main + # 3. RELEASE — create a GitHub Release from a tag on main # ----------------------------------------------------------------------- release: if: github.event_name == 'push' && github.ref_type == 'tag' uses: payplug/template-ci/.github/workflows/php-release.yml@main with: - php-version: '8.4' - zip-prefix: 'payplug-plugin-core-php72' + php-version: '7.1' + zip-prefix: 'payplug-plugin-core-php71' diff --git a/.gitignore b/.gitignore index 2f3bd80..1ee15c7 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ vendor # PHP CS Fixer .php-cs-fixer.php .php-cs-fixer.cache +.php_cs.cache # PHPStan var/ diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 2ac9e9c..70d0522 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -10,15 +10,16 @@ return (new PhpCsFixer\Config()) ->setRiskyAllowed(true) ->setRules([ - '@PSR12' => true, - '@PHP84Migration' => true, - 'array_syntax' => ['syntax' => 'short'], - 'no_unused_imports' => true, - 'ordered_imports' => ['sort_algorithm' => 'alpha'], - 'single_quote' => true, - 'trailing_comma_in_multiline' => true, - 'declare_strict_types' => true, - 'void_return' => true, - 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced'], + '@PSR12' => true, + '@PHP71Migration' => true, + 'array_syntax' => ['syntax' => 'short'], + 'no_unused_imports' => true, + 'ordered_imports' => ['sort_algorithm' => 'alpha'], + 'single_quote' => true, + // php-cs-fixer 2.x rule name (renamed to trailing_comma_in_multiline in 3.x) + 'trailing_comma_in_multiline_array' => true, + 'declare_strict_types' => true, + 'void_return' => true, + 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced'], ]) ->setFinder($finder); diff --git a/Dockerfile b/Dockerfile index 57adc3e..a7a4124 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,36 @@ -FROM php:8.1-cli +FROM composer:2.2 AS composer -# Install system dependencies -RUN apt-get update && apt-get install -y \ - git \ - unzip \ - curl \ +FROM php:7.1-cli + +# Debian Buster is EOL — redirect to archive repos before any apt call +RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list \ + && sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list \ + && sed -i '/buster-updates/d' /etc/apt/sources.list + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git=1:2.20.1-2+deb10u8 \ + unzip=6.0-23+deb10u3 \ + curl=7.64.0-4+deb10u9 \ && rm -rf /var/lib/apt/lists/* -# Install additional extensions via pecl -RUN pecl install xdebug \ +# Xdebug 2.9.8 — last release supporting PHP 7.1 (Xdebug 3.x requires PHP >=7.2) +RUN pecl install xdebug-2.9.8 \ && docker-php-ext-enable xdebug -# Configure Xdebug — mode is controlled at runtime via XDEBUG_MODE env var -RUN echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ - && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ - && echo "xdebug.start_with_request=trigger" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +# Xdebug 2.x config — debug off by default +# To enable step-debug: XDEBUG_CONFIG="remote_enable=1 remote_autostart=1" +RUN echo "xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.remote_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini -# Install Composer -COPY --from=composer:2 /usr/bin/composer /usr/bin/composer +COPY --from=composer /usr/bin/composer /usr/bin/composer WORKDIR /app +RUN useradd -m -u 1000 appuser && chown appuser:appuser /app + +HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD ["php", "--version"] + +USER appuser + CMD ["php", "-a"] diff --git a/Makefile b/Makefile index 9f522c2..5111ed4 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,11 @@ -.PHONY: build up down shell install update test stan lint fix debug release +.PHONY: build up down shell install update test stan lint fix debug release commit-amend commit-push commit-squash DC = docker compose PHP = $(DC) run --rm php -PHP_DEBUG = XDEBUG_MODE=debug $(DC) run --rm php +# Xdebug 2.x step-debug: passes remote_enable + remote_autostart via XDEBUG_CONFIG +PHP_DEBUG = XDEBUG_CONFIG="remote_enable=1 remote_autostart=1" $(DC) run --rm php + +GIT = git ## Docker build: @@ -46,16 +49,12 @@ cs-lint: cs-fix: $(PHP) vendor/bin/php-cs-fixer fix -rector-dry: - $(PHP) vendor/bin/rector process --dry-run - -## Release (downgrade src/ to PHP 7.2 into payplug-core/) +## Release — package src/ + tests/ into payplug-core/ release: rm -rf payplug-core && mkdir payplug-core && cp -r src payplug-core/ && cp -r tests payplug-core/ - $(PHP) vendor/bin/rector process --config rector.php $(PHP) php scripts/generate-release-composer.php -## Debug (Xdebug step-debug enabled) +## Debug (Xdebug 2.x step-debug enabled) debug: $(PHP_DEBUG) bash @@ -67,4 +66,17 @@ install: build update comp-install audit: $(PHP) composer audit -security: audit \ No newline at end of file +security: audit + +# Git +commit-amend: + $(GIT) commit -a --amend --no-edit + +commit-push: + $(GIT) push --force-with-lease + +commit-squash: + $(GIT) reset --soft $$(git merge-base origin/develop HEAD) + $(GIT) commit --edit -m "$${msg:-$$(git log -1 --pretty=%B)}" + +commit-amend-push: commit-amend commit-push diff --git a/captainhook.json b/captainhook.json index 248e361..62778af 100644 --- a/captainhook.json +++ b/captainhook.json @@ -13,10 +13,8 @@ "pre-commit": { "actions": [ { - "action": "\\CaptainHook\\App\\Hook\\Branch\\Action\\EnsureNaming", - "options": { - "regex": "/^(feature|fix|hotfix|refactor|release)\\/(PRE|MAG|SYL|SMP)-\\d+(-[a-z0-9]+)*$/" - } + "action": "sh scripts/check-branch-name.sh", + "options": {} }, { "action": "vendor/bin/phpstan analyse --configuration=phpstan.neon", diff --git a/composer.json b/composer.json index c435068..e2a50df 100644 --- a/composer.json +++ b/composer.json @@ -10,43 +10,39 @@ } ], "require": { - "php": ">=8.1", - "captainhook/captainhook": "^5.28", + "php": "^7.1", "payplug/payplug-php": "^4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "mockery/mockery": "^1.6", - "phpstan/phpstan": "^2.0", + "captainhook/captainhook": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "mockery/mockery": "^1.3", + "phpstan/phpstan": "^0.12", "phpstan/phpstan-mockery": "*", "phpstan/phpstan-phpunit": "*", - "phpunit/phpunit": "^10.0", - "rector/rector": "^2.0" + "phpunit/phpunit": "^7.5" }, "autoload": { "psr-4": { - "PayplugPluginCore\\": "src/" + "PayPlugPluginCore\\": "src/" } }, "autoload-dev": { "psr-4": { - "PayplugPluginCore\\Tests\\": "tests/" + "PayPlugPluginCore\\Tests\\": "tests/" } }, "scripts": { - "post-install-cmd": "vendor/bin/captainhook install --force --skip-existing", - "post-update-cmd": "vendor/bin/captainhook install --force --skip-existing", + "post-install-cmd": "vendor/bin/captainhook install --force", + "post-update-cmd": "vendor/bin/captainhook install --force", "test": "vendor/bin/phpunit tests", "test-unit": "vendor/bin/phpunit tests --group unit", "test-inte": "vendor/bin/phpunit tests --group integration", "stan": "vendor/bin/phpstan analyse --configuration=phpstan.neon", "cs-lint": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --dry-run --diff", "cs-fix": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php", - "rector": "vendor/bin/rector process", - "rector-dry": "vendor/bin/rector process --dry-run", "release": [ "rm -rf payplug-core && mkdir payplug-core && cp -r src payplug-core/ && cp -r tests payplug-core/", - "vendor/bin/rector process --config rector.php", "php scripts/generate-release-composer.php" ] }, diff --git a/composer.lock b/composer.lock index 678b6fc..7f2ff47 100644 --- a/composer.lock +++ b/composer.lock @@ -4,53 +4,108 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a7f088bff2e6ccd4cd71518e7652220e", + "content-hash": "7267f9bfee4cb45b760836b310f8547f", "packages": [ + { + "name": "payplug/payplug-php", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/payplug/payplug-php.git", + "reference": "fddb60a9d0afe3b06d7fac7bec2df33cd0164009" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/payplug/payplug-php/zipball/fddb60a9d0afe3b06d7fac7bec2df33cd0164009", + "reference": "fddb60a9d0afe3b06d7fac7bec2df33cd0164009", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-openssl": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "5.7.*", + "rector/rector": "^1.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "Payplug\\": "lib/" + }, + "psr-4": { + "Payplug\\": "lib/Payplug" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PayPlug", + "email": "support@payplug.com" + }, + { + "name": "Daniel FLOREZ MURILLO", + "email": "dmurillo@payplug.com" + } + ], + "description": "A simple PHP library for PayPlug public API.", + "homepage": "https://www.payplug.com", + "support": { + "issues": "https://github.com/payplug/payplug-php/issues", + "source": "https://github.com/payplug/payplug-php/tree/4.1.0" + }, + "time": "2015-05-06T00:00:00+00:00" + } + ], + "packages-dev": [ { "name": "captainhook/captainhook", - "version": "5.29.2", + "version": "4.5.8", "source": { "type": "git", "url": "https://github.com/captainhook-git/captainhook.git", - "reference": "805d44b0de8ed143f4acfb8c6bcb788cdbc42963" + "reference": "b89ee9e6b445f44173b2a2a142513d597f490244" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/805d44b0de8ed143f4acfb8c6bcb788cdbc42963", - "reference": "805d44b0de8ed143f4acfb8c6bcb788cdbc42963", + "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/b89ee9e6b445f44173b2a2a142513d597f490244", + "reference": "b89ee9e6b445f44173b2a2a142513d597f490244", "shasum": "" }, "require": { - "captainhook/secrets": "^0.9.4", "ext-json": "*", + "ext-simplexml": "*", "ext-spl": "*", - "ext-xml": "*", - "php": ">=8.0", - "sebastianfeldmann/camino": "^0.9.2", - "sebastianfeldmann/cli": "^3.3", - "sebastianfeldmann/git": "^3.16.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" + "php": "^7.1", + "sebastianfeldmann/camino": "^0.9.1", + "sebastianfeldmann/cli": "^3.0", + "sebastianfeldmann/git": "^2.2", + "symfony/console": ">=2.7" }, "replace": { "sebastianfeldmann/captainhook": "*" }, "require-dev": { - "composer/composer": "~1 || ^2.0", - "mikey179/vfsstream": "~1" + "composer/composer": "~1", + "mikey179/vfsstream": "~1", + "phpunit/phpunit": "^7.0" }, "bin": [ - "bin/captainhook" + "captainhook", + "captainhook-run" ], "type": "library", "extra": { - "captainhook": { - "config": "captainhook.json" - }, "branch-alias": { - "dev-main": "6.0.x-dev" - } + "dev-master": "4.3.x-dev" + }, + "captainhook-config": "captainhook.json", + "captainhook-git-dir": ".git" }, "autoload": { "psr-4": { @@ -68,50 +123,58 @@ } ], "description": "PHP git hook manager", - "homepage": "https://php.captainhook.info/", + "homepage": "https://github.com/captainhookphp/captainhook", "keywords": [ "commit-msg", "git", "hooks", - "post-merge", "pre-commit", "pre-push", "prepare-commit-msg" ], "support": { - "issues": "https://github.com/captainhook-git/captainhook/issues", - "source": "https://github.com/captainhook-git/captainhook/tree/5.29.2" + "issues": "https://github.com/captainhookphp/captainhook/issues", + "source": "https://github.com/captainhook-git/captainhook/tree/4.5.8" }, "funding": [ { - "url": "https://github.com/sponsors/sebastianfeldmann", + "url": "https://github.com/sebastianfeldmann", "type": "github" } ], - "time": "2026-03-25T19:32:25+00:00" + "time": "2019-12-02T15:20:27+00:00" }, { - "name": "captainhook/secrets", - "version": "0.9.7", + "name": "composer/pcre", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/captainhook-git/secrets.git", - "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631" + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhook-git/secrets/zipball/d62c97f75f81ac98e22f1c282482bd35fa82f631", - "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.0" + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { "psr-4": { - "CaptainHook\\Secrets\\": "src/" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -120,63 +183,68 @@ ], "authors": [ { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Utility classes to detect secrets", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "commit-msg", - "keys", - "passwords", - "post-merge", - "prepare-commit-msg", - "secrets", - "tokens" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/captainhook-git/secrets/issues", - "source": "https://github.com/captainhook-git/secrets/tree/0.9.7" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.0.1" }, "funding": [ { - "url": "https://github.com/sponsors/sebastianfeldmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2025-04-08T07:10:48+00:00" + "time": "2022-01-21T20:24:37+00:00" }, { - "name": "payplug/payplug-php", - "version": "4.0.0", + "name": "composer/semver", + "version": "3.4.4", "source": { "type": "git", - "url": "https://github.com/payplug/payplug-php.git", - "reference": "ad19dee72100668e14c8c4974a6791ca2d1c8482" + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/payplug/payplug-php/zipball/ad19dee72100668e14c8c4974a6791ca2d1c8482", - "reference": "ad19dee72100668e14c8c4974a6791ca2d1c8482", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-openssl": "*", - "php": ">=5.3.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "5.7.*", - "rector/rector": "^1.2" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { - "psr-0": { - "Payplug\\": "lib/" - }, "psr-4": { - "Payplug\\": "lib/Payplug" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -185,44 +253,73 @@ ], "authors": [ { - "name": "PayPlug", - "email": "support@payplug.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "A simple PHP library for PayPlug public API.", - "homepage": "https://www.payplug.com", + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { - "issues": "https://github.com/payplug/payplug-php/issues", - "source": "https://github.com/payplug/payplug-php/tree/4.0.0" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" }, - "time": "2015-05-06T00:00:00+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" }, { - "name": "psr/container", - "version": "2.0.2", + "name": "composer/xdebug-handler", + "version": "2.0.5", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", "shasum": "" }, "require": { - "php": ">=7.4.0" + "composer/pcre": "^1", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -231,51 +328,71 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Restarts a process without Xdebug.", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "Xdebug", + "performance" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" }, - "time": "2021-11-05T16:47:00+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-24T20:20:32+00:00" }, { - "name": "sebastianfeldmann/camino", - "version": "0.9.5", + "name": "doctrine/annotations", + "version": "1.14.4", "source": { "type": "git", - "url": "https://github.com/sebastianfeldmann/camino.git", - "reference": "bf2e4c8b2a029e9eade43666132b61331e3e8184" + "url": "https://github.com/doctrine/annotations.git", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/bf2e4c8b2a029e9eade43666132b61331e3e8184", - "reference": "bf2e4c8b2a029e9eade43666132b61331e3e8184", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { - "php": ">=7.1" + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, + "type": "library", "autoload": { "psr-4": { - "SebastianFeldmann\\Camino\\": "src/" + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", @@ -284,119 +401,119 @@ ], "authors": [ { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Path management the OO way", - "homepage": "https://github.com/sebastianfeldmann/camino", + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ - "file system", - "path" + "annotations", + "docblock", + "parser" ], "support": { - "issues": "https://github.com/sebastianfeldmann/camino/issues", - "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.5" + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.4" }, - "funding": [ - { - "url": "https://github.com/sebastianfeldmann", - "type": "github" - } - ], - "time": "2022-01-03T13:15:10+00:00" + "abandoned": true, + "time": "2024-09-05T10:15:52+00:00" }, { - "name": "sebastianfeldmann/cli", - "version": "3.4.2", + "name": "doctrine/deprecations", + "version": "1.1.6", "source": { "type": "git", - "url": "https://github.com/sebastianfeldmann/cli.git", - "reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/6fa122afd528dae7d7ec988a604aa6c600f5d9b5", - "reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { - "php": ">=7.2" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "symfony/process": "^4.3 | ^5.0" + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, + "type": "library", "autoload": { "psr-4": { - "SebastianFeldmann\\Cli\\": "src/" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "PHP cli helper classes", - "homepage": "https://github.com/sebastianfeldmann/cli", - "keywords": [ - "cli" - ], + "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/sebastianfeldmann/cli/issues", - "source": "https://github.com/sebastianfeldmann/cli/tree/3.4.2" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "funding": [ - { - "url": "https://github.com/sebastianfeldmann", - "type": "github" - } - ], - "time": "2024-11-26T10:19:01+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { - "name": "sebastianfeldmann/git", - "version": "3.16.0", + "name": "doctrine/instantiator", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "40a5cc043f0957228767f639e370ec92590e940f" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/40a5cc043f0957228767f639e370ec92590e940f", - "reference": "40a5cc043f0957228767f639e370ec92590e940f", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { - "ext-json": "*", - "ext-libxml": "*", - "ext-simplexml": "*", - "php": ">=8.0", - "sebastianfeldmann/cli": "^3.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "mikey179/vfsstream": "^1.6" + "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", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, "autoload": { "psr-4": { - "SebastianFeldmann\\Git\\": "src/" + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -405,81 +522,67 @@ ], "authors": [ { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" } ], - "description": "PHP git wrapper", - "homepage": "https://github.com/sebastianfeldmann/git", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ - "git" + "constructor", + "instantiate" ], "support": { - "issues": "https://github.com/sebastianfeldmann/git/issues", - "source": "https://github.com/sebastianfeldmann/git/tree/3.16.0" + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { - "url": "https://github.com/sebastianfeldmann", - "type": "github" + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" } ], - "time": "2026-01-26T20:59:18+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { - "name": "symfony/console", - "version": "v8.1.0", + "name": "doctrine/lexer", + "version": "2.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a" + "url": "https://github.com/doctrine/lexer.git", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", - "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "shasum": "" }, "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php85": "^1.32", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4.6|^8.0.6" - }, - "conflict": { - "symfony/dependency-injection": "<8.1", - "symfony/event-dispatcher": "<8.1" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^8.1", - "symfony/event-dispatcher": "^8.1", - "symfony/filesystem": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/lock": "^7.4|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^7.4|^8.0", - "symfony/process": "^7.4|^8.0", - "symfony/stopwatch": "^7.4|^8.0", - "symfony/uid": "^7.4|^8.0", - "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0" + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.21" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Common\\Lexer\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -487,75 +590,127 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "cli", - "command-line", - "console", - "terminal" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.1.0" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2024-02-05T11:35:39+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.7.0", + "name": "friendsofphp/php-cs-fixer", + "version": "v2.19.3", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", + "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", "shasum": "" }, "require": { - "php": ">=8.1" + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.2 || ^2.0", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0 || ^8.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" }, - "type": "library", + "require-dev": { + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.4", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.4.2", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", + "symfony/phpunit-bridge": "^5.2.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-master": "2.19-dev" } }, "autoload": { - "files": [ - "function.php" + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/Test/TokensWithObservedTransformers.php", + "tests/TestCase.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -564,1423 +719,343 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "A tool to automatically fix PHP code style", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/keradus", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-04-13T15:52:40+00:00" + "time": "2021-11-15T17:17:55+00:00" }, { - "name": "symfony/filesystem", - "version": "v8.1.0", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/99aec13b82b4967ec5088222c4a3ecca955949c2", - "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" }, "require-dev": { - "symfony/process": "^7.4|^8.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "hamcrest" ] }, "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" - } + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.1.0" + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", + "name": "mockery/mockery", + "version": "1.3.6", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + "url": "https://github.com/mockery/mockery.git", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-master": "1.3.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "psr-0": { + "Mockery": "library/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.6" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2022-09-07T15:05:49+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "name": "myclabs/deep-copy", + "version": "1.13.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { - "php": ">=7.2" + "php": "^7.1 || ^8.0" }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-26T05:58:03+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.38.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-25T13:48:31+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.38.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/14c5439eec4ccff081ac14eca2dc57feb2a66d92", - "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-26T12:51:13+00:00" - }, - { - "name": "symfony/polyfill-php85", - "version": "v1.38.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php85\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-26T02:25:22+00:00" - }, - { - "name": "symfony/process", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", - "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", - "shasum": "" - }, - "require": { - "php": ">=8.4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v8.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-29T05:06:50+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.7.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "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": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-03-28T09:44:51+00:00" - }, - { - "name": "symfony/string", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v8.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-05-29T05:06:50+00:00" - } - ], - "packages-dev": [ - { - "name": "clue/ndjson-react", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/clue/reactphp-ndjson.git", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/stream": "^1.2" - }, - "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Clue\\React\\NDJson\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", - "homepage": "https://github.com/clue/reactphp-ndjson", - "keywords": [ - "NDJSON", - "json", - "jsonlines", - "newline", - "reactphp", - "streaming" - ], - "support": { - "issues": "https://github.com/clue/reactphp-ndjson/issues", - "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-12-23T10:58:28+00:00" - }, - { - "name": "composer/pcre", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<1.11.10" - }, - "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" - }, - "type": "library", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-11-12T16:29:46+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.4" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - } - ], - "time": "2025-08-20T19:15:30+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+00:00" - }, - { - "name": "ergebnis/agent-detector", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/ergebnis/agent-detector.git", - "reference": "e211f17928c8b95a51e06040792d57f5462fb271" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/e211f17928c8b95a51e06040792d57f5462fb271", - "reference": "e211f17928c8b95a51e06040792d57f5462fb271", - "shasum": "" - }, - "require": { - "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.51.0", - "ergebnis/license": "^2.7.0", - "ergebnis/php-cs-fixer-config": "^6.60.2", - "ergebnis/phpstan-rules": "^2.13.1", - "ergebnis/phpunit-slow-test-detector": "^2.24.0", - "ergebnis/rector-rules": "^1.18.1", - "fakerphp/faker": "^1.24.1", - "infection/infection": "^0.26.6", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.54", - "phpstan/phpstan-deprecation-rules": "^2.0.4", - "phpstan/phpstan-phpunit": "^2.0.16", - "phpstan/phpstan-strict-rules": "^2.0.10", - "phpunit/phpunit": "^9.6.34", - "rector/rector": "^2.4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - }, - "composer-normalize": { - "indent-size": 2, - "indent-style": "space" - } - }, - "autoload": { - "psr-4": { - "Ergebnis\\AgentDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andreas Möller", - "email": "am@localheinz.com", - "homepage": "https://localheinz.com" - } - ], - "description": "Provides a detector for detecting the presence of an agent.", - "homepage": "https://github.com/ergebnis/agent-detector", - "support": { - "issues": "https://github.com/ergebnis/agent-detector/issues", - "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md", - "source": "https://github.com/ergebnis/agent-detector" - }, - "time": "2026-05-07T08:19:07+00:00" - }, - { - "name": "evenement/evenement", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^9 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Evenement\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/v3.0.2" - }, - "time": "2023-08-08T05:53:35+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-deprecation-rules": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "CPU", - "core" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { - "url": "https://github.com/theofidry", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.95.4", + "name": "phar-io/manifest", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "3f8f68856837a77e1f1d870354eca3c8747f2f72" + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3f8f68856837a77e1f1d870354eca3c8747f2f72", - "reference": "3f8f68856837a77e1f1d870354eca3c8747f2f72", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.3", - "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.5", - "ergebnis/agent-detector": "^1.2", - "ext-filter": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.3", - "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.6", - "react/event-loop": "^1.5", - "react/socket": "^1.16", - "react/stream": "^1.4", - "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0", - "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.37", - "symfony/polyfill-php80": "^1.37", - "symfony/polyfill-php81": "^1.37", - "symfony/polyfill-php84": "^1.37", - "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", - "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" - }, - "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.11.0", - "infection/infection": "^0.32.7", - "justinrainbow/json-schema": "^6.8.0", - "keradus/cli-executor": "^2.3", - "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.9.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", - "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55", - "symfony/polyfill-php85": "^1.37", - "symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.8", - "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.11" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - }, - "exclude-from-classmap": [ - "src/**/Internal/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "A tool to automatically fix PHP code style", - "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.4" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2026-06-03T18:02:44+00:00" + "time": "2018-07-08T19:23:20+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.1.1", + "name": "phar-io/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { - "php": "^7.4|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + "php": "^5.6 || ^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, "autoload": { "classmap": [ - "hamcrest" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" }, - "time": "2025-04-30T06:54:44+00:00" + "time": "2018-07-08T19:19:57+00:00" }, { - "name": "mockery/mockery", - "version": "1.6.12", + "name": "php-cs-fixer/diff", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" }, "type": "library", "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1988,294 +1063,272 @@ ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" }, { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" + "name": "SpacePossum" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" + "diff" ], "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" }, - "time": "2024-05-16T03:13:13+00:00" + "abandoned": true, + "time": "2020-10-14T08:39:05+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.13.4", + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "php": ">=7.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" + "time": "2020-04-27T09:25:28+00:00" }, { - "name": "nikic/php-parser", - "version": "v5.7.0", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.4", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], + "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/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2019-12-28T18:55:12+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.4", + "name": "phpdocumentor/type-resolver", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2" }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2019-08-22T18:11:29+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "phpspec/prophecy", + "version": "v1.10.3", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", - "autoload": { - "classmap": [ - "src/" - ] + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Library for handling version information and constraints", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" }, - "time": "2022-02-21T01:04:05+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpstan/phpstan", - "version": "2.2.1", + "version": "0.12.100", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "48236ddf823547081b2b153d1cd2994b784328c3" + }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dea9c8f2d25cc849391042b71e429c1a4bf82660", - "reference": "dea9c8f2d25cc849391042b71e429c1a4bf82660", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3", + "reference": "48236ddf823547081b2b153d1cd2994b784328c3", "shasum": "" }, "require": { - "php": "^7.4|^8.0" + "php": "^7.1|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -2285,6 +1338,11 @@ "phpstan.phar" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, "autoload": { "files": [ "bootstrap.php" @@ -2294,28 +1352,10 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Ondřej Mirtes" - }, - { - "name": "Markus Staab" - }, - { - "name": "Vincent Langlet" - } - ], "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "source": "https://github.com/phpstan/phpstan/tree/0.12.100" }, "funding": [ { @@ -2325,34 +1365,38 @@ { "url": "https://github.com/phpstan", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" } ], - "time": "2026-05-28T14:44:12+00:00" + "time": "2022-11-01T09:52:08+00:00" }, { "name": "phpstan/phpstan-mockery", - "version": "2.0.0", + "version": "0.12.14", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-mockery.git", - "reference": "89a949d0ac64298e88b7c7fa00caee565c198394" + "reference": "7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394", - "reference": "89a949d0ac64298e88b7c7fa00caee565c198394", + "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f", + "reference": "7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0" + "php": "^7.1 || ^8.0", + "phpstan/phpstan": "^0.12.60" }, "require-dev": { - "mockery/mockery": "^1.6.11", + "mockery/mockery": "^1.2.4", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6" + "phpstan/phpstan-phpunit": "^0.12.16", + "phpstan/phpstan-strict-rules": "^0.12.5", + "phpunit/phpunit": "^9.5" }, "type": "phpstan-extension", "extra": { @@ -2360,6 +1404,9 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "0.12-dev" } }, "autoload": { @@ -2374,37 +1421,35 @@ "description": "PHPStan Mockery extension", "support": { "issues": "https://github.com/phpstan/phpstan-mockery/issues", - "source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0" + "source": "https://github.com/phpstan/phpstan-mockery/tree/0.12.14" }, - "time": "2024-10-14T03:18:12+00:00" + "time": "2021-06-10T12:12:36+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "2.0.16", + "version": "0.12.22", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32" + "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6ab598e1bc106e6827fd346ae4a12b4a5d634c32", - "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", + "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.32" + "php": "^7.1 || ^8.0", + "phpstan/phpstan": "^0.12.92" }, "conflict": { "phpunit/phpunit": "<7.0" }, "require-dev": { - "nikic/php-parser": "^5", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-deprecation-rules": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6" + "phpstan/phpstan-strict-rules": "^0.12.6", + "phpunit/phpunit": "^9.5" }, "type": "phpstan-extension", "extra": { @@ -2413,6 +1458,9 @@ "extension.neon", "rules.neon" ] + }, + "branch-alias": { + "dev-master": "0.12-dev" } }, "autoload": { @@ -2425,55 +1473,48 @@ "MIT" ], "description": "PHPUnit extensions and rules for PHPStan", - "keywords": [ - "static analysis" - ], "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.16" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.22" }, - "time": "2026-02-14T09:05:21+00:00" + "time": "2021-08-12T10:53:43+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "6.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "shasum": "" }, "require": { "ext-dom": "*", - "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -2501,41 +1542,34 @@ ], "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.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "69deeb8664f611f156a924154985fbd4911eb36b" }, "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/69deeb8664f611f156a924154985fbd4911eb36b", + "reference": "69deeb8664f611f156a924154985fbd4911eb36b", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2562,8 +1596,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/2.0.6" }, "funding": [ { @@ -2571,38 +1604,26 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-03-01T13:39:50+00:00" }, { - "name": "phpunit/php-invoker", - "version": "4.0.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -2619,47 +1640,41 @@ "role": "lead" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "process" + "template" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "phpunit/php-text-template", - "version": "3.0.1", + "name": "phpunit/php-timer", + "version": "2.1.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" }, "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-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", + "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -2678,15 +1693,14 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "template" + "timer" ], "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" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" }, "funding": [ { @@ -2694,32 +1708,33 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-03-01T13:42:41+00:00" }, { - "name": "phpunit/php-timer", - "version": "6.0.0", + "name": "phpunit/php-token-stream", + "version": "3.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { - "php": ">=8.1" + "ext-tokenizer": "*", + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2734,18 +1749,17 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "timer" + "tokenizer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" }, "funding": [ { @@ -2753,52 +1767,57 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2021-07-26T12:15:06+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.63", + "version": "7.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "33198268dad71e926626b618f3ec3966661e4d90" + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", - "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.5", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.4", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.1", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -2806,13 +1825,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-master": "7.5-dev" } }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], "classmap": [ "src/" ] @@ -2837,49 +1853,26 @@ ], "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.63" + "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2026-01-27T05:48:37+00:00" + "time": "2020-01-08T08:45:45+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -2889,7 +1882,7 @@ }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2902,44 +1895,43 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Standard interfaces for event handling.", + "description": "Common interface for caching libraries", "keywords": [ - "events", + "cache", "psr", - "psr-14" + "psr-6" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "source": "https://github.com/php-fig/cache/tree/master" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "psr/log", - "version": "3.0.2", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2949,631 +1941,448 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "react/cache", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "homepage": "http://www.php-fig.org/" } ], - "description": "Async, Promise-based cache interface for ReactPHP", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "cache", - "caching", - "promise", - "reactphp" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.2.0" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2022-11-30T15:59:55+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "react/child-process", - "version": "v0.6.7", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/reactphp/child-process.git", - "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", - "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/event-loop": "^1.2", - "react/stream": "^1.4" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/socket": "^1.16", - "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + "php": ">=5.3.0" }, "type": "library", - "autoload": { - "psr-4": { - "React\\ChildProcess\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven library for executing child processes with ReactPHP.", - "keywords": [ - "event-driven", - "process", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.7" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" } - ], - "time": "2025-12-23T15:25:20+00:00" - }, - { - "name": "react/dns", - "version": "v1.14.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", - "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", - "shasum": "" }, - "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.7 || ^1.2.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3 || ^2", - "react/promise-timer": "^1.11" - }, - "type": "library", "autoload": { "psr-4": { - "React\\Dns\\": "src/" + "Psr\\Log\\": "Psr/Log/" } }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Async DNS resolver for ReactPHP", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" + "log", + "psr", + "psr-3" ], "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.14.0" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2025-11-18T19:34:28+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { - "name": "react/event-loop", - "version": "v1.6.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", - "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", + "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "suggest": { - "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + "phpunit/phpunit": "^8.5" }, "type": "library", - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.3" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2025-11-17T20:46:25+00:00" + "time": "2024-03-01T13:45:45+00:00" }, { - "name": "react/promise", - "version": "v3.3.0", + "name": "sebastian/comparator", + "version": "3.0.7", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", - "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", + "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", "shasum": "" }, "require": { - "php": ">=7.1.0" + "php": ">=7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpstan/phpstan": "1.12.28 || 1.4.10", - "phpunit/phpunit": "^9.6 || ^7.5" + "phpunit/phpunit": "^8.5" }, "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "promise", - "promises" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.3.0" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.7" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-08-19T18:57:03+00:00" + "time": "2026-01-24T09:20:25+00:00" }, { - "name": "react/socket", - "version": "v1.17.0", + "name": "sebastian/diff", + "version": "3.0.6", "source": { "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", - "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", + "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.13", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.6 || ^1.2.1", - "react/stream": "^1.4" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3.3 || ^2", - "react/promise-stream": "^1.4", - "react/promise-timer": "^1.11" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Socket\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.17.0" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2025-11-19T20:47:34+00:00" + "time": "2024-03-02T06:16:36+00:00" }, { - "name": "react/stream", - "version": "v1.4.0", + "name": "sebastian/environment", + "version": "4.2.5", "source": { "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "56932f6049a0482853056ffd617c91ffcc754205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", + "reference": "56932f6049a0482853056ffd617c91ffcc754205", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" + "php": ">=7.1" }, "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Stream\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" + "Xdebug", + "environment", + "hhvm" ], "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.4.0" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-06-11T12:45:25+00:00" + "time": "2024-03-01T13:49:59+00:00" }, { - "name": "rector/rector", - "version": "2.4.5", + "name": "sebastian/exporter", + "version": "3.1.5", "source": { "type": "git", - "url": "https://github.com/rectorphp/rector.git", - "reference": "cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c", - "reference": "cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", + "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", "shasum": "" }, "require": { - "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.56" + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" }, - "conflict": { - "rector/rector-doctrine": "*", - "rector/rector-downgrade-php": "*", - "rector/rector-phpunit": "*", - "rector/rector-symfony": "*" - }, - "suggest": { - "ext-dom": "To manipulate phpunit.xml via the custom-rule command" + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^8.5" }, - "bin": [ - "bin/rector" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, "autoload": { - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } ], - "description": "Instant Upgrade and Automated Refactoring of any PHP code", - "homepage": "https://getrector.com/", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "automation", - "dev", - "migration", - "refactoring" + "export", + "exporter" ], "support": { - "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.4.5" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" }, "funding": [ { - "url": "https://github.com/tomasvotruba", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2026-05-26T21:03:22+00:00" + "time": "2022-09-14T06:00:17+00:00" }, { - "name": "sebastian/cli-parser", - "version": "2.0.1", + "name": "sebastian/global-state", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3588,49 +2397,46 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2017-04-27T15:39:26+00:00" }, { - "name": "sebastian/code-unit", - "version": "2.0.0", + "name": "sebastian/object-enumerator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "ac5b293dba925751b808e02923399fb44ff0d541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", + "reference": "ac5b293dba925751b808e02923399fb44ff0d541", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -3645,15 +2451,14 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.5" }, "funding": [ { @@ -3661,32 +2466,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2024-03-01T13:54:02+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "name": "sebastian/object-reflector", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" }, "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/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", + "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -3704,11 +2509,11 @@ "email": "sebastian@phpunit.de" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.3" }, "funding": [ { @@ -3716,36 +2521,32 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-03-01T13:56:04+00:00" }, { - "name": "sebastian/comparator", - "version": "5.0.5", + "name": "sebastian/recursion-context", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/8fe7e75986a9d24b4cceae847314035df7703a5a", + "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -3767,25 +2568,15 @@ "email": "whatthejeff@gmail.com" }, { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "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.5" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.3" }, "funding": [ { @@ -3801,37 +2592,33 @@ "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", "type": "tidelift" } ], - "time": "2026-01-24T09:25:16+00:00" + "time": "2025-08-10T05:25:53+00:00" }, { - "name": "sebastian/complexity", - "version": "3.2.0", + "name": "sebastian/resource-operations", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", + "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3846,16 +2633,13 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "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/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/resource-operations/tree/2.0.3" }, "funding": [ { @@ -3863,33 +2647,29 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-03-01T13:59:09+00:00" }, { - "name": "sebastian/diff", - "version": "5.1.1", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3904,651 +2684,736 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "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.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "sebastian/environment", - "version": "6.1.0", + "name": "sebastianfeldmann/camino", + "version": "0.9.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "url": "https://github.com/sebastianfeldmann/camino.git", + "reference": "bf2e4c8b2a029e9eade43666132b61331e3e8184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/bf2e4c8b2a029e9eade43666132b61331e3e8184", + "reference": "bf2e4c8b2a029e9eade43666132b61331e3e8184", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "SebastianFeldmann\\Camino\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", + "description": "Path management the OO way", + "homepage": "https://github.com/sebastianfeldmann/camino", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "file system", + "path" ], "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "issues": "https://github.com/sebastianfeldmann/camino/issues", + "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.5" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/sebastianfeldmann", "type": "github" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2022-01-03T13:15:10+00:00" }, { - "name": "sebastian/exporter", - "version": "5.1.4", + "name": "sebastianfeldmann/cli", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0735b90f4da94969541dac1da743446e276defa6" + "url": "https://github.com/sebastianfeldmann/cli.git", + "reference": "fbd21f4d2b7978cd7e79432726070dd2ee04cce5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", - "reference": "0735b90f4da94969541dac1da743446e276defa6", + "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/fbd21f4d2b7978cd7e79432726070dd2ee04cce5", + "reference": "fbd21f4d2b7978cd7e79432726070dd2ee04cce5", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "SebastianFeldmann\\Cli\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", + "description": "PHP cli helper classes", + "homepage": "https://github.com/sebastianfeldmann/cli", "keywords": [ - "export", - "exporter" + "cli" ], "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.4" + "issues": "https://github.com/sebastianfeldmann/cli/issues", + "source": "https://github.com/sebastianfeldmann/cli/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", - "type": "tidelift" - } - ], - "time": "2025-09-24T06:09:11+00:00" + "time": "2019-06-17T22:31:05+00:00" }, { - "name": "sebastian/global-state", - "version": "6.0.2", + "name": "sebastianfeldmann/git", + "version": "2.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "url": "https://github.com/sebastianfeldmann/git.git", + "reference": "d52744f4e24e2ad4aef49c303b8397af0b1dffed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/d52744f4e24e2ad4aef49c303b8397af0b1dffed", + "reference": "d52744f4e24e2ad4aef49c303b8397af0b1dffed", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "ext-json": "*", + "php": "^7.1", + "sebastianfeldmann/cli": "^3.0.0" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^7.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "SebastianFeldmann\\Git\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" } ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", + "description": "PHP git wrapper", + "homepage": "https://github.com/sebastianfeldmann/git", "keywords": [ - "global state" + "git" ], "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.2" + "issues": "https://github.com/sebastianfeldmann/git/issues", + "source": "https://github.com/sebastianfeldmann/git/tree/master" + }, + "time": "2019-09-30T15:04:34+00:00" + }, + { + "name": "symfony/console", + "version": "v4.4.49", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.49" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2022-11-05T17:10:16+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "2.0.2", + "name": "symfony/event-dispatcher", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, - "autoload": { - "classmap": [ - "src/" + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "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": { - "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/symfony/event-dispatcher/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "5.0.0", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/761c8b8387cfe5f8026594a75fdf0a4e83ba6974", + "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=7.1.3" }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "1.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.10.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "sebastian/object-reflector", - "version": "3.0.0", + "name": "symfony/filesystem", + "version": "v4.4.42", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "url": "https://github.com/symfony/filesystem.git", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", + "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "source": "https://github.com/symfony/filesystem/tree/v4.4.42" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2022-05-20T08:49:14+00:00" }, { - "name": "sebastian/recursion-context", - "version": "5.0.1", + "name": "symfony/finder", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + "url": "https://github.com/symfony/finder.git", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", + "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.5" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" + "source": "https://github.com/symfony/finder/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" + "url": "https://github.com/fabpot", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-08-10T07:50:56+00:00" + "time": "2022-07-29T07:35:46+00:00" }, { - "name": "sebastian/type", - "version": "4.0.0", + "name": "symfony/options-resolver", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "583f56160f716dd435f1cd721fd14b548f4bb510" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510", + "reference": "583f56160f716dd435f1cd721fd14b548f4bb510", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v4.4.44" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { - "name": "sebastian/version", - "version": "4.0.1", + "name": "symfony/polyfill-ctype", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.0-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v8.1.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102", - "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/security-http": "<7.4", - "symfony/service-contracts": "<2.5" + "php": ">=7.1" }, "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "ext-mbstring": "*" }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/error-handler": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/framework-bundle": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^7.4|^8.0" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4556,18 +3421,25 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -4578,48 +3450,38 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.7.0", + "name": "symfony/polyfill-php70", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" }, "branch-alias": { - "dev-main": "3.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" + "dev-main": "1.20-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -4636,18 +3498,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" }, "funding": [ { @@ -4658,45 +3518,44 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/finder", - "version": "v8.1.0", + "name": "symfony/polyfill-php72", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "58d2e767a66052c1487356f953445634a8194c64" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/58d2e767a66052c1487356f953445634a8194c64", - "reference": "58d2e767a66052c1487356f953445634a8194c64", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { - "php": ">=8.4.1" - }, - "require-dev": { - "symfony/filesystem": "^7.4|^8.0" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4704,18 +3563,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": "Finds files and directories via an intuitive fluent interface", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v8.1.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, "funding": [ { @@ -4726,42 +3591,46 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { - "name": "symfony/options-resolver", - "version": "v8.1.0", + "name": "symfony/polyfill-php73", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "88f9c561f678a02d54b897014049fa839e33ff82" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/88f9c561f678a02d54b897014049fa839e33ff82", - "reference": "88f9c561f678a02d54b897014049fa839e33ff82", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", "shasum": "" }, "require": { - "php": ">=8.4.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4770,23 +3639,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": "Provides an improved replacement for the array_replace PHP function", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "config", - "configuration", - "options" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v8.1.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0" }, "funding": [ { @@ -4797,33 +3667,29 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.37.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1" }, "type": "library", "extra": { @@ -4870,7 +3736,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -4881,50 +3747,38 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.38.1", + "name": "symfony/process", + "version": "v4.4.44", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7" + "url": "https://github.com/symfony/process.git", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", - "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", + "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1.3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Component\\Process\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4933,24 +3787,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.1+ 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-php81/tree/v1.38.1" + "source": "https://github.com/symfony/process/tree/v4.4.44" }, "funding": [ { @@ -4961,51 +3809,48 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-26T12:45:58+00:00" + "time": "2022-06-27T13:16:42+00:00" }, { - "name": "symfony/polyfill-php84", - "version": "v1.38.1", + "name": "symfony/service-contracts", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", + "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "1.1-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Contracts\\Service\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5021,16 +3866,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + "source": "https://github.com/symfony/service-contracts/tree/v1.10.0" }, "funding": [ { @@ -5041,34 +3888,33 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-26T12:51:13+00:00" + "time": "2022-05-27T14:01:05+00:00" }, { "name": "symfony/stopwatch", - "version": "v8.1.0", + "version": "v4.4.46", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "21c07b026905d596e8379caeb115d87aa479499d" + "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/21c07b026905d596e8379caeb115d87aa479499d", - "reference": "21c07b026905d596e8379caeb115d87aa479499d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52", + "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52", "shasum": "" }, "require": { - "php": ">=8.4.1", - "symfony/service-contracts": "^2.5|^3" + "php": ">=7.1.3", + "symfony/service-contracts": "^1.0|^2" + }, + "require-dev": { + "symfony/polyfill-php72": "~1.5" }, "type": "library", "autoload": { @@ -5096,7 +3942,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v8.1.0" + "source": "https://github.com/symfony/stopwatch/tree/v4.4.46" }, "funding": [ { @@ -5107,36 +3953,32 @@ "url": "https://github.com/fabpot", "type": "github" }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2022-09-28T12:53:24+00:00" }, { "name": "theseer/tokenizer", - "version": "1.3.1", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^7.0" }, "type": "library", "autoload": { @@ -5158,25 +4000,72 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + "source": "https://github.com/theseer/tokenizer/tree/master" }, - "funding": [ + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://github.com/theseer", - "type": "github" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "time": "2025-11-17T20:03:58+00:00" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.1" + "php": "^7.1" }, - "platform-dev": {}, - "plugin-api-version": "2.9.0" + "platform-dev": [], + "plugin-api-version": "2.2.0" } diff --git a/docker-compose.yml b/docker-compose.yml index d089c82..22b587f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,8 @@ services: - composer-cache:/root/.composer/cache working_dir: /app environment: - XDEBUG_MODE: "${XDEBUG_MODE:-off}" + # Xdebug 2.x: pass XDEBUG_CONFIG="remote_enable=1 remote_autostart=1" to enable step-debug + XDEBUG_CONFIG: "${XDEBUG_CONFIG:-}" extra_hosts: - "host.docker.internal:host-gateway" diff --git a/phpstan.neon b/phpstan.neon index bd382ff..01179d2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,8 +3,9 @@ includes: - vendor/phpstan/phpstan-phpunit/extension.neon parameters: - level: 8 - phpVersion: 80400 + level: 6 paths: - src - tests + ignoreErrors: + - '#Access to an undefined property Payplug\\Resource\\Payment::\$#' diff --git a/rector.php b/rector.php deleted file mode 100644 index 04d723f..0000000 --- a/rector.php +++ /dev/null @@ -1,24 +0,0 @@ -withPaths([ - __DIR__ . '/payplug-core', - ]) - - // Target PHP 7.2 — Rector applies all downgrade rules from current version down to 7.2 - ->withDowngradeSets(php72: true) - - ->withSkip([ - __DIR__ . '/vendor', - ]); diff --git a/scripts/check-branch-name.sh b/scripts/check-branch-name.sh new file mode 100755 index 0000000..ffdf109 --- /dev/null +++ b/scripts/check-branch-name.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Check that the current branch name follows the project naming convention. +# Expected pattern: (feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-{ticket-id}[-slug] + +BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) + +if [ -z "$BRANCH" ]; then + echo "Could not determine current branch name." + exit 1 +fi + +echo "$BRANCH" | grep -qE '^(feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-[0-9]+(-[a-z0-9]+)*$' + +if [ $? -ne 0 ]; then + echo "" + echo " Branch name does not respect the naming convention." + echo " Current : $BRANCH" + echo " Expected: (feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-{ticket-id}[-slug]" + echo " Example : feature/PRE-1234-add-refund-tool" + echo "" + exit 1 +fi diff --git a/scripts/generate-release-composer.php b/scripts/generate-release-composer.php index 72c0100..618ad18 100644 --- a/scripts/generate-release-composer.php +++ b/scripts/generate-release-composer.php @@ -3,13 +3,13 @@ declare(strict_types=1); /** - * Generates a PHP 7.2-compatible composer.json in release/ from the root composer.json. + * Generates a PHP 7.1-compatible composer.json in payplug-core/ from the root composer.json. * * Changes applied: - * - php requirement → ^7.2 + * - php requirement → ^7.1 * - captainhook removed from require (dev-only tool) - * - require-dev replaced with PHP 7.2-compatible versions (phpunit ^8.5, mockery ^1.3) - * - autoload psr-4: PayplugPluginCore\ → src/; tests/ added so class resolution works with --no-dev + * - require-dev replaced with PHP 7.1-compatible versions (phpunit ^7.5, mockery ^1.3) + * - autoload psr-4: PayPlugPluginCore\ → src/; tests/ added for class resolution */ $root = dirname(__DIR__); @@ -26,43 +26,42 @@ exit(1); } -try { - $jsonContent = file_get_contents($source); - if ($jsonContent === false) { - fwrite(STDERR, "Error: Failed to read {$source}\n"); - exit(1); - } - $data = json_decode($jsonContent, true, 512, JSON_THROW_ON_ERROR); -} catch (JsonException $e) { - fwrite(STDERR, "Error: Failed to decode {$source} as JSON: " . $e->getMessage() . "\n"); +$jsonContent = file_get_contents($source); +if ($jsonContent === false) { + fwrite(STDERR, "Error: Failed to read {$source}\n"); + exit(1); +} + +$data = json_decode($jsonContent, true); +if (json_last_error() !== JSON_ERROR_NONE) { + fwrite(STDERR, "Error: Failed to decode {$source} as JSON: " . json_last_error_msg() . "\n"); exit(1); } // Downgrade PHP requirement -$data['require']['php'] = '^7.2'; +$data['require']['php'] = '^7.1'; // Remove dev-only tools from require and scripts unset($data['require']['captainhook/captainhook'], $data['scripts']); -// Replace require-dev with PHP 7.2-compatible test dependencies -// (phpunit ^11 requires PHP >=8.2; mockery ^1.6 requires PHP >=7.3) +// Replace require-dev with PHP 7.1-compatible test dependencies $data['require-dev'] = [ - 'phpunit/phpunit' => '^8.5', // PHPUnit 8.x requires PHP >=7.2 - 'mockery/mockery' => '^1.3', // Mockery 1.3.x requires PHP >=5.4 + 'phpunit/phpunit' => '^7.5', // PHPUnit 7.x requires PHP >=7.1 + 'mockery/mockery' => '^1.3', // Mockery 1.3.x requires PHP >=5.4 ]; -// Fix autoload: src/ is now a proper subdirectory of the package root. -// The Tests\ prefix is more specific and must be declared before PayplugPluginCore\ so that -// PSR-4 resolves test classes to tests/ regardless of whether composer install runs with --no-dev. +// Fix autoload: src/ and tests/ are subdirectories of the package root. $data['autoload']['psr-4'] = [ - 'PayplugPluginCore\\Tests\\' => 'tests/', - 'PayplugPluginCore\\' => 'src/', + 'PayPlugPluginCore\\Tests\\' => 'tests/', + 'PayPlugPluginCore\\' => 'src/', ]; - -// Mirror in autoload-dev for tools that rely on it -// $data['autoload-dev'] = ['psr-4' => ['PayplugPluginCore\\Tests\\' => 'tests/']]; +unset($data['autoload-dev']); $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n"; +if ($json === false) { + fwrite(STDERR, "Error: Failed to encode composer.json: " . json_last_error_msg() . "\n"); + exit(1); +} $bytesWritten = file_put_contents($target, $json); @@ -71,4 +70,4 @@ exit(1); } -echo "Generated {$target} (PHP ^7.2)\n"; +echo "Generated {$target} (PHP ^7.1)\n"; diff --git a/src/Actions/PaymentAction.php b/src/Actions/PaymentAction.php index 71904ab..2dd9ac5 100644 --- a/src/Actions/PaymentAction.php +++ b/src/Actions/PaymentAction.php @@ -2,29 +2,25 @@ declare(strict_types=1); -namespace PayplugPluginCore\Actions; +namespace PayPlugPluginCore\Actions; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; -use PayplugPluginCore\Models\Entities\PaymentOutputDTO; -use PayplugPluginCore\Utilities\Services\Api; -use PayplugPluginCore\Utilities\Traits\DependenciesLoader; +use PayPlugPluginCore\Gateways\PaymentGatewayManager; +use PayPlugPluginCore\Gateways\RefundGateway; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Models\Entities\PaymentOutputDTO; +use PayPlugPluginCore\Models\Entities\RefundInputDTO; +use PayPlugPluginCore\Models\Entities\RefundOutputDTO; +use PayPlugPluginCore\Utilities\Services\Api; +use PayPlugPluginCore\Validators\PaymentResourceValidator; +use PayPlugPluginCore\Validators\RefundValidator; class PaymentAction { - use DependenciesLoader; - - public function __construct() - { - $this->allowed_gateways = ['payment']; - $this->allowed_services = ['api']; - } - /** * @param PaymentInputDTO $payment_inputDTO * * @return ?PaymentOutputDTO - *@throws \Exception - * + * @throws \Exception */ public function createAction(PaymentInputDTO $payment_inputDTO): ?PaymentOutputDTO { @@ -43,9 +39,7 @@ public function createAction(PaymentInputDTO $payment_inputDTO): ?PaymentOutputD $formated_attributes = $payment_method->formatPaymentAttributes($payment_inputDTO); // load api service with given then return the fallback - /** @var Api $api_service */ - $api_service = $this->get_service('api'); - $api = $api_service->load((string) $payment_inputDTO->getApiBearer()); + $api = $this->get_api()->load((string) $payment_inputDTO->getApiBearer()); $resource = $api->createPaymentResource($formated_attributes); return PaymentOutputDTO::create($resource); @@ -66,9 +60,50 @@ public function captureAction(): void } /** - * @description + * @param RefundInputDTO $refund_inputDTO + * + * @return ?RefundOutputDTO + * @throws \Exception */ - public function refundAction(): void + public function refundAction(RefundInputDTO $refund_inputDTO): ?RefundOutputDTO + { + if (null === $refund_inputDTO->getResource()) { + throw new \Exception('Invalid parameter, resource is required.'); + } + + // Validate the refund input DTO to ensure it contains coherent and allowed data + (new RefundValidator())->validate($refund_inputDTO); + + // Then check if the resource contain in the DTO is a valid payment resource + $resource = $refund_inputDTO->getResource(); + $validator = new PaymentResourceValidator(); + $validator->validate($resource); + $validator->validateIsPaid($resource); + $resource_id = $resource->id; + + // Format the attributes for the refund request + $refund_gateway = $this->get_refund_gateway(); + $formated_attributes = $refund_gateway->formatRefundAttributes($refund_inputDTO); + + // load api service with given then return the fallback + $api = $this->get_api()->load((string)$refund_inputDTO->getApiBearer()); + $refund = $api->refundPaymentResource($resource_id, $formated_attributes); + + return RefundOutputDTO::create($refund); + } + + public function get_payment_gateway(): PaymentGatewayManager + { + return new PaymentGatewayManager(); + } + + public function get_refund_gateway(): RefundGateway + { + return new RefundGateway(); + } + + public function get_api(): Api { + return new Api(); } } diff --git a/src/Gateways/AbstractPaymentGateway.php b/src/Gateways/AbstractPaymentGateway.php index acfb576..ceefc5c 100644 --- a/src/Gateways/AbstractPaymentGateway.php +++ b/src/Gateways/AbstractPaymentGateway.php @@ -2,16 +2,17 @@ declare(strict_types=1); -namespace PayplugPluginCore\Gateways; +namespace PayPlugPluginCore\Gateways; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; abstract class AbstractPaymentGateway { - protected string $id; + /** @var string */ + protected $id; /** @var array */ - protected array $expected_context; + protected $expected_context; /** * @return array diff --git a/src/Gateways/Payment/EmailLinkPaymentGateway.php b/src/Gateways/Payment/EmailLinkPaymentGateway.php index 8a97e36..0e21d1c 100644 --- a/src/Gateways/Payment/EmailLinkPaymentGateway.php +++ b/src/Gateways/Payment/EmailLinkPaymentGateway.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayplugPluginCore\Gateways\Payment; +namespace PayPlugPluginCore\Gateways\Payment; -use PayplugPluginCore\Gateways\AbstractPaymentGateway; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Gateways\AbstractPaymentGateway; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; class EmailLinkPaymentGateway extends AbstractPaymentGateway { diff --git a/src/Gateways/Payment/StandardPaymentGateway.php b/src/Gateways/Payment/StandardPaymentGateway.php index 1609f36..bc11e2a 100644 --- a/src/Gateways/Payment/StandardPaymentGateway.php +++ b/src/Gateways/Payment/StandardPaymentGateway.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayplugPluginCore\Gateways\Payment; +namespace PayPlugPluginCore\Gateways\Payment; -use PayplugPluginCore\Gateways\AbstractPaymentGateway; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Gateways\AbstractPaymentGateway; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; class StandardPaymentGateway extends AbstractPaymentGateway { diff --git a/src/Gateways/PaymentGatewayManager.php b/src/Gateways/PaymentGatewayManager.php index fe78bab..f760833 100644 --- a/src/Gateways/PaymentGatewayManager.php +++ b/src/Gateways/PaymentGatewayManager.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayplugPluginCore\Gateways; +namespace PayPlugPluginCore\Gateways; class PaymentGatewayManager { @@ -15,7 +15,7 @@ public function load(string $payment_method_name): AbstractPaymentGateway throw new \Exception('Invalid parameter, $payment_method_name given should be a non empty string.'); } - $class = '\PayplugPluginCore\Gateways\Payment\\' + $class = '\PayPlugPluginCore\Gateways\Payment\\' . str_replace('_', '', ucwords($payment_method_name, '_')) . 'PaymentGateway'; diff --git a/src/Gateways/RefundGateway.php b/src/Gateways/RefundGateway.php new file mode 100644 index 0000000..9869d7e --- /dev/null +++ b/src/Gateways/RefundGateway.php @@ -0,0 +1,28 @@ + + * @throws \Exception + */ + public function formatRefundAttributes(RefundInputDTO $refund_inputDTO): array + { + $formated_attributes = [ + 'amount' => $refund_inputDTO->getAmount(), + 'metadata' => [ + 'customer_id' => $refund_inputDTO->getCustomerId(), + 'reason' => $refund_inputDTO->getReason(), + ], + ]; + + return $formated_attributes; + } +} diff --git a/src/Models/Entities/PaymentInputDTO.php b/src/Models/Entities/PaymentInputDTO.php index 1f6b27e..2f43bdf 100644 --- a/src/Models/Entities/PaymentInputDTO.php +++ b/src/Models/Entities/PaymentInputDTO.php @@ -2,44 +2,48 @@ declare(strict_types=1); -namespace PayplugPluginCore\Models\Entities; +namespace PayPlugPluginCore\Models\Entities; use Exception; class PaymentInputDTO { - public ?string $api_bearer = null; + /** @var string|null */ + public $api_bearer = null; - public ?string $payment_method = null; + /** @var string|null */ + public $payment_method = null; - public ?int $amount = null; + /** @var int|null */ + public $amount = null; - public ?string $currency_iso_code = null; + /** @var string|null */ + public $currency_iso_code = null; /** @var array|null */ - public ?array $customer = null; // ['billing' => [...], 'shipping' => [...], 'identifier' => ...] + public $customer = null; // ['billing' => [...], 'shipping' => [...], 'identifier' => ...] /** @var array|null */ - public ?array $urls = null; // ['return' => ..., 'cancel' => ..., 'notification' => ...] + public $urls = null; // ['return' => ..., 'cancel' => ..., 'notification' => ...] /** @var array|null */ - public ?array $metadata = null; + public $metadata = null; /** @var array|null */ - public ?array $context = null; + public $context = null; /** * @var array */ - private array $definitions = [ - 'api_bearer' => ['type' => 'string', 'required' => true], - 'payment_method' => ['type' => 'string', 'required' => true], - 'amount' => ['type' => 'int', 'required' => true], + private $definitions = [ + 'api_bearer' => ['type' => 'string', 'required' => true], + 'payment_method' => ['type' => 'string', 'required' => true], + 'amount' => ['type' => 'int', 'required' => true], 'currency_iso_code' => ['type' => 'string', 'required' => true], - 'customer' => ['type' => 'array', 'required' => true], - 'urls' => ['type' => 'array', 'required' => true], - 'metadata' => ['type' => 'array', 'required' => false], - 'context' => ['type' => 'array', 'required' => false], + 'customer' => ['type' => 'array', 'required' => true], + 'urls' => ['type' => 'array', 'required' => true], + 'metadata' => ['type' => 'array', 'required' => false], + 'context' => ['type' => 'array', 'required' => false], ]; /** @@ -67,8 +71,8 @@ public function hydrate(array $props): ?self $this->setCurrencyIsoCode((string) $props['currency_iso_code']); $this->setCustomer((array) $props['customer']); $this->setUrls((array) $props['urls']); - $this->setMetadata((array) $props['metadata']); - $this->setContext((array) $props['context']); + $this->setMetadata(isset($props['metadata']) ? (array) $props['metadata'] : []); + $this->setContext(isset($props['context']) ? (array) $props['context'] : []); return $this; } @@ -204,9 +208,10 @@ public function setUrls(array $urls): void /** * @param array $props * @return self|null + * @throws Exception */ public static function create(array $props): ?self { - return new self()->hydrate($props); + return (new self())->hydrate($props); } } diff --git a/src/Models/Entities/PaymentOutputDTO.php b/src/Models/Entities/PaymentOutputDTO.php index 804a6d7..5b72913 100644 --- a/src/Models/Entities/PaymentOutputDTO.php +++ b/src/Models/Entities/PaymentOutputDTO.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayplugPluginCore\Models\Entities; +namespace PayPlugPluginCore\Models\Entities; use Payplug\Resource\Payment; @@ -59,7 +59,7 @@ public function hydrate(array $props): ?self $this->setResult((bool) $props['result']); $this->setCode((string) $props['code']); $this->setMessage(isset($props['message']) ? (string) $props['message'] : ''); - $this->setResource($props['resource']); + $this->setResource($props['resource'] ?? null); return $this; } @@ -119,7 +119,10 @@ public function setMessage(string $message): void $this->message = $message; } - public function setResource(?Payment $resource): void + /** + * @param Payment|null $resource + */ + public function setResource($resource): void { $this->resource = $resource; } @@ -130,6 +133,6 @@ public function setResource(?Payment $resource): void */ public static function create(array $props): ?self { - return new self()->hydrate($props); + return (new self())->hydrate($props); } } diff --git a/src/Models/Entities/RefundInputDTO.php b/src/Models/Entities/RefundInputDTO.php new file mode 100644 index 0000000..9cc11af --- /dev/null +++ b/src/Models/Entities/RefundInputDTO.php @@ -0,0 +1,150 @@ + + */ + private $definitions = [ + 'api_bearer' => ['type' => 'string', 'required' => true], + 'resource' => ['type' => 'object', 'required' => true], + 'amount' => ['type' => 'int', 'required' => true], + 'customer_id' => ['type' => 'int', 'required' => false], + 'reason' => ['type' => 'string', 'required' => false], + ]; + + /** + * @param array $props + * @return $this|self|null + * @throws Exception + */ + public function hydrate(array $props): ?self + { + // todo: move this check in validators + foreach ($this->getDefinitions() as $key => $field) { + if (!$field['required']) { + continue; + } + + if (!\array_key_exists($key, $props) || null === $props[$key]) { + $this->resetProperties(); + throw new Exception('RefundInputDTO can\'t be hydrated, required field is invalid.'); + } + } + + if (!$props['resource'] instanceof Payment) { + throw new Exception('RefundInputDTO: resource must be a valid Payment instance.'); + } + + $this->setApiBearer((string) $props['api_bearer']); + $this->setResource($props['resource']); + $this->setAmount((int) $props['amount']); + $this->setCustomerId(isset($props['customer_id']) ? (int) $props['customer_id'] : null); + $this->setReason(isset($props['reason']) ? (string) $props['reason'] : null); + + return $this; + } + + private function resetProperties(): void + { + $this->api_bearer = null; + $this->resource = null; + $this->amount = null; + $this->customer_id = null; + $this->reason = null; + } + + // Getters + + public function getApiBearer(): ?string + { + return $this->api_bearer; + } + + public function getResource(): ?Payment + { + return $this->resource; + } + + public function getAmount(): ?int + { + return $this->amount; + } + + public function getCustomerId(): ?int + { + return $this->customer_id; + } + + public function getReason(): ?string + { + return $this->reason; + } + + /** + * @return array + */ + public function getDefinitions(): array + { + return $this->definitions; + } + + // Setters + + public function setApiBearer(string $api_bearer): void + { + $this->api_bearer = $api_bearer; + } + + public function setResource(Payment $resource): void + { + $this->resource = $resource; + } + + public function setAmount(int $amount): void + { + $this->amount = $amount; + } + + public function setCustomerId(?int $customer_id): void + { + $this->customer_id = $customer_id; + } + + public function setReason(?string $reason): void + { + $this->reason = $reason; + } + + /** + * @param array $props + * @return self|null + * @throws Exception + */ + public static function create(array $props): ?self + { + return (new self())->hydrate($props); + } +} diff --git a/src/Models/Entities/RefundOutputDTO.php b/src/Models/Entities/RefundOutputDTO.php new file mode 100644 index 0000000..81c13f2 --- /dev/null +++ b/src/Models/Entities/RefundOutputDTO.php @@ -0,0 +1,138 @@ + + */ + private $definitions = [ + 'result' => ['type' => 'boolean', 'required' => true], + 'code' => ['type' => 'string', 'required' => true], + 'message' => ['type' => 'string', 'required' => false], + 'resource' => ['type' => 'object', 'required' => false], + ]; + + /** + * @param array $props + * @return $this|self|null + */ + public function hydrate(array $props): ?self + { + // todo: move this check in validators + foreach ($this->getDefinitions() as $key => $field) { + if (!$field['required']) { + continue; + } + + if (!\array_key_exists($key, $props) || null === $props[$key]) { + $this->resetProperties(); + throw new \Exception('RefundOutputDTO can\'t be hydrated, required field is invalid.'); + } + } + + $this->setResult((bool) $props['result']); + $this->setCode((string) $props['code']); + $this->setMessage(isset($props['message']) ? (string) $props['message'] : ''); + $this->setResource($props['resource'] ?? null); + + return $this; + } + + private function resetProperties(): void + { + $this->result = null; + $this->code = null; + $this->message = null; + $this->resource = null; + } + + // Getters + + public function getResult(): ?bool + { + return $this->result; + } + + public function getCode(): ?string + { + return $this->code; + } + + public function getMessage(): ?string + { + return $this->message; + } + + /** + * @return array + */ + public function getDefinitions(): array + { + return $this->definitions; + } + + public function getResource(): ?Refund + { + return $this->resource; + } + + // Setters + + public function setResult(bool $result): void + { + $this->result = $result; + } + + public function setCode(string $code): void + { + $this->code = $code; + } + + public function setMessage(string $message): void + { + $this->message = $message; + } + + /** + * @param Refund|null $resource + */ + public function setResource($resource): void + { + $this->resource = $resource; + } + + /** + * @param array $props + * @return self|null + */ + public static function create(array $props): ?self + { + return (new self())->hydrate($props); + } +} diff --git a/src/Utilities/Services/Api.php b/src/Utilities/Services/Api.php index 50941d6..d0435db 100644 --- a/src/Utilities/Services/Api.php +++ b/src/Utilities/Services/Api.php @@ -2,17 +2,19 @@ declare(strict_types=1); -namespace PayplugPluginCore\Utilities\Services; +namespace PayPlugPluginCore\Utilities\Services; -use http\Exception\RuntimeException; use Payplug\Payment; use Payplug\Payplug; +use Payplug\Refund; class Api { - private ?Payplug $payplug_api = null; + /** @var Payplug|null */ + private $payplug_api = null; - private string $bearer_token; + /** @var string */ + private $bearer_token; /** * @param array $datas @@ -22,20 +24,49 @@ public function createPaymentResource(array $datas): array { try { if (null === $this->payplug_api) { - throw new RuntimeException('API Payplug must be initialized.'); + throw new \RuntimeException('API Payplug must be initialized.'); } $response = [ - 'code' => 200, - 'message' => 'OK', + 'code' => 200, + 'message' => 'OK', 'resource' => Payment::create($datas, $this->payplug_api), - 'result' => true, + 'result' => true, ]; } catch (\Exception $e) { $response = [ - 'code' => $e->getCode(), - 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'message' => $e->getMessage(), 'resource' => null, - 'result' => false, + 'result' => false, + ]; + } + + return $response; + } + + /** + * @param string $resource_id + * @param array $datas + * @return array + */ + public function refundPaymentResource(string $resource_id, array $datas): array + { + try { + if (null === $this->payplug_api) { + throw new \RuntimeException('API Payplug must be initialized.'); + } + $response = [ + 'code' => 200, + 'message' => 'OK', + 'resource' => Refund::create($resource_id, $datas, $this->payplug_api), + 'result' => true, + ]; + } catch (\Exception $e) { + $response = [ + 'code' => $e->getCode(), + 'message' => $e->getMessage(), + 'resource' => null, + 'result' => false, ]; } @@ -54,7 +85,7 @@ private function setBearerToken(string $bearer_token): void /** * @return $this - * @throws \Payplug\Exception\ConfigurationException + * @throws \Exception */ public function load(string $bearer_token): self { @@ -64,6 +95,11 @@ public function load(string $bearer_token): self return $this; } + public function isLoaded(): bool + { + return $this->payplug_api !== null; + } + /** * @throws \Exception */ diff --git a/src/Utilities/Traits/DependenciesLoader.php b/src/Utilities/Traits/DependenciesLoader.php deleted file mode 100644 index 462c524..0000000 --- a/src/Utilities/Traits/DependenciesLoader.php +++ /dev/null @@ -1,66 +0,0 @@ - */ - private array $allowed_services = []; - - /** @var array */ - private array $allowed_gateways = []; - - /** - * @return object - * @throws \Exception - */ - public function get_service(string $name = ''): object - { - if (empty($name)) { - throw new \Exception('Invalid parameter, $name given should be a non empty string.'); - } - - if (!\in_array($name, $this->allowed_services)) { - throw new \Exception('Given $name is not allower Services.'); - } - - $service_name = '\PayplugPluginCore\Utilities\Services\\' . str_replace('_', '', ucwords($name, '_')); - if (!class_exists($service_name)) { - throw new \Exception('Service can\'t be found.'); - } - - return new $service_name(); - } - - /** - * @param string $name - * @return object - * @throws \Exception - */ - public function get_gateway(string $name = ''): object - { - if (empty($name)) { - throw new \Exception('Invalid parameter, $name given should be a non empty string.'); - } - - if (!\in_array($name, $this->allowed_gateways, true)) { - throw new \Exception('Given $name is not allower Gateways.'); - } - - $gateway_name = '\PayplugPluginCore\Gateways\\' . str_replace('_', '', ucwords($name, '_')) . 'Gateway'; - if (!class_exists($gateway_name)) { - throw new \Exception('Gateway can\'t be found.'); - } - - return new $gateway_name(); - } - - public function get_payment_gateway(): PaymentGatewayManager - { - return new PaymentGatewayManager(); - } -} diff --git a/src/Validators/PaymentResourceValidator.php b/src/Validators/PaymentResourceValidator.php new file mode 100644 index 0000000..1cb84de --- /dev/null +++ b/src/Validators/PaymentResourceValidator.php @@ -0,0 +1,63 @@ +validateId($payment); + $this->validateFailure($payment); + } + + /** + * @throws Exception + */ + public function validateId(Payment $payment): void + { + $id = $payment->id; + + if (null === $id || !\is_string($id)) { + throw new Exception('PaymentResourceValidator: id must be a non-null string.'); + } + + if (!preg_match(self::ID_PATTERN, $id)) { + throw new Exception( + sprintf( + 'PaymentResourceValidator: id ("%s") must start with "inst_" or "pay_" followed by alphanumeric characters.', + $id + ) + ); + } + } + + /** + * @throws Exception + */ + public function validateFailure(Payment $payment): void + { + if (null !== $payment->failure) { + throw new Exception('PaymentResourceValidator: failure must be null.'); + } + } + + /** + * @throws Exception + */ + public function validateIsPaid(Payment $payment): void + { + if (!isset($payment->is_paid) || true !== $payment->is_paid) { + throw new Exception('PaymentResourceValidator: is_paid must be true.'); + } + } +} diff --git a/src/Validators/RefundValidator.php b/src/Validators/RefundValidator.php new file mode 100644 index 0000000..5cf78f4 --- /dev/null +++ b/src/Validators/RefundValidator.php @@ -0,0 +1,103 @@ +validateAmount($refund_inputDTO); + $this->validateRefundableWindow($refund_inputDTO); + } + + /** + * Checks that the requested amount is within the allowed range: + * - at least AMOUNT_MIN cents + * - at most (payment.amount − payment.amount_refunded) cents + * + * @throws Exception + */ + private function validateAmount(RefundInputDTO $refund_inputDTO): void + { + $amount = $refund_inputDTO->getAmount(); + $resource = $refund_inputDTO->getResource(); + + if (null === $amount) { + throw new Exception('RefundValidator: amount is required.'); + } + + if ($amount < self::AMOUNT_MIN) { + throw new Exception( + sprintf( + 'RefundValidator: amount (%d) must be at least %d cents.', + $amount, + self::AMOUNT_MIN + ) + ); + } + + if ($resource instanceof Payment) { + $refundable_limit = $resource->amount - $resource->amount_refunded; + + if ($amount > $refundable_limit) { + throw new Exception( + sprintf( + 'RefundValidator: amount (%d) exceeds the refundable limit (%d cents).', + $amount, + $refundable_limit + ) + ); + } + } + } + + /** + * Checks that the current date/time falls within the payment's refundable window: + * - after refundable_after (when defined) + * - before refundable_until (when defined) + * + * @throws Exception + */ + private function validateRefundableWindow(RefundInputDTO $refund_inputDTO): void + { + $resource = $refund_inputDTO->getResource(); + + if (!$resource instanceof Payment) { + return; + } + + $now = time(); + + if (null !== $resource->refundable_after && $now < (int) $resource->refundable_after) { + throw new Exception( + sprintf( + 'RefundValidator: refund is not yet available (refundable_after: %s).', + date('Y-m-d H:i:s', (int) $resource->refundable_after) + ) + ); + } + + if (null !== $resource->refundable_until && $now > (int) $resource->refundable_until) { + throw new Exception( + sprintf( + 'RefundValidator: refund period has expired (refundable_until: %s).', + date('Y-m-d H:i:s', (int) $resource->refundable_until) + ) + ); + } + } +} diff --git a/stubs/PayplugPayment.stub b/stubs/PayplugPayment.stub new file mode 100644 index 0000000..c61c568 --- /dev/null +++ b/stubs/PayplugPayment.stub @@ -0,0 +1,27 @@ +payment_api ->shouldReceive('create') diff --git a/tests/Integration/PaymentAction/refundActionTest.php b/tests/Integration/PaymentAction/refundActionTest.php new file mode 100644 index 0000000..710c853 --- /dev/null +++ b/tests/Integration/PaymentAction/refundActionTest.php @@ -0,0 +1,83 @@ +action = Mockery::mock(PaymentAction::class, [])->makePartial(); + $this->refund_api = \Mockery::mock('alias:Payplug\Refund'); + $this->default_refund_input_dto = RefundInputDTOMock::get([]); + } + + public function tearDown(): void + { + Mockery::close(); + } + + public function testWhenRefundCantBeCreated(): void + { + $error_msg = 'An error occurred during the process'; + $error_code = 500; + $this->refund_api + ->shouldReceive('create') + ->once() + ->andThrow(new \Exception($error_msg, $error_code)); + + $error_output_props = [ + 'code' => $error_code, + 'message' => $error_msg, + 'result' => false, + 'resource' => null, + ]; + $this->assertEquals( + RefundOutputDTOMock::get($error_output_props), + $this->action->refundAction($this->default_refund_input_dto) + ); + } + + public function testWhenRefundIsCreated(): void + { + $resource = \Payplug\Resource\Refund::fromAttributes([ + 'id' => 're_azerty', + 'object' => 'refund', + 'is_live' => true, + 'amount' => 1000, + 'currency' => 'EUR', + 'created_at' => time(), + 'payment_id' => 'pay_azerty', + 'metadata' => null, + ]); + + $this->refund_api + ->shouldReceive('create') + ->once() + ->andReturn($resource); + + $this->assertEquals( + RefundOutputDTOMock::get(['resource' => $resource]), + $this->action->refundAction($this->default_refund_input_dto) + ); + } +} diff --git a/tests/Mock/PaymentInputDTOMock.php b/tests/Mock/PaymentInputDTOMock.php index 5c926ce..f0f4eaf 100644 --- a/tests/Mock/PaymentInputDTOMock.php +++ b/tests/Mock/PaymentInputDTOMock.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Mock; +namespace PayPlugPluginCore\Tests\Mock; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; -use PayplugPluginCore\Tests\Traits\TestingTools; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Tests\Traits\TestingTools; class PaymentInputDTOMock { diff --git a/tests/Mock/PaymentMock.php b/tests/Mock/PaymentMock.php index fde49c1..3402b7b 100644 --- a/tests/Mock/PaymentMock.php +++ b/tests/Mock/PaymentMock.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Mock; +namespace PayPlugPluginCore\Tests\Mock; use Payplug\Resource\Payment; class PaymentMock { /** @var array> */ - public static array $payment_parameters = [ + public static $payment_parameters = [ 'oneclick' => [ 'is_paid' => true, 'paid_at' => 1614949567, diff --git a/tests/Mock/PaymentOutputDTOMock.php b/tests/Mock/PaymentOutputDTOMock.php index 0e26358..537d23d 100644 --- a/tests/Mock/PaymentOutputDTOMock.php +++ b/tests/Mock/PaymentOutputDTOMock.php @@ -2,18 +2,13 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Mock; +namespace PayPlugPluginCore\Tests\Mock; use Payplug\Resource\Payment; -use PayplugPluginCore\Models\Entities\PaymentOutputDTO; +use PayPlugPluginCore\Models\Entities\PaymentOutputDTO; class PaymentOutputDTOMock { - public bool $result; - public string $code; - public string $message; - public object $resource; - /** * @param array|null $custom_props * @throws \Exception diff --git a/tests/Mock/RefundInputDTOMock.php b/tests/Mock/RefundInputDTOMock.php new file mode 100644 index 0000000..6e7d9ff --- /dev/null +++ b/tests/Mock/RefundInputDTOMock.php @@ -0,0 +1,39 @@ +|null $custom_props + * @throws \Exception + */ + public static function get(?array $custom_props): RefundInputDTO + { + $props = [ + 'api_bearer' => 'token_bearer', + 'resource' => PaymentMock::getStandard(['is_paid' => true]), + 'amount' => 1000, + 'customer_id' => 42, + 'reason' => 'test reason', + ]; + + if (!empty($custom_props)) { + foreach ($custom_props as $prop => $value) { + $props[$prop] = $value; + } + } + + $refundInputDTO = new RefundInputDTO(); + $result = $refundInputDTO->hydrate($props); + if ($result === null) { + throw new \RuntimeException('RefundInputDTOMock failed to hydrate DTO.'); + } + + return $result; + } +} diff --git a/tests/Mock/RefundOutputDTOMock.php b/tests/Mock/RefundOutputDTOMock.php new file mode 100644 index 0000000..49787b5 --- /dev/null +++ b/tests/Mock/RefundOutputDTOMock.php @@ -0,0 +1,48 @@ +|null $custom_props + * @throws \Exception + */ + public static function get(?array $custom_props): RefundOutputDTO + { + $props = [ + 'result' => true, + 'code' => 200, + 'message' => 'OK', + 'resource' => Refund::fromAttributes([ + 'id' => 're_azerty', + 'object' => 'refund', + 'is_live' => true, + 'amount' => 1000, + 'currency' => 'EUR', + 'created_at' => time(), + 'payment_id' => 'pay_azerty', + 'metadata' => null, + ]), + ]; + + if ($custom_props !== null) { + foreach ($custom_props as $prop => $value) { + $props[$prop] = $value; + } + } + + $refundOutputDTO = new RefundOutputDTO(); + $result = $refundOutputDTO->hydrate($props); + if ($result === null) { + throw new \RuntimeException('RefundOutputDTOMock failed to hydrate DTO.'); + } + + return $result; + } +} diff --git a/tests/Traits/FormatDataProvider.php b/tests/Traits/FormatDataProvider.php index 2e8e4a1..5c3a0ca 100644 --- a/tests/Traits/FormatDataProvider.php +++ b/tests/Traits/FormatDataProvider.php @@ -2,10 +2,11 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Traits; +namespace PayPlugPluginCore\Tests\Traits; trait FormatDataProvider { + /** @return \Generator, mixed, void> */ public function invalidArrayFormatDataProvider(): \Generator { yield [42]; @@ -17,6 +18,7 @@ public function invalidArrayFormatDataProvider(): \Generator yield ['lorem ipsum']; } + /** @return \Generator, mixed, void> */ public function invalidBoolFormatDataProvider(): \Generator { yield ['lorem Ipsum']; @@ -28,6 +30,7 @@ public function invalidBoolFormatDataProvider(): \Generator yield [null]; } + /** @return \Generator, mixed, void> */ public function invalidIntegerFormatDataProvider(): \Generator { yield [null]; @@ -39,6 +42,7 @@ public function invalidIntegerFormatDataProvider(): \Generator yield ['lorem ipsum']; } + /** @return \Generator, mixed, void> */ public function invalidFloatFormatDataProvider(): \Generator { yield [null]; @@ -52,6 +56,7 @@ public function invalidFloatFormatDataProvider(): \Generator yield [42]; } + /** @return \Generator, mixed, void> */ public function invalidNumericFormatDataProvider(): \Generator { yield [null]; @@ -65,6 +70,7 @@ public function invalidNumericFormatDataProvider(): \Generator yield ['123abc']; } + /** @return \Generator, mixed, void> */ public function invalidJSONFormatDataProvider(): \Generator { yield ['']; @@ -76,6 +82,7 @@ public function invalidJSONFormatDataProvider(): \Generator yield ['{{}}']; } + /** @return \Generator, mixed, void> */ public function invalidObjectFormatDataProvider(): \Generator { yield [42]; @@ -87,6 +94,7 @@ public function invalidObjectFormatDataProvider(): \Generator yield ['lorem ipsum']; } + /** @return \Generator, mixed, void> */ public function invalidStringFormatDataProvider(): \Generator { yield [42]; @@ -98,6 +106,7 @@ public function invalidStringFormatDataProvider(): \Generator yield [null]; } + /** @return \Generator, mixed, void> */ public function invalidEmailFormatDataProvider(): \Generator { yield ['@test.com']; @@ -107,6 +116,7 @@ public function invalidEmailFormatDataProvider(): \Generator yield ['emailtest.com']; } + /** @return \Generator, mixed, void> */ public function invalidPhoneFormatDataProvider(): \Generator { yield [42]; diff --git a/tests/Traits/TestingTools.php b/tests/Traits/TestingTools.php index 37e61cf..29a365d 100644 --- a/tests/Traits/TestingTools.php +++ b/tests/Traits/TestingTools.php @@ -2,17 +2,25 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Traits; +namespace PayPlugPluginCore\Tests\Traits; trait TestingTools { use FormatDataProvider; - private ?object $payment_input_dto_mock = null; - private ?object $payment_output_dto_mock = null; - private ?object $payment_mock = null; - - public function get_mock(string $name = ''): object + /** @var object|null */ + private $payment_input_dto_mock = null; + /** @var object|null */ + private $payment_output_dto_mock = null; + /** @var object|null */ + private $payment_mock = null; + + /** + * @param string $name + * @return object + * @throws \Exception + */ + public function get_mock(string $name = '') { if (empty($name)) { throw new \Exception('Invalid parameter, $name given should be a non empty string.'); @@ -22,7 +30,7 @@ public function get_mock(string $name = ''): object return $this->{$name}; } - $mock = '\\PayplugPluginCore\\Tests\\Mock\\' . str_replace('_', '', ucwords($name, '_')) . 'Mock'; + $mock = '\\PayPlugPluginCore\\Tests\\Mock\\' . str_replace('_', '', ucwords($name, '_')) . 'Mock'; if (!class_exists($mock)) { throw new \Exception('Mock can\'t be found. Given: ' . $mock); } diff --git a/tests/Units/Actions/PaymentAction/createActionTest.php b/tests/Units/Actions/PaymentAction/createActionTest.php index b289fec..42f9d62 100644 --- a/tests/Units/Actions/PaymentAction/createActionTest.php +++ b/tests/Units/Actions/PaymentAction/createActionTest.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Units\Actions\PaymentAction; +namespace PayPlugPluginCore\Tests\Units\Actions\PaymentAction; use Mockery\MockInterface; -use PayplugPluginCore\Gateways\AbstractPaymentGateway; -use PayplugPluginCore\Gateways\PaymentGatewayManager; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; -use PayplugPluginCore\Tests\Mock\PaymentInputDTOMock; -use PayplugPluginCore\Tests\Mock\PaymentMock; -use PayplugPluginCore\Tests\Mock\PaymentOutputDTOMock; +use PayPlugPluginCore\Gateways\AbstractPaymentGateway; +use PayPlugPluginCore\Gateways\PaymentGatewayManager; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Tests\Mock\PaymentInputDTOMock; +use PayPlugPluginCore\Tests\Mock\PaymentMock; +use PayPlugPluginCore\Tests\Mock\PaymentOutputDTOMock; +use PayPlugPluginCore\Utilities\Services\Api; /** * @group units @@ -19,14 +20,19 @@ */ class createActionTest extends paymentActionBase { - private MockInterface $api_service; - private PaymentInputDTO $input_dto; - private MockInterface $service_loader; - private MockInterface $gateway_loader; - private MockInterface $payment_gateway; + /** @var MockInterface */ + private $api_service; + /** @var PaymentInputDTO */ + private $input_dto; + /** @var MockInterface */ + private $api; + /** @var MockInterface */ + private $gateway_loader; + /** @var MockInterface */ + private $payment_gateway; /** @var array */ - private array $payment_attributes = []; + private $payment_attributes = []; public function setUp(): void { @@ -37,12 +43,11 @@ public function setUp(): void $this->action->shouldReceive('get_payment_gateway') ->andReturn($this->gateway_loader); - $this->service_loader = \Mockery::mock('ServiceLoader'); - $this->action->shouldReceive('get_service') - ->with('api') - ->andReturn($this->service_loader); + $this->api = \Mockery::mock(Api::class); + $this->action->shouldReceive('get_api') + ->andReturn($this->api); - $this->api_service = \Mockery::mock('ApiService'); + $this->api_service = \Mockery::mock(Api::class); $this->payment_gateway = \Mockery::mock(AbstractPaymentGateway::class); $customer = $this->input_dto->getCustomer() ?? []; @@ -66,7 +71,7 @@ public function setUp(): void public function testWhenGivenDTOIsInvalid(): void { $this->expectException(\TypeError::class); - new \ReflectionMethod($this->action, 'createAction')->invoke($this->action, null); + (new \ReflectionMethod($this->action, 'createAction'))->invoke($this->action, null); } public function testWhenPaymentGatewayLoadingThrowsException(): void @@ -79,7 +84,7 @@ public function testWhenPaymentGatewayLoadingThrowsException(): void ->andThrow(new \Exception($exception_msg)); // Le flux doit s'arrêter avant tout appel API - $this->action->shouldNotReceive('get_service'); + $this->action->shouldNotReceive('get_api'); $this->expectException(\Exception::class); $this->expectExceptionMessage($exception_msg); @@ -102,7 +107,7 @@ public function testWhenContextInDTOIsMissing(): void ->andThrow(new \Exception($exception_msg)); // Le flux doit s'arrêter avant tout appel API - $this->action->shouldNotReceive('get_service'); + $this->action->shouldNotReceive('get_api'); $this->expectException(\Exception::class); $this->expectExceptionMessage($exception_msg); @@ -124,7 +129,7 @@ public function testWhenApiServiceLoadingThrowsException(): void ->andReturn($this->payment_attributes); $exception_msg = 'Payplug API can\'t be initialized.'; - $this->service_loader + $this->api ->shouldReceive('load') ->once() ->with($this->input_dto->getApiBearer()) @@ -149,7 +154,7 @@ public function testWhenPaymentResourceCantBeCreated(): void ->once() ->andReturn($this->payment_attributes); - $this->service_loader + $this->api ->shouldReceive('load') ->once() ->with($this->input_dto->getApiBearer()) @@ -186,7 +191,7 @@ public function testWhenPaymentOutputDTOIsReturnWithSuccess(): void ->once() ->andReturn($this->payment_attributes); - $this->service_loader + $this->api ->shouldReceive('load') ->once() ->with($this->input_dto->getApiBearer()) diff --git a/tests/Units/Actions/PaymentAction/paymentActionBase.php b/tests/Units/Actions/PaymentAction/paymentActionBase.php index 89e90a6..c9a9a34 100644 --- a/tests/Units/Actions/PaymentAction/paymentActionBase.php +++ b/tests/Units/Actions/PaymentAction/paymentActionBase.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Units\Actions\PaymentAction; +namespace PayPlugPluginCore\Tests\Units\Actions\PaymentAction; use Mockery; -use PayplugPluginCore\Actions\PaymentAction; +use PayPlugPluginCore\Actions\PaymentAction; use PHPUnit\Framework\TestCase; abstract class paymentActionBase extends TestCase { - protected PaymentAction&\Mockery\MockInterface $action; + /** @var PaymentAction&\Mockery\MockInterface */ + protected $action; public function setUp(): void { diff --git a/tests/Units/Actions/PaymentAction/refundActionTest.php b/tests/Units/Actions/PaymentAction/refundActionTest.php new file mode 100644 index 0000000..152fba5 --- /dev/null +++ b/tests/Units/Actions/PaymentAction/refundActionTest.php @@ -0,0 +1,176 @@ + */ + private $refund_attributes = []; + + public function setUp(): void + { + parent::setUp(); + $this->input_dto = RefundInputDTOMock::get([]); + + $this->action->shouldReceive('get_refund_gateway') + ->andReturn(new RefundGateway()); + + $this->api = \Mockery::mock(Api::class); + $this->action->shouldReceive('get_api') + ->andReturn($this->api); + + $this->api_service = \Mockery::mock(Api::class); + + $this->refund_attributes = [ + 'amount' => $this->input_dto->getAmount(), + 'metadata' => [ + 'customer_id' => $this->input_dto->getCustomerId(), + 'reason' => $this->input_dto->getReason(), + ], + ]; + } + + public function testWhenGivenDTOIsInvalid(): void + { + $this->expectException(\TypeError::class); + (new \ReflectionMethod($this->action, 'refundAction'))->invoke($this->action, null); + } + + public function testWhenResourceIsNull(): void + { + $this->input_dto->resource = null; + + $this->action->shouldNotReceive('get_refund_gateway'); + $this->action->shouldNotReceive('get_api'); + + $this->expectException(\Exception::class); + $this->expectExceptionMessage('Invalid parameter, resource is required.'); + $this->action->refundAction($this->input_dto); + } + + public function testWhenRefundValidatorThrowsException(): void + { + $this->input_dto = RefundInputDTOMock::get(['amount' => 5]); + + $this->action->shouldNotReceive('get_refund_gateway'); + $this->action->shouldNotReceive('get_api'); + + $this->expectException(\Exception::class); + $this->expectExceptionMessage('RefundValidator: amount (5) must be at least 10 cents.'); + $this->action->refundAction($this->input_dto); + } + + public function testWhenPaymentResourceIsInvalid(): void + { + $this->input_dto = RefundInputDTOMock::get([ + 'resource' => PaymentMock::getStandard(['id' => 'bad_id']), + ]); + + $this->action->shouldNotReceive('get_refund_gateway'); + $this->action->shouldNotReceive('get_api'); + + $this->expectException(\Exception::class); + $this->expectExceptionMessage('PaymentResourceValidator: id ("bad_id") must start with "inst_" or "pay_" followed by alphanumeric characters.'); + $this->action->refundAction($this->input_dto); + } + + public function testWhenPaymentIsNotPaid(): void + { + $this->input_dto = RefundInputDTOMock::get([ + 'resource' => PaymentMock::getStandard(['is_paid' => false]), + ]); + + $this->action->shouldNotReceive('get_refund_gateway'); + $this->action->shouldNotReceive('get_api'); + + $this->expectException(\Exception::class); + $this->expectExceptionMessage('PaymentResourceValidator: is_paid must be true.'); + $this->action->refundAction($this->input_dto); + } + + public function testWhenApiServiceLoadingThrowsException(): void + { + $exception_msg = 'Payplug API can\'t be initialized.'; + $this->api + ->shouldReceive('load') + ->once() + ->with($this->input_dto->getApiBearer()) + ->andThrow(new \Exception($exception_msg)); + + $this->expectException(\Exception::class); + $this->expectExceptionMessage($exception_msg); + $this->action->refundAction($this->input_dto); + } + + public function testWhenRefundResourceCantBeCreated(): void + { + $this->api + ->shouldReceive('load') + ->once() + ->with($this->input_dto->getApiBearer()) + ->andReturn($this->api_service); + + $api_return = [ + 'code' => 500, + 'message' => 'An error occurred during refund creation.', + 'resource' => null, + 'result' => false, + ]; + $this->api_service + ->shouldReceive('refundPaymentResource') + ->once() + ->andReturn($api_return); + + $this->assertEquals( + RefundOutputDTOMock::get($api_return), + $this->action->refundAction($this->input_dto) + ); + } + + public function testWhenRefundOutputDTOIsReturnedWithSuccess(): void + { + $this->api + ->shouldReceive('load') + ->once() + ->with($this->input_dto->getApiBearer()) + ->andReturn($this->api_service); + + $api_return = [ + 'code' => 200, + 'message' => 'OK', + 'resource' => null, + 'result' => true, + ]; + $this->api_service + ->shouldReceive('refundPaymentResource') + ->once() + ->andReturn($api_return); + + $this->assertEquals( + RefundOutputDTOMock::get($api_return), + $this->action->refundAction($this->input_dto) + ); + } +} diff --git a/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php b/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php index 578417b..ea99216 100644 --- a/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php +++ b/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; +namespace PayPlugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; -use PayplugPluginCore\Tests\Mock\PaymentInputDTOMock; +use PayPlugPluginCore\Tests\Mock\PaymentInputDTOMock; /** * @group unit @@ -25,7 +25,7 @@ public function setUp(): void public function testWhenGivenDTOIsInvalid(): void { $this->expectException(\TypeError::class); - new \ReflectionMethod($this->gateway, 'formatPaymentAttributes')->invoke($this->gateway, null); + (new \ReflectionMethod($this->gateway, 'formatPaymentAttributes'))->invoke($this->gateway, null); } public function testWhenDefaultAttributesCanBeSet(): void @@ -40,6 +40,7 @@ public function testWhenDefaultAttributesCanBeSet(): void $this->gateway->formatPaymentAttributes(PaymentInputDTOMock::get([])); } + /** @return \Generator, mixed, void> */ public static function StandardPaymentRequiredContext(): \Generator { yield ['is_deferred']; diff --git a/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php b/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php index 10ee162..7410243 100644 --- a/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php +++ b/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; +namespace PayPlugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; use Mockery; -use PayplugPluginCore\Gateways\Payment\StandardPaymentGateway; +use PayPlugPluginCore\Gateways\Payment\StandardPaymentGateway; use PHPUnit\Framework\TestCase; abstract class standardPaymentGatewayBase extends TestCase { - protected StandardPaymentGateway&\Mockery\MockInterface $gateway; + /** @var StandardPaymentGateway&\Mockery\MockInterface */ + protected $gateway; public function setUp(): void { diff --git a/tests/Units/Gateways/PaymentGateway.php b/tests/Units/Gateways/PaymentGateway.php index 5aca3d5..2536851 100644 --- a/tests/Units/Gateways/PaymentGateway.php +++ b/tests/Units/Gateways/PaymentGateway.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace PayplugPluginCore\Tests\Units\Gateways; +namespace PayPlugPluginCore\Tests\Units\Gateways; -use PayplugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginCore\Models\Entities\PaymentInputDTO; class PaymentGateway { - protected string $id; + /** @var string */ + protected $id; /** @var array */ - protected array $expected_context; + protected $expected_context; /** * @param string $payment_gateway_name @@ -23,7 +24,7 @@ public function load(string $payment_gateway_name): self throw new \Exception('Invalid parameter, $payment_gateway_name given should be a non empty string.'); } - $payment_gateway_path = '\PayplugPluginCore\gateways\payment\\' + $payment_gateway_path = '\PayPlugPluginCore\Gateways\Payment\\' . str_replace('_', '', ucwords($payment_gateway_name, '_')) . 'PaymentGateway'; if (!class_exists($payment_gateway_path)) { diff --git a/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php b/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php new file mode 100644 index 0000000..3d80122 --- /dev/null +++ b/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php @@ -0,0 +1,55 @@ +expectException(\TypeError::class); + (new \ReflectionMethod($this->gateway, 'formatRefundAttributes'))->invoke($this->gateway, null); + } + + public function testWhenAttributesAreFormatted(): void + { + $dto = RefundInputDTOMock::get([]); + $result = $this->gateway->formatRefundAttributes($dto); + + $this->assertEquals([ + 'amount' => $dto->getAmount(), + 'metadata' => [ + 'customer_id' => $dto->getCustomerId(), + 'reason' => $dto->getReason(), + ], + ], $result); + } + + public function testWhenOptionalFieldsAreNull(): void + { + $dto = RefundInputDTOMock::get([ + 'customer_id' => null, + 'reason' => null, + ]); + $result = $this->gateway->formatRefundAttributes($dto); + + $this->assertEquals([ + 'amount' => $dto->getAmount(), + 'metadata' => [ + 'customer_id' => null, + 'reason' => null, + ], + ], $result); + } +} diff --git a/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php b/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php new file mode 100644 index 0000000..3c6a2e0 --- /dev/null +++ b/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php @@ -0,0 +1,25 @@ +gateway = new RefundGateway(); + } + + protected function tearDown(): void + { + Mockery::close(); + } +} From 663bcf011e8760265c7a724f21d91c8fc5121f46 Mon Sep 17 00:00:00 2001 From: adumont-payplug Date: Fri, 26 Jun 2026 13:07:00 +0200 Subject: [PATCH 2/2] PRE-3449: patch configs and upgrade PHP 7.4 --- .github/PULL_REQUEST_TEMPLATE.md | 58 +- .github/copilot-instructions.md | 126 + .github/workflows/auto-tag-rc.yml | 10 + .github/workflows/ci.yml | 41 +- .github/workflows/pre-release.yml | 17 + .github/workflows/release.yml | 12 + .gitignore | 3 +- .php-cs-fixer.dist.php | 21 +- Dockerfile | 24 +- Makefile | 25 +- Readme.md | 23 +- captainhook.json | 31 +- composer.json | 26 +- composer.lock | 3500 +++++++++++------ phpstan.neon | 2 +- scripts/check-branch-name.sh | 22 - scripts/generate-release-composer.php | 73 - src/Actions/PaymentAction.php | 32 +- src/Gateways/AbstractPaymentGateway.php | 4 +- .../Payment/EmailLinkPaymentGateway.php | 6 +- .../Payment/StandardPaymentGateway.php | 6 +- src/Gateways/PaymentGatewayManager.php | 4 +- src/Gateways/RefundGateway.php | 4 +- src/Models/Entities/PaymentInputDTO.php | 2 +- src/Models/Entities/PaymentOutputDTO.php | 2 +- src/Models/Entities/RefundInputDTO.php | 2 +- src/Models/Entities/RefundOutputDTO.php | 2 +- src/Utilities/Services/Api.php | 2 +- src/Validators/PaymentResourceValidator.php | 4 +- src/Validators/RefundValidator.php | 12 +- stubs/PayplugPayment.stub | 27 - .../PaymentAction/createActionTest.php | 12 +- .../PaymentAction/refundActionTest.php | 10 +- tests/Mock/PaymentInputDTOMock.php | 6 +- tests/Mock/PaymentMock.php | 2 +- tests/Mock/PaymentOutputDTOMock.php | 4 +- tests/Mock/RefundInputDTOMock.php | 4 +- tests/Mock/RefundOutputDTOMock.php | 4 +- tests/Traits/FormatDataProvider.php | 2 +- tests/Traits/TestingTools.php | 4 +- .../PaymentAction/createActionTest.php | 16 +- .../PaymentAction/paymentActionBase.php | 4 +- .../PaymentAction/refundActionTest.php | 18 +- .../formatPaymentAttributesTest.php | 4 +- .../standardPaymentGatewayBase.php | 4 +- tests/Units/Gateways/PaymentGateway.php | 6 +- .../formatRefundAttributesTest.php | 4 +- .../RefundGateway/refundGatewayBase.php | 4 +- 48 files changed, 2667 insertions(+), 1564 deletions(-) create mode 100644 .github/copilot-instructions.md create mode 100644 .github/workflows/auto-tag-rc.yml create mode 100644 .github/workflows/pre-release.yml create mode 100644 .github/workflows/release.yml delete mode 100755 scripts/check-branch-name.sh delete mode 100644 scripts/generate-release-composer.php delete mode 100644 stubs/PayplugPayment.stub diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6fed997..0dccba8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,46 @@ ## Description - - + -**Motivation:** +## Related Issue + +Ticket: [PRE-XXXX](https://payplug.atlassian.net/browse/PRE-XXXX) -**Related issue(s):** Closes # +## Type of Change + +[ ] 🐛 Bug fix +[ ] ✨ New feature +[ ] 💥 Breaking change +[ ] ♻️ Refactor +[ ] 🔧 Configuration / CI +[ ] 🚀 Release (`release/*` branch targeting `master`) +[ ] 📦 Dependency update +[ ] 🔒 Security fix +[ ] 📝 Documentation update --- -## Type of Change - -- 🐛 Bug fix (non-breaking change that fixes an issue) [ ] -- ✨ New feature (non-breaking change that adds functionality) [ ] -- 💥 Breaking change (fix or feature that causes existing functionality to change and that could impact other libs) [ ] -- 🔧 Refactor (no functional changes, code improvement only) [ ] -- 📦 Dependency update [ ] -- 🔒 Security fix [ ] -- 📝 Documentation update [ ] +## ✅ Quality Checklist + +### Local Environment & Hooks +- [ ] Local Git hooks (**CaptainHook**) are installed and executed cleanly. +- [ ] Commit messages strictly follow the `(PRE|SMP)-XXXX: description` pattern. +- [ ] Core configuration files (`phpstan.neon` / `.php-cs-fixer.php`) were generated successfully from `.dist` templates. + +### Testing & Code Quality +- [ ] Coding style rules have been applied locally (`composer cs:fix`). +- [ ] Static analysis checks pass with no new regressions (`vendor/bin/phpstan`). +- [ ] I have added/updated unit or integration tests if applicable. +- [ ] I have verified these changes locally on a native PrestaShop environment. + +### CI/CD Deployment Context +- [ ] The CI pipeline passes fully on GitHub. +- [ ] **For Release Branches:** If this is a `release/*` branch, I am targeting the correct base branch to allow the automated `apply-release` version bumping job to run. --- -## Checklist -### Code Quality -- [ ] Code is linted and formatted -- [ ] No unnecessary commented-out code or debug logs -- [ ] No hardcoded values (use env variables or config) +## Screenshots (if applicable) + -### Testing -- [ ] Unit tests added / updated +## Notes for Reviewer + -### Security & Ops -- [ ] No sensitive data or secrets introduced -- [ ] Logging and error handling are appropriate diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..0c4d5bb --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,126 @@ +# Copilot Instructions + +These instructions apply to code reviews on pull requests in this repository. + +## Project Context + +This is `payplug-plugin-mcp`, a PHP library that acts as the core integration layer for Payplug across multiple e-commerce plugins (WooCommerce, PrestaShop, etc.). It handles payment creation, refunds, DTO hydration, validation, and API communication via the `payplug/payplug-php` SDK. + +**Stack**: PHP 7.4 (development and composer constraint), `payplug/payplug-php ^4.0`, PHPUnit 9.5, Mockery ^1.3 + +**PHP compatibility note**: the composer constraint is `^7.4`, but the source code is intentionally written without PHP 7.4+ syntax (no typed properties, no arrow functions, no `??=`) so that existing client deployments still running PHP 7.1 are not broken at runtime. Do not conflate the composer requirement with the runtime compatibility target. + +**Namespace**: `PayPlugPluginMcp\` + +**Key structure**: +- `src/Actions/PaymentAction.php` — orchestrates payment and refund flows +- `src/Gateways/` — payment method gateways (`StandardPaymentGateway`, `EmailLinkPaymentGateway`) and `RefundGateway` +- `src/Models/Entities/` — DTOs: `PaymentInputDTO`, `PaymentOutputDTO`, `RefundInputDTO`, `RefundOutputDTO` +- `src/Validators/` — `PaymentResourceValidator`, `RefundValidator` +- `src/Utilities/Services/Api.php` — wraps the PayPlug PHP SDK + +## Intentional Patterns — Do Not Flag as Issues + +- **Docblock type hints instead of typed properties** — all class properties use `/** @var type */` style on purpose. Typed properties are a PHP 7.4 feature; since this code must remain syntactically compatible with PHP 7.1 runtimes, they cannot be used. Do not suggest converting docblocks to typed properties. +- **`get_api()`, `get_payment_gateway()`, `get_refund_gateway()` are public in `PaymentAction`** — these factory methods are public so they can be mocked in unit tests via Mockery. This is the intended testability pattern for this project. +- **Amount in cents** — all monetary amounts in DTOs and API calls are in the smallest currency unit (cents). Any conversion must be explicit and done by the calling plugin, not this library. + +## PayPlug PHP SDK — Dynamic Properties + +The `payplug/payplug-php` SDK models (`Payplug\Resource\Payment`, `Payplug\Resource\Refund`, etc.) use **dynamic properties** — API response fields are set at runtime via `__set()` and are not declared as class properties. This means: + +- Static analysis tools (PHPStan, IDEs) will emit warnings like `Property Payment::$failure does not exist` or `Property Payment::$is_paid does not exist` — **these are expected and not bugs**. +- There is no compile-time guarantee that a given field exists on a resource object. All access to SDK resource properties is inherently dynamic. +- Do not flag missing property declarations on SDK resource classes as issues. +- Do not suggest adding `@property` annotations to SDK classes — they are a vendored dependency. +- Null-checks before accessing SDK properties (e.g. `isset($payment->failure)`, `null !== $resource->id`) are intentional defensive patterns, not unnecessary guards. + +## Code Review Dimensions + +### Security +- API bearer tokens must never appear in logs, exception messages, or HTTP responses +- Payment amounts must be validated server-side — `RefundValidator` enforces this; bypassing it is a bug +- `redirect_url` values must come from the PayPlug API response, never constructed from user input +- IPN/webhook payloads must be verified via the SDK before any processing +- Card data (PAN, CVV) must never appear in logs, error messages, or stored metadata + +### Performance +- Unnecessary object instantiation in hot paths +- Unbounded loops or unvalidated array traversal in DTOs +- Algorithmic complexity in validators + +### Correctness +- `declare(strict_types=1)` is required on all files — flag any new file missing it +- PHP 7.4+ syntax (arrow functions, typed properties, `??=`, named arguments) must not be introduced — the source code must remain syntactically compatible with PHP 7.1 runtimes even though the composer constraint is `^7.4` +- DTOs must validate all required fields in `hydrate()` and throw on missing/invalid required inputs +- Refund amount must not exceed `payment.amount - payment.amount_refunded` +- `PaymentResourceValidator::validateIsPaid()` must be called before any refund — skipping it is a bug +- API bearer token must be loaded (`Api::load()`) before any SDK call — using an uninitialised API client is a bug +- `RefundOutputDTO` and `PaymentOutputDTO` must reflect the exact API response structure — silent field drops are bugs + +### Maintainability +- Naming clarity, single responsibility, duplication +- Test coverage: PHPUnit in `tests/` with unit and integration groups +- PHPStan compliance at configured level — suppressions must go in the baseline, not inline +- PHP-CS-Fixer compliance with `.php-cs-fixer.dist.php` — `@PHP71Migration` ruleset, no 7.4+ fixer rules +- New gateway classes must extend `AbstractPaymentGateway` and implement `formatPaymentAttributes()` +- New validators must throw `\Exception` with a descriptive message on failure — no silent returns + +## Output Format + +Structure the review comment exactly as follows: + +### 1. What's Good + +A bullet list of positive observations — things done well, non-obvious correct decisions, solid patterns. + +--- + +### 2. Summary table + +A markdown table with two columns: **Dimension** and **Rating**. One row per review dimension. Use emoji inline with the rating text: + +| Dimension | Rating | +|---|---| +| Security | ✅ Fine | +| Correctness | ⚠️ Medium (short reason) | +| Performance | ✅ Fine | +| Maintainability | ⚠️ Low (short reason) | + +Severity scale: +- ✅ **Fine** — no issues +- ⚠️ **Low / Medium** — should be fixed but not blocking +- ❌ **High / Critical** — must be fixed before merge + +--- + +### 3. Closing one-liner + +A single sentence summarising what needs to be addressed before merge (or that the PR is ready if nothing critical). + +--- + +### 4. Individual findings (one section per issue) + +Each finding follows this exact structure: + +**Heading:** `[Dimension] [emoji] [Severity]` — e.g. `Security ⚠️ Medium` + +**Subtitle (bold):** short title followed by the file path and line number as a markdown link — e.g. `**Missing bearer validation** (Api.php:42)` + +**Code block:** the relevant snippet from the diff showing the problem. + +**Explanation paragraph:** what the risk is and why it matters. Be concrete. + +**Fix line:** start with `Fix:` in bold, then a brief description, followed by a code block showing the suggested fix. + +Lead with Critical/High findings. Omit the findings section entirely if there are no issues. + +## Iterative Reviews + +When reviewing a new commit on a PR that already has open review threads: + +- **Resolve threads** for issues that have been addressed in the new commit — do not leave them open if the fix is present. +- **Do not re-open or re-comment** on issues that were already resolved in a previous round. +- Only open new threads for issues that are genuinely new or that remain unresolved. +- If a previous finding was partially addressed, update the thread with what still needs attention rather than opening a duplicate. diff --git a/.github/workflows/auto-tag-rc.yml b/.github/workflows/auto-tag-rc.yml new file mode 100644 index 0000000..ef9f1ce --- /dev/null +++ b/.github/workflows/auto-tag-rc.yml @@ -0,0 +1,10 @@ +name: Auto-tag RC0 + +'on': + create: + +jobs: + create-rc0-tag: + if: startsWith(github.ref, 'refs/heads/release/') + uses: payplug/template-ci/.github/workflows/auto_tag_rc.yml@main + secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f131e9..f6a974c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,43 +1,30 @@ name: CI on: - push: - branches-ignore: - - main # main is never pushed to directly; releases are tag-driven - tags: - - '*' pull_request: branches: - develop - types: [opened, synchronize, reopened, closed] + - master + types: [opened, synchronize, reopened] jobs: # ----------------------------------------------------------------------- - # 1. QUALITY — static analysis & code style on PHP 8.4 source - # Runs on: push to feature branch | PR opened/updated → develop + # QUALITY — static analysis, code style & unit tests on PHP 7.4 + # Runs on: PR opened/updated → develop or master # ----------------------------------------------------------------------- quality: if: github.ref_type != 'tag' && github.event.action != 'closed' uses: payplug/template-ci/.github/workflows/php-quality.yml@main with: - php-version: '7.1' + php-version: '7.4' - # ----------------------------------------------------------------------- - # 2. PACKAGE — zip and store the artifact on PR merged → develop - # ----------------------------------------------------------------------- - package: - if: github.ref_type != 'tag' && github.event.action != 'closed' - uses: payplug/template-ci/.github/workflows/php-package.yml@main - with: - php-version: '7.1' - zip-prefix: 'payplug-plugin-core-php71' - - # ----------------------------------------------------------------------- - # 3. RELEASE — create a GitHub Release from a tag on main - # ----------------------------------------------------------------------- - release: - if: github.event_name == 'push' && github.ref_type == 'tag' - uses: payplug/template-ci/.github/workflows/php-release.yml@main + sonarcloud: + if: always() && !failure() && !cancelled() && github.base_ref == 'develop' + needs: [ quality ] + uses: payplug/template-ci/.github/workflows/sonarcloud.yml@main with: - php-version: '7.1' - zip-prefix: 'payplug-plugin-core-php71' + project-name: 'github-payplug-payplug-payplug-plugin-mcp' + src-folder: 'src/' + secrets: + sonar-orga: ${{ secrets.SONAR_ORGA }} + sonar-token: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml new file mode 100644 index 0000000..b0db559 --- /dev/null +++ b/.github/workflows/pre-release.yml @@ -0,0 +1,17 @@ +name: Release — RC + +'on': + push: + tags: + - '*.*.*-rc*' + +jobs: + quality: + uses: payplug/template-ci/.github/workflows/php-quality.yml@main + with: + php-version: '7.4' + + github-release: + needs: quality + uses: payplug/template-ci/.github/workflows/github_release_rc.yml@main + secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d3efd36 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,12 @@ +name: Release + +'on': + push: + tags: + - '*.*.*' + - '!*.*.*-rc*' + +jobs: + github-release: + uses: payplug/template-ci/.github/workflows/github_release.yml@main + secrets: inherit diff --git a/.gitignore b/.gitignore index 1ee15c7..de10ac7 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,5 @@ vendor # PHPStan var/ payplug-core/ -.claude \ No newline at end of file +.claude +docs/ \ No newline at end of file diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 70d0522..d5e5c54 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -10,16 +10,15 @@ return (new PhpCsFixer\Config()) ->setRiskyAllowed(true) ->setRules([ - '@PSR12' => true, - '@PHP71Migration' => true, - 'array_syntax' => ['syntax' => 'short'], - 'no_unused_imports' => true, - 'ordered_imports' => ['sort_algorithm' => 'alpha'], - 'single_quote' => true, - // php-cs-fixer 2.x rule name (renamed to trailing_comma_in_multiline in 3.x) - 'trailing_comma_in_multiline_array' => true, - 'declare_strict_types' => true, - 'void_return' => true, - 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced'], + '@PSR12' => true, + '@PHP71Migration' => true, + 'array_syntax' => ['syntax' => 'short'], + 'no_unused_imports' => true, + 'ordered_imports' => ['sort_algorithm' => 'alpha'], + 'single_quote' => true, + 'trailing_comma_in_multiline' => ['elements' => ['arrays']], + 'declare_strict_types' => true, + 'void_return' => true, + 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced'], ]) ->setFinder($finder); diff --git a/Dockerfile b/Dockerfile index a7a4124..5e1d3d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,19 @@ FROM composer:2.2 AS composer -FROM php:7.1-cli - -# Debian Buster is EOL — redirect to archive repos before any apt call -RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list \ - && sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list \ - && sed -i '/buster-updates/d' /etc/apt/sources.list +FROM php:7.4-cli RUN apt-get update && apt-get install -y --no-install-recommends \ - git=1:2.20.1-2+deb10u8 \ - unzip=6.0-23+deb10u3 \ - curl=7.64.0-4+deb10u9 \ + git \ + unzip \ + curl \ && rm -rf /var/lib/apt/lists/* -# Xdebug 2.9.8 — last release supporting PHP 7.1 (Xdebug 3.x requires PHP >=7.2) -RUN pecl install xdebug-2.9.8 \ +RUN pecl install xdebug-3.1.6 \ && docker-php-ext-enable xdebug -# Xdebug 2.x config — debug off by default -# To enable step-debug: XDEBUG_CONFIG="remote_enable=1 remote_autostart=1" -RUN echo "xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ - && echo "xdebug.remote_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ - && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini +RUN echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.start_with_request=trigger" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini COPY --from=composer /usr/bin/composer /usr/bin/composer diff --git a/Makefile b/Makefile index 5111ed4..679b6f6 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,8 @@ -.PHONY: build up down shell install update test stan lint fix debug release commit-amend commit-push commit-squash +.PHONY: build up down shell comp-install update test-unit test-unit-inte test-unit-units tu-dep stan cs-lint cs-fix debug ci audit security install DC = docker compose PHP = $(DC) run --rm php -# Xdebug 2.x step-debug: passes remote_enable + remote_autostart via XDEBUG_CONFIG -PHP_DEBUG = XDEBUG_CONFIG="remote_enable=1 remote_autostart=1" $(DC) run --rm php +PHP_DEBUG = XDEBUG_MODE=debug XDEBUG_SESSION=1 $(DC) run --rm php GIT = git @@ -49,12 +48,7 @@ cs-lint: cs-fix: $(PHP) vendor/bin/php-cs-fixer fix -## Release — package src/ + tests/ into payplug-core/ -release: - rm -rf payplug-core && mkdir payplug-core && cp -r src payplug-core/ && cp -r tests payplug-core/ - $(PHP) php scripts/generate-release-composer.php - -## Debug (Xdebug 2.x step-debug enabled) +## Debug (Xdebug 3.x step-debug) debug: $(PHP_DEBUG) bash @@ -67,16 +61,3 @@ audit: $(PHP) composer audit security: audit - -# Git -commit-amend: - $(GIT) commit -a --amend --no-edit - -commit-push: - $(GIT) push --force-with-lease - -commit-squash: - $(GIT) reset --soft $$(git merge-base origin/develop HEAD) - $(GIT) commit --edit -m "$${msg:-$$(git log -1 --pretty=%B)}" - -commit-amend-push: commit-amend commit-push diff --git a/Readme.md b/Readme.md index daa7627..1c14656 100644 --- a/Readme.md +++ b/Readme.md @@ -4,7 +4,7 @@ Module core for Payplug integration. Enables management of payments, merchants, and notifications via the Payplug API. ## Requirements -- PHP 7.2 or higher +- PHP 7.1 or higher - Composer - Payplug PHP SDK (vendor payplug/payplug-php) @@ -106,12 +106,17 @@ Module core for Payplug integration. Enables management of payments, merchants, ## Quick start: ```bash -composer install # Hooks are installed automatically -composer cs:fix # Manual code formatting -composer hooks:install # Reinstall hooks if needed -composer hooks:install # Reinstall hooks if needed - -composer phpunit:unit # Run only unitary phpUnit tests -composer phpunit:inte # Run only integration phpUnit tests -composer phpunit:all # Run all phpUnit tests +make install # Build Docker image, install dependencies and git hooks + +make cs-fix # Fix code style +make cs-lint # Check code style (dry-run) +make stan # Run PHPStan static analysis + +make test-unit # Run all PHPUnit tests +make test-unit-units # Run unit tests only +make test-unit-inte # Run integration tests only + +make ci # Run all checks (stan + cs-lint + tests) + +make debug # Open a shell with Xdebug step-debug enabled ``` \ No newline at end of file diff --git a/captainhook.json b/captainhook.json index 62778af..c32c88e 100644 --- a/captainhook.json +++ b/captainhook.json @@ -5,27 +5,24 @@ { "action": "\\CaptainHook\\App\\Hook\\Message\\Action\\Regex", "options": { - "regex": "/^(PRE|MAG|SYL|SMP)-\\d+: .+/" + "regex": "/^(PRE|SMP)-\\d+: .+/" } } ] }, "pre-commit": { - "actions": [ - { - "action": "sh scripts/check-branch-name.sh", - "options": {} - }, - { - "action": "vendor/bin/phpstan analyse --configuration=phpstan.neon", - "options": {} - }, - { - "action": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff", - "options": {} - } - ], - "enabled": true + "actions": [ + { + "action": "\\CaptainHook\\App\\Hook\\Branch\\Action\\EnsureNaming", + "options": { + "regex": "/^((feature|fix|hotfix|refactor)\\/(PRE|SMP)-\\d+[a-zA-Z0-9_]*|(release|patch)\\/\\d+\\.\\d+\\.\\d+)$/" + } + }, + { + "action": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff", + "options": {} + } + ], + "enabled": true } } - diff --git a/composer.json b/composer.json index e2a50df..f5a613c 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "payplug/payplug-plugin-core", - "description": "Module core pour l'intégration Payplug.", + "name": "payplug/payplug-plugin-mcp", + "description": "Module pour l'intégration MCP Payplug.", "type": "library", "license": "MIT", "authors": [ @@ -10,41 +10,35 @@ } ], "require": { - "php": "^7.1", + "php": "^7.4", "payplug/payplug-php": "^4.0" }, "require-dev": { - "captainhook/captainhook": "^4.0", - "friendsofphp/php-cs-fixer": "^2.0", + "captainhook/captainhook": "^5.0", + "friendsofphp/php-cs-fixer": "^3.0", "mockery/mockery": "^1.3", - "phpstan/phpstan": "^0.12", + "phpstan/phpstan": "^2.2.0", "phpstan/phpstan-mockery": "*", "phpstan/phpstan-phpunit": "*", - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.5" }, "autoload": { "psr-4": { - "PayPlugPluginCore\\": "src/" + "PayPlugPluginMcp\\": "src/" } }, "autoload-dev": { "psr-4": { - "PayPlugPluginCore\\Tests\\": "tests/" + "PayPlugPluginMcp\\Tests\\": "tests/" } }, "scripts": { "post-install-cmd": "vendor/bin/captainhook install --force", "post-update-cmd": "vendor/bin/captainhook install --force", "test": "vendor/bin/phpunit tests", - "test-unit": "vendor/bin/phpunit tests --group unit", - "test-inte": "vendor/bin/phpunit tests --group integration", "stan": "vendor/bin/phpstan analyse --configuration=phpstan.neon", "cs-lint": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --dry-run --diff", - "cs-fix": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php", - "release": [ - "rm -rf payplug-core && mkdir payplug-core && cp -r src payplug-core/ && cp -r tests payplug-core/", - "php scripts/generate-release-composer.php" - ] + "cs-fix": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php" }, "config": { "sort-packages": true diff --git a/composer.lock b/composer.lock index 7f2ff47..2f79b53 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": "7267f9bfee4cb45b760836b310f8547f", + "content-hash": "0a4398cc6e87cedea47d0efd7031f4aa", "packages": [ { "name": "payplug/payplug-php", @@ -65,47 +65,48 @@ "packages-dev": [ { "name": "captainhook/captainhook", - "version": "4.5.8", + "version": "5.18.3", "source": { "type": "git", "url": "https://github.com/captainhook-git/captainhook.git", - "reference": "b89ee9e6b445f44173b2a2a142513d597f490244" + "reference": "b7bc503a40ccfe80ea9638e4921b4697669d725f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/b89ee9e6b445f44173b2a2a142513d597f490244", - "reference": "b89ee9e6b445f44173b2a2a142513d597f490244", + "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/b7bc503a40ccfe80ea9638e4921b4697669d725f", + "reference": "b7bc503a40ccfe80ea9638e4921b4697669d725f", "shasum": "" }, "require": { "ext-json": "*", - "ext-simplexml": "*", "ext-spl": "*", - "php": "^7.1", - "sebastianfeldmann/camino": "^0.9.1", - "sebastianfeldmann/cli": "^3.0", - "sebastianfeldmann/git": "^2.2", - "symfony/console": ">=2.7" + "ext-xml": "*", + "php": ">=7.4", + "sebastianfeldmann/camino": "^0.9.2", + "sebastianfeldmann/cli": "^3.3", + "sebastianfeldmann/git": "^3.9", + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "replace": { "sebastianfeldmann/captainhook": "*" }, "require-dev": { - "composer/composer": "~1", - "mikey179/vfsstream": "~1", - "phpunit/phpunit": "^7.0" + "composer/composer": "~1 || ^2.0", + "mikey179/vfsstream": "~1" }, "bin": [ - "captainhook", - "captainhook-run" + "bin/captainhook" ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.3.x-dev" + "captainhook": { + "config": "captainhook.json" }, - "captainhook-config": "captainhook.json", - "captainhook-git-dir": ".git" + "branch-alias": { + "dev-main": "6.0.x-dev" + } }, "autoload": { "psr-4": { @@ -128,48 +129,122 @@ "commit-msg", "git", "hooks", + "post-merge", "pre-commit", "pre-push", "prepare-commit-msg" ], "support": { "issues": "https://github.com/captainhookphp/captainhook/issues", - "source": "https://github.com/captainhook-git/captainhook/tree/4.5.8" + "source": "https://github.com/captainhook-git/captainhook/tree/5.18.3" }, "funding": [ { - "url": "https://github.com/sebastianfeldmann", + "url": "https://github.com/sponsors/sebastianfeldmann", + "type": "github" + } + ], + "time": "2023-11-05T13:56:19+00:00" + }, + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", "type": "github" } ], - "time": "2019-12-02T15:20:27+00:00" + "time": "2022-12-23T10:58:28+00:00" }, { "name": "composer/pcre", - "version": "1.0.1", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<2.2.2" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -197,7 +272,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "source": "https://github.com/composer/pcre/tree/3.4.0" }, "funding": [ { @@ -207,13 +282,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2026-06-07T11:47:49+00:00" }, { "name": "composer/semver", @@ -294,27 +365,27 @@ }, { "name": "composer/xdebug-handler", - "version": "2.0.5", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", - "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "composer/pcre": "^1", - "php": "^5.3.2 || ^7.0 || ^8.0", + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -338,9 +409,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -356,43 +427,39 @@ "type": "tidelift" } ], - "time": "2022-02-24T20:20:32+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "doctrine/annotations", - "version": "1.14.4", + "name": "doctrine/instantiator", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "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", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", - "vimeo/psalm": "^4.30 || ^5.14" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -401,119 +468,130 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" }, { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" } ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.4" - }, - "abandoned": true, - "time": "2024-09-05T10:15:52+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { - "name": "doctrine/deprecations", - "version": "1.1.6", + "name": "ergebnis/agent-detector", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" + "url": "https://github.com/ergebnis/agent-detector.git", + "reference": "e211f17928c8b95a51e06040792d57f5462fb271" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/e211f17928c8b95a51e06040792d57f5462fb271", + "reference": "e211f17928c8b95a51e06040792d57f5462fb271", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=14" + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^14", - "phpstan/phpstan": "1.4.10 || 2.1.30", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + "ergebnis/composer-normalize": "^2.51.0", + "ergebnis/license": "^2.7.0", + "ergebnis/php-cs-fixer-config": "^6.60.2", + "ergebnis/phpstan-rules": "^2.13.1", + "ergebnis/phpunit-slow-test-detector": "^2.24.0", + "ergebnis/rector-rules": "^1.18.1", + "fakerphp/faker": "^1.24.1", + "infection/infection": "^0.26.6", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.54", + "phpstan/phpstan-deprecation-rules": "^2.0.4", + "phpstan/phpstan-phpunit": "^2.0.16", + "phpstan/phpstan-strict-rules": "^2.0.10", + "phpunit/phpunit": "^9.6.34", + "rector/rector": "^2.4.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + }, + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "src" + "Ergebnis\\AgentDetector\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "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/", + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a detector for detecting the presence of an agent.", + "homepage": "https://github.com/ergebnis/agent-detector", "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.6" + "issues": "https://github.com/ergebnis/agent-detector/issues", + "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/agent-detector" }, - "time": "2026-02-07T07:09:04+00:00" + "time": "2026-05-07T08:19:07+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.5.0", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.0" }, "require-dev": { - "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" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Evenement\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -522,66 +600,53 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "constructor", - "instantiate" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { - "name": "doctrine/lexer", - "version": "2.1.1", + "name": "fidry/cpu-core-counter", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.21" + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -590,127 +655,97 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" + "CPU", + "core" ], "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" + "url": "https://github.com/theofidry", + "type": "github" } ], - "time": "2024-02-05T11:35:39+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.19.3", + "version": "v3.95.11", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "35f98e1293283397824d7f349ce5afb8747c3cd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/35f98e1293283397824d7f349ce5afb8747c3cd5", + "reference": "35f98e1293283397824d7f349ce5afb8747c3cd5", "shasum": "" }, "require": { - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.2 || ^2.0", - "doctrine/annotations": "^1.2", + "clue/ndjson-react": "^1.3", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.5", + "ergebnis/agent-detector": "^1.2", + "ext-filter": "*", + "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || ^7.0 || ^8.0", - "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", - "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0", - "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", - "symfony/polyfill-php70": "^1.0", - "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0 || ^5.0", - "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + "fidry/cpu-core-counter": "^1.3", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.37", + "symfony/polyfill-php80": "^1.37", + "symfony/polyfill-php81": "^1.37", + "symfony/polyfill-php84": "^1.37", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4.2", - "php-cs-fixer/accessible-object": "^1.0", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", - "symfony/phpunit-bridge": "^5.2.1", - "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + "facile-it/paraunit": "^1.3.1 || ^2.11.0", + "infection/infection": "^0.32.7", + "justinrainbow/json-schema": "^6.10.0", + "keradus/cli-executor": "^2.3", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.9.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", + "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55", + "symfony/polyfill-php85": "^1.38", + "symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.0", + "symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.0" }, "suggest": { "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters.", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", - "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" ], "type": "application", - "extra": { - "branch-alias": { - "dev-master": "2.19-dev" - } - }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" }, - "classmap": [ - "tests/Test/AbstractFixerTestCase.php", - "tests/Test/AbstractIntegrationCaseFactory.php", - "tests/Test/AbstractIntegrationTestCase.php", - "tests/Test/Assert/AssertTokensTrait.php", - "tests/Test/IntegrationCase.php", - "tests/Test/IntegrationCaseFactory.php", - "tests/Test/IntegrationCaseFactoryInterface.php", - "tests/Test/InternalIntegrationCaseFactory.php", - "tests/Test/IsIdenticalConstraint.php", - "tests/Test/TokensWithObservedTransformers.php", - "tests/TestCase.php" + "exclude-from-classmap": [ + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -728,9 +763,15 @@ } ], "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.11" }, "funding": [ { @@ -738,24 +779,24 @@ "type": "github" } ], - "time": "2021-11-15T17:17:55+00:00" + "time": "2026-06-25T14:17:04+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -763,8 +804,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -787,41 +828,44 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { "name": "mockery/mockery", - "version": "1.3.6", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0", - "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -832,12 +876,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -855,10 +907,13 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.3.6" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-09-07T15:05:49+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", @@ -920,30 +975,90 @@ ], "time": "2025-08-01T08:46:24+00:00" }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -975,26 +1090,32 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2018-07-08T19:23:20+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1026,336 +1147,61 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/master" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2018-07-08T19:19:57+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "php-cs-fixer/diff", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" - }, + "name": "phpstan/phpstan", + "version": "2.2.2", "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5cc34d491a90e79c216d824f60fe21fd4d93bd6", + "reference": "e5cc34d491a90e79c216d824f60fe21fd4d93bd6", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.4|^8.0" }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", "autoload": { - "classmap": [ - "src/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Ondřej Mirtes" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Markus Staab" }, { - "name": "SpacePossum" - } - ], - "description": "sebastian/diff v2 backport support for PHP5.6", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" - }, - "abandoned": true, - "time": "2020-10-14T08:39:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Vincent Langlet" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", + "dev", "static analysis" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" - }, - "time": "2020-04-27T09:25:28+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpdocumentor/type-resolver": "0.4.*", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "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/release/4.x" - }, - "time": "2019-12-28T18:55:12+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "shasum": "" - }, - "require": { - "php": "^7.1", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2" - }, - "time": "2019-08-22T18:11:29+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.10.3", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" - }, - "time": "2020-03-05T15:02:03+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "0.12.100", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "48236ddf823547081b2b153d1cd2994b784328c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3", - "reference": "48236ddf823547081b2b153d1cd2994b784328c3", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.100" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -1365,38 +1211,34 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2022-11-01T09:52:08+00:00" + "time": "2026-06-05T09:00:01+00:00" }, { "name": "phpstan/phpstan-mockery", - "version": "0.12.14", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-mockery.git", - "reference": "7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f" + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f", - "reference": "7cc74bf434b3c2190f7f4cfc08c74f7c0b65667f", + "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394", + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^0.12.60" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0" }, "require-dev": { - "mockery/mockery": "^1.2.4", + "mockery/mockery": "^1.6.11", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^0.12.16", - "phpstan/phpstan-strict-rules": "^0.12.5", - "phpunit/phpunit": "^9.5" + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" }, "type": "phpstan-extension", "extra": { @@ -1404,9 +1246,6 @@ "includes": [ "extension.neon" ] - }, - "branch-alias": { - "dev-master": "0.12-dev" } }, "autoload": { @@ -1421,35 +1260,37 @@ "description": "PHPStan Mockery extension", "support": { "issues": "https://github.com/phpstan/phpstan-mockery/issues", - "source": "https://github.com/phpstan/phpstan-mockery/tree/0.12.14" + "source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0" }, - "time": "2021-06-10T12:12:36+00:00" + "time": "2024-10-14T03:18:12+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "0.12.22", + "version": "2.0.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc" + "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", - "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6ab598e1bc106e6827fd346ae4a12b4a5d634c32", + "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^0.12.92" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.32" }, "conflict": { "phpunit/phpunit": "<7.0" }, "require-dev": { + "nikic/php-parser": "^5", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-strict-rules": "^0.12.6", - "phpunit/phpunit": "^9.5" + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" }, "type": "phpstan-extension", "extra": { @@ -1458,9 +1299,6 @@ "extension.neon", "rules.neon" ] - }, - "branch-alias": { - "dev-master": "0.12-dev" } }, "autoload": { @@ -1473,48 +1311,55 @@ "MIT" ], "description": "PHPUnit extensions and rules for PHPStan", + "keywords": [ + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.22" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.16" }, - "time": "2021-08-12T10:53:43+00:00" + "time": "2026-02-14T09:05:21+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.6" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -1542,34 +1387,41 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, - "time": "2018-10-31T16:06:48+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.6", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "69deeb8664f611f156a924154985fbd4911eb36b" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/69deeb8664f611f156a924154985fbd4911eb36b", - "reference": "69deeb8664f611f156a924154985fbd4911eb36b", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1596,7 +1448,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.6" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -1604,26 +1456,38 @@ "type": "github" } ], - "time": "2024-03-01T13:39:50+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1640,41 +1504,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.4", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", - "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1693,14 +1563,14 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { @@ -1708,33 +1578,32 @@ "type": "github" } ], - "time": "2024-03-01T13:42:41+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.3", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1749,17 +1618,18 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { @@ -1767,122 +1637,742 @@ "type": "github" } ], - "time": "2021-07-26T12:15:06+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.20", + "version": "9.6.34", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.10", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.8", + "sebastian/global-state": "^5.0.8", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "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" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:45:00+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.7", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.7" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-12-23T15:25:20+00:00" + }, + { + "name": "react/dns", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.14.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-18T19:34:28+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-17T20:46:25+00:00" + }, + { + "name": "react/promise", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.12.28 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-08-19T18:57:03+00:00" + }, + { + "name": "react/socket", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "url": "https://github.com/reactphp/socket.git", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { - "ext-pdo": "*" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" - }, - "bin": [ - "phpunit" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.5-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Socket\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", "keywords": [ - "phpunit", - "testing", - "xunit" + "Connection", + "Socket", + "async", + "reactphp", + "stream" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, - "time": "2020-01-08T08:45:45+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-19T20:47:34+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "react/stream", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { - "php": ">=5.3.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "React\\Stream\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1891,148 +2381,185 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Common interface for caching libraries", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ - "cache", - "psr", - "psr-6" + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, - "time": "2016-08-06T20:24:11+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "sebastian/cli-parser", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, - "time": "2017-02-14T16:28:37+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, - "time": "2021-05-03T11:20:27+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", - "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2054,7 +2581,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/1.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { @@ -2062,34 +2589,34 @@ "type": "github" } ], - "time": "2024-03-01T13:45:45+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.7", + "version": "4.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52" + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", - "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2128,7 +2655,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.7" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" }, "funding": [ { @@ -2148,33 +2675,90 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:20:25+00:00" + "time": "2026-01-24T09:22:56+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "3.0.6", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", - "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2206,7 +2790,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -2214,27 +2798,27 @@ "type": "github" } ], - "time": "2024-03-02T06:16:36+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "4.2.5", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "56932f6049a0482853056ffd617c91ffcc754205" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", - "reference": "56932f6049a0482853056ffd617c91ffcc754205", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -2242,7 +2826,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2269,7 +2853,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -2277,34 +2861,34 @@ "type": "github" } ], - "time": "2024-03-01T13:49:59+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.5", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6" + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6", - "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2339,42 +2923,57 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2022-09-14T06:00:17+00:00" + "time": "2025-09-24T06:03:27+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "5.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6", + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -2382,7 +2981,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2406,37 +3005,112 @@ "global state" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2025-08-10T07:10:35+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, - "time": "2017-04-27T15:39:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.5", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "ac5b293dba925751b808e02923399fb44ff0d541" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", - "reference": "ac5b293dba925751b808e02923399fb44ff0d541", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2458,7 +3132,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/3.0.5" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { @@ -2466,32 +3140,32 @@ "type": "github" } ], - "time": "2024-03-01T13:54:02+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", - "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2513,7 +3187,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/1.1.3" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { @@ -2521,32 +3195,32 @@ "type": "github" } ], - "time": "2024-03-01T13:56:04+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.3", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a" + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/8fe7e75986a9d24b4cceae847314035df7703a5a", - "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2573,10 +3247,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" }, "funding": [ { @@ -2596,29 +3270,32 @@ "type": "tidelift" } ], - "time": "2025-08-10T05:25:53+00:00" + "time": "2025-08-10T06:57:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", - "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2639,7 +3316,63 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "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/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2647,29 +3380,29 @@ "type": "github" } ], - "time": "2024-03-01T13:59:09+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2692,9 +3425,15 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" }, { "name": "sebastianfeldmann/camino", @@ -2754,25 +3493,30 @@ }, { "name": "sebastianfeldmann/cli", - "version": "3.2.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/cli.git", - "reference": "fbd21f4d2b7978cd7e79432726070dd2ee04cce5" + "reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/fbd21f4d2b7978cd7e79432726070dd2ee04cce5", - "reference": "fbd21f4d2b7978cd7e79432726070dd2ee04cce5", + "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/6fa122afd528dae7d7ec988a604aa6c600f5d9b5", + "reference": "6fa122afd528dae7d7ec988a604aa6c600f5d9b5", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "symfony/process": "^4.3 | ^5.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4.x-dev" + } + }, "autoload": { "psr-4": { "SebastianFeldmann\\Cli\\": "src/" @@ -2795,36 +3539,43 @@ ], "support": { "issues": "https://github.com/sebastianfeldmann/cli/issues", - "source": "https://github.com/sebastianfeldmann/cli/tree/master" + "source": "https://github.com/sebastianfeldmann/cli/tree/3.4.2" }, - "time": "2019-06-17T22:31:05+00:00" + "funding": [ + { + "url": "https://github.com/sebastianfeldmann", + "type": "github" + } + ], + "time": "2024-11-26T10:19:01+00:00" }, { "name": "sebastianfeldmann/git", - "version": "2.4.0", + "version": "3.9.3", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "d52744f4e24e2ad4aef49c303b8397af0b1dffed" + "reference": "eb2ca84a2b45a461f0bf5d4fd400df805649e83a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/d52744f4e24e2ad4aef49c303b8397af0b1dffed", - "reference": "d52744f4e24e2ad4aef49c303b8397af0b1dffed", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/eb2ca84a2b45a461f0bf5d4fd400df805649e83a", + "reference": "eb2ca84a2b45a461f0bf5d4fd400df805649e83a", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1", - "sebastianfeldmann/cli": "^3.0.0" + "ext-xml": "*", + "php": ">=7.2", + "sebastianfeldmann/cli": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "mikey179/vfsstream": "^1.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -2849,49 +3600,58 @@ ], "support": { "issues": "https://github.com/sebastianfeldmann/git/issues", - "source": "https://github.com/sebastianfeldmann/git/tree/master" + "source": "https://github.com/sebastianfeldmann/git/tree/3.9.3" }, - "time": "2019-09-30T15:04:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianfeldmann", + "type": "github" + } + ], + "time": "2023-10-13T09:10:48+00:00" }, { "name": "symfony/console", - "version": "v4.4.49", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { "psr/log": ">=3", - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", - "symfony/process": "<3.3" + "symfony/process": "<4.4" }, "provide": { "psr/log-implementation": "1.0|2.0" }, "require-dev": { "psr/log": "^1|^2", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" + "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", @@ -2924,8 +3684,81 @@ ], "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/console/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T11:30:55+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "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/console/tree/v4.4.49" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" }, "funding": [ { @@ -2941,43 +3774,44 @@ "type": "tidelift" } ], - "time": "2022-11-05T17:10:16+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.44", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1", + "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": "<3.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.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": "", @@ -3009,7 +3843,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/v4.4.44" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" }, "funding": [ { @@ -3025,27 +3859,27 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.10.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974" + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/761c8b8387cfe5f8026594a75fdf0a4e83ba6974", - "reference": "761c8b8387cfe5f8026594a75fdf0a4e83ba6974", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "psr/event-dispatcher": "", "symfony/event-dispatcher-implementation": "" }, "type": "library", @@ -3055,7 +3889,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "1.1-dev" + "dev-main": "2.5-dev" } }, "autoload": { @@ -3088,7 +3922,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.10.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.4" }, "funding": [ { @@ -3104,27 +3938,31 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/filesystem", - "version": "v4.4.42", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", - "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, + "require-dev": { + "symfony/process": "^5.4|^6.4" + }, "type": "library", "autoload": { "psr-4": { @@ -3151,7 +3989,139 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v4.4.42" + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-22T13:05:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "63741784cd7b9967975eec610b256eed3ede022b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-28T13:32:08+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" }, "funding": [ { @@ -3167,34 +4137,45 @@ "type": "tidelift" } ], - "time": "2022-05-20T08:49:14+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "symfony/finder", - "version": "v4.4.44", + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", - "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3202,18 +4183,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Finds files and directories via an intuitive fluent interface", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.44" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -3224,39 +4211,51 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-07-29T07:35:46+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/options-resolver", - "version": "v4.4.44", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "583f56160f716dd435f1cd721fd14b548f4bb510" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510", - "reference": "583f56160f716dd435f1cd721fd14b548f4bb510", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3264,23 +4263,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an improved replacement for the array_replace PHP function", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ - "config", - "configuration", - "options" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v4.4.44" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" }, "funding": [ { @@ -3291,35 +4293,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2026-05-26T05:58:03+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.30.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.38.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" + "php": ">=7.2" }, "suggest": { - "ext-ctype": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { @@ -3333,8 +4336,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3342,24 +4348,26 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "ctype", + "intl", + "normalizer", "polyfill", - "portable" + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" }, "funding": [ { @@ -3370,29 +4378,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2026-05-25T13:48:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.38.2", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3439,7 +4452,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" }, "funding": [ { @@ -3450,40 +4463,52 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2026-05-27T06:59:30+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", + "name": "symfony/polyfill-php73", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { "url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill" - }, - "branch-alias": { - "dev-main": "1.20-dev" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -3498,7 +4523,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3507,7 +4532,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" }, "funding": [ { @@ -3518,29 +4543,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.30.0", + "name": "symfony/polyfill-php80", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -3554,14 +4583,21 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3571,7 +4607,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3580,7 +4616,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -3591,29 +4627,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.30.0", + "name": "symfony/polyfill-php81", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -3627,7 +4667,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -3647,7 +4687,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3656,7 +4696,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1" }, "funding": [ { @@ -3667,29 +4707,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2026-05-26T12:45:58+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "name": "symfony/polyfill-php84", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -3703,7 +4747,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -3714,10 +4758,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3727,7 +4767,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3736,7 +4776,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" }, "funding": [ { @@ -3747,29 +4787,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2026-05-26T12:51:13+00:00" }, { "name": "symfony/process", - "version": "v4.4.44", + "version": "v5.4.51", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" + "reference": "467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", - "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "url": "https://api.github.com/repos/symfony/process/zipball/467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f", + "reference": "467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -3798,7 +4842,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v4.4.44" + "source": "https://github.com/symfony/process/tree/v5.4.51" }, "funding": [ { @@ -3809,30 +4853,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-06-27T13:16:42+00:00" + "time": "2026-01-26T15:53:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.10.0", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", - "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { - "php": ">=7.1.3", - "psr/container": "^1.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": "" @@ -3844,7 +4896,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "1.1-dev" + "dev-main": "2.5-dev" } }, "autoload": { @@ -3877,7 +4929,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v1.10.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" }, "funding": [ { @@ -3893,28 +4945,25 @@ "type": "tidelift" } ], - "time": "2022-05-27T14:01:05+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/stopwatch", - "version": "v4.4.46", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52" + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52", - "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/service-contracts": "^1.0|^2" - }, - "require-dev": { - "symfony/polyfill-php72": "~1.5" + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -3942,7 +4991,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v4.4.46" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" }, "funding": [ { @@ -3958,114 +5007,153 @@ "type": "tidelift" } ], - "time": "2022-09-28T12:53:24+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.1.3", + "name": "symfony/string", + "version": "v5.4.47", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "url": "https://github.com/symfony/string.git", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" + "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-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "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": { - "classmap": [ - "src/" + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/symfony/string/tree/v5.4.47" }, - "time": "2019-06-13T22:48:21+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-10T20:33:58+00:00" }, { - "name": "webmozart/assert", - "version": "1.9.1", + "name": "theseer/tokenizer", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, - "time": "2020-07-08T17:02:28+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.1" + "php": "^7.4" }, - "platform-dev": [], - "plugin-api-version": "2.2.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/phpstan.neon b/phpstan.neon index 01179d2..656a6d0 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,7 +3,7 @@ includes: - vendor/phpstan/phpstan-phpunit/extension.neon parameters: - level: 6 + level: 8 paths: - src - tests diff --git a/scripts/check-branch-name.sh b/scripts/check-branch-name.sh deleted file mode 100755 index ffdf109..0000000 --- a/scripts/check-branch-name.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -# Check that the current branch name follows the project naming convention. -# Expected pattern: (feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-{ticket-id}[-slug] - -BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) - -if [ -z "$BRANCH" ]; then - echo "Could not determine current branch name." - exit 1 -fi - -echo "$BRANCH" | grep -qE '^(feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-[0-9]+(-[a-z0-9]+)*$' - -if [ $? -ne 0 ]; then - echo "" - echo " Branch name does not respect the naming convention." - echo " Current : $BRANCH" - echo " Expected: (feature|fix|hotfix|refactor|release)/(PRE|MAG|SYL|SMP)-{ticket-id}[-slug]" - echo " Example : feature/PRE-1234-add-refund-tool" - echo "" - exit 1 -fi diff --git a/scripts/generate-release-composer.php b/scripts/generate-release-composer.php deleted file mode 100644 index 618ad18..0000000 --- a/scripts/generate-release-composer.php +++ /dev/null @@ -1,73 +0,0 @@ - '^7.5', // PHPUnit 7.x requires PHP >=7.1 - 'mockery/mockery' => '^1.3', // Mockery 1.3.x requires PHP >=5.4 -]; - -// Fix autoload: src/ and tests/ are subdirectories of the package root. -$data['autoload']['psr-4'] = [ - 'PayPlugPluginCore\\Tests\\' => 'tests/', - 'PayPlugPluginCore\\' => 'src/', -]; -unset($data['autoload-dev']); - -$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n"; -if ($json === false) { - fwrite(STDERR, "Error: Failed to encode composer.json: " . json_last_error_msg() . "\n"); - exit(1); -} - -$bytesWritten = file_put_contents($target, $json); - -if ($bytesWritten === false || $bytesWritten < strlen($json)) { - fwrite(STDERR, "Error: Failed to write composer.json to {$target}\n"); - exit(1); -} - -echo "Generated {$target} (PHP ^7.1)\n"; diff --git a/src/Actions/PaymentAction.php b/src/Actions/PaymentAction.php index 2dd9ac5..d5e7908 100644 --- a/src/Actions/PaymentAction.php +++ b/src/Actions/PaymentAction.php @@ -2,17 +2,18 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Actions; - -use PayPlugPluginCore\Gateways\PaymentGatewayManager; -use PayPlugPluginCore\Gateways\RefundGateway; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; -use PayPlugPluginCore\Models\Entities\PaymentOutputDTO; -use PayPlugPluginCore\Models\Entities\RefundInputDTO; -use PayPlugPluginCore\Models\Entities\RefundOutputDTO; -use PayPlugPluginCore\Utilities\Services\Api; -use PayPlugPluginCore\Validators\PaymentResourceValidator; -use PayPlugPluginCore\Validators\RefundValidator; +namespace PayPlugPluginMcp\Actions; + +use Payplug\Resource\Payment; +use PayPlugPluginMcp\Gateways\PaymentGatewayManager; +use PayPlugPluginMcp\Gateways\RefundGateway; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Models\Entities\PaymentOutputDTO; +use PayPlugPluginMcp\Models\Entities\RefundInputDTO; +use PayPlugPluginMcp\Models\Entities\RefundOutputDTO; +use PayPlugPluginMcp\Utilities\Services\Api; +use PayPlugPluginMcp\Validators\PaymentResourceValidator; +use PayPlugPluginMcp\Validators\RefundValidator; class PaymentAction { @@ -67,15 +68,16 @@ public function captureAction(): void */ public function refundAction(RefundInputDTO $refund_inputDTO): ?RefundOutputDTO { - if (null === $refund_inputDTO->getResource()) { - throw new \Exception('Invalid parameter, resource is required.'); - } - // Validate the refund input DTO to ensure it contains coherent and allowed data (new RefundValidator())->validate($refund_inputDTO); // Then check if the resource contain in the DTO is a valid payment resource $resource = $refund_inputDTO->getResource(); + + if (!$resource instanceof Payment) { + throw new \Exception('Invalid parameter, resource is required.'); + } + $validator = new PaymentResourceValidator(); $validator->validate($resource); $validator->validateIsPaid($resource); diff --git a/src/Gateways/AbstractPaymentGateway.php b/src/Gateways/AbstractPaymentGateway.php index ceefc5c..64d058c 100644 --- a/src/Gateways/AbstractPaymentGateway.php +++ b/src/Gateways/AbstractPaymentGateway.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Gateways; +namespace PayPlugPluginMcp\Gateways; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; abstract class AbstractPaymentGateway { diff --git a/src/Gateways/Payment/EmailLinkPaymentGateway.php b/src/Gateways/Payment/EmailLinkPaymentGateway.php index 0e21d1c..09e83d7 100644 --- a/src/Gateways/Payment/EmailLinkPaymentGateway.php +++ b/src/Gateways/Payment/EmailLinkPaymentGateway.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Gateways\Payment; +namespace PayPlugPluginMcp\Gateways\Payment; -use PayPlugPluginCore\Gateways\AbstractPaymentGateway; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Gateways\AbstractPaymentGateway; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; class EmailLinkPaymentGateway extends AbstractPaymentGateway { diff --git a/src/Gateways/Payment/StandardPaymentGateway.php b/src/Gateways/Payment/StandardPaymentGateway.php index bc11e2a..3ec3465 100644 --- a/src/Gateways/Payment/StandardPaymentGateway.php +++ b/src/Gateways/Payment/StandardPaymentGateway.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Gateways\Payment; +namespace PayPlugPluginMcp\Gateways\Payment; -use PayPlugPluginCore\Gateways\AbstractPaymentGateway; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Gateways\AbstractPaymentGateway; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; class StandardPaymentGateway extends AbstractPaymentGateway { diff --git a/src/Gateways/PaymentGatewayManager.php b/src/Gateways/PaymentGatewayManager.php index f760833..214ad70 100644 --- a/src/Gateways/PaymentGatewayManager.php +++ b/src/Gateways/PaymentGatewayManager.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Gateways; +namespace PayPlugPluginMcp\Gateways; class PaymentGatewayManager { @@ -15,7 +15,7 @@ public function load(string $payment_method_name): AbstractPaymentGateway throw new \Exception('Invalid parameter, $payment_method_name given should be a non empty string.'); } - $class = '\PayPlugPluginCore\Gateways\Payment\\' + $class = '\PayPlugPluginMcp\Gateways\Payment\\' . str_replace('_', '', ucwords($payment_method_name, '_')) . 'PaymentGateway'; diff --git a/src/Gateways/RefundGateway.php b/src/Gateways/RefundGateway.php index 9869d7e..d83a2b3 100644 --- a/src/Gateways/RefundGateway.php +++ b/src/Gateways/RefundGateway.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Gateways; +namespace PayPlugPluginMcp\Gateways; -use PayPlugPluginCore\Models\Entities\RefundInputDTO; +use PayPlugPluginMcp\Models\Entities\RefundInputDTO; class RefundGateway { diff --git a/src/Models/Entities/PaymentInputDTO.php b/src/Models/Entities/PaymentInputDTO.php index 2f43bdf..eb931c7 100644 --- a/src/Models/Entities/PaymentInputDTO.php +++ b/src/Models/Entities/PaymentInputDTO.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Models\Entities; +namespace PayPlugPluginMcp\Models\Entities; use Exception; diff --git a/src/Models/Entities/PaymentOutputDTO.php b/src/Models/Entities/PaymentOutputDTO.php index 5b72913..aff49ca 100644 --- a/src/Models/Entities/PaymentOutputDTO.php +++ b/src/Models/Entities/PaymentOutputDTO.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Models\Entities; +namespace PayPlugPluginMcp\Models\Entities; use Payplug\Resource\Payment; diff --git a/src/Models/Entities/RefundInputDTO.php b/src/Models/Entities/RefundInputDTO.php index 9cc11af..3c4eda6 100644 --- a/src/Models/Entities/RefundInputDTO.php +++ b/src/Models/Entities/RefundInputDTO.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Models\Entities; +namespace PayPlugPluginMcp\Models\Entities; use Exception; use Payplug\Resource\Payment; diff --git a/src/Models/Entities/RefundOutputDTO.php b/src/Models/Entities/RefundOutputDTO.php index 81c13f2..46011d1 100644 --- a/src/Models/Entities/RefundOutputDTO.php +++ b/src/Models/Entities/RefundOutputDTO.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Models\Entities; +namespace PayPlugPluginMcp\Models\Entities; use Payplug\Resource\Refund; diff --git a/src/Utilities/Services/Api.php b/src/Utilities/Services/Api.php index d0435db..bcaa6f3 100644 --- a/src/Utilities/Services/Api.php +++ b/src/Utilities/Services/Api.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Utilities\Services; +namespace PayPlugPluginMcp\Utilities\Services; use Payplug\Payment; use Payplug\Payplug; diff --git a/src/Validators/PaymentResourceValidator.php b/src/Validators/PaymentResourceValidator.php index 1cb84de..4571f76 100644 --- a/src/Validators/PaymentResourceValidator.php +++ b/src/Validators/PaymentResourceValidator.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Validators; +namespace PayPlugPluginMcp\Validators; use Exception; use Payplug\Resource\Payment; @@ -33,7 +33,7 @@ public function validateId(Payment $payment): void if (!preg_match(self::ID_PATTERN, $id)) { throw new Exception( - sprintf( + \sprintf( 'PaymentResourceValidator: id ("%s") must start with "inst_" or "pay_" followed by alphanumeric characters.', $id ) diff --git a/src/Validators/RefundValidator.php b/src/Validators/RefundValidator.php index 5cf78f4..97f3216 100644 --- a/src/Validators/RefundValidator.php +++ b/src/Validators/RefundValidator.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Validators; +namespace PayPlugPluginMcp\Validators; use Exception; use Payplug\Resource\Payment; -use PayPlugPluginCore\Models\Entities\RefundInputDTO; +use PayPlugPluginMcp\Models\Entities\RefundInputDTO; class RefundValidator { @@ -42,7 +42,7 @@ private function validateAmount(RefundInputDTO $refund_inputDTO): void if ($amount < self::AMOUNT_MIN) { throw new Exception( - sprintf( + \sprintf( 'RefundValidator: amount (%d) must be at least %d cents.', $amount, self::AMOUNT_MIN @@ -55,7 +55,7 @@ private function validateAmount(RefundInputDTO $refund_inputDTO): void if ($amount > $refundable_limit) { throw new Exception( - sprintf( + \sprintf( 'RefundValidator: amount (%d) exceeds the refundable limit (%d cents).', $amount, $refundable_limit @@ -84,7 +84,7 @@ private function validateRefundableWindow(RefundInputDTO $refund_inputDTO): void if (null !== $resource->refundable_after && $now < (int) $resource->refundable_after) { throw new Exception( - sprintf( + \sprintf( 'RefundValidator: refund is not yet available (refundable_after: %s).', date('Y-m-d H:i:s', (int) $resource->refundable_after) ) @@ -93,7 +93,7 @@ private function validateRefundableWindow(RefundInputDTO $refund_inputDTO): void if (null !== $resource->refundable_until && $now > (int) $resource->refundable_until) { throw new Exception( - sprintf( + \sprintf( 'RefundValidator: refund period has expired (refundable_until: %s).', date('Y-m-d H:i:s', (int) $resource->refundable_until) ) diff --git a/stubs/PayplugPayment.stub b/stubs/PayplugPayment.stub deleted file mode 100644 index c61c568..0000000 --- a/stubs/PayplugPayment.stub +++ /dev/null @@ -1,27 +0,0 @@ -{$name}; } - $mock = '\\PayPlugPluginCore\\Tests\\Mock\\' . str_replace('_', '', ucwords($name, '_')) . 'Mock'; + $mock = '\\PayPlugPluginMcp\\Tests\\Mock\\' . str_replace('_', '', ucwords($name, '_')) . 'Mock'; if (!class_exists($mock)) { throw new \Exception('Mock can\'t be found. Given: ' . $mock); } diff --git a/tests/Units/Actions/PaymentAction/createActionTest.php b/tests/Units/Actions/PaymentAction/createActionTest.php index 42f9d62..fedd9ed 100644 --- a/tests/Units/Actions/PaymentAction/createActionTest.php +++ b/tests/Units/Actions/PaymentAction/createActionTest.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Actions\PaymentAction; +namespace PayPlugPluginMcp\Tests\Units\Actions\PaymentAction; use Mockery\MockInterface; -use PayPlugPluginCore\Gateways\AbstractPaymentGateway; -use PayPlugPluginCore\Gateways\PaymentGatewayManager; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; -use PayPlugPluginCore\Tests\Mock\PaymentInputDTOMock; -use PayPlugPluginCore\Tests\Mock\PaymentMock; -use PayPlugPluginCore\Tests\Mock\PaymentOutputDTOMock; -use PayPlugPluginCore\Utilities\Services\Api; +use PayPlugPluginMcp\Gateways\AbstractPaymentGateway; +use PayPlugPluginMcp\Gateways\PaymentGatewayManager; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Tests\Mock\PaymentInputDTOMock; +use PayPlugPluginMcp\Tests\Mock\PaymentMock; +use PayPlugPluginMcp\Tests\Mock\PaymentOutputDTOMock; +use PayPlugPluginMcp\Utilities\Services\Api; /** * @group units diff --git a/tests/Units/Actions/PaymentAction/paymentActionBase.php b/tests/Units/Actions/PaymentAction/paymentActionBase.php index c9a9a34..f559c6e 100644 --- a/tests/Units/Actions/PaymentAction/paymentActionBase.php +++ b/tests/Units/Actions/PaymentAction/paymentActionBase.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Actions\PaymentAction; +namespace PayPlugPluginMcp\Tests\Units\Actions\PaymentAction; use Mockery; -use PayPlugPluginCore\Actions\PaymentAction; +use PayPlugPluginMcp\Actions\PaymentAction; use PHPUnit\Framework\TestCase; abstract class paymentActionBase extends TestCase diff --git a/tests/Units/Actions/PaymentAction/refundActionTest.php b/tests/Units/Actions/PaymentAction/refundActionTest.php index 152fba5..2249cd5 100644 --- a/tests/Units/Actions/PaymentAction/refundActionTest.php +++ b/tests/Units/Actions/PaymentAction/refundActionTest.php @@ -2,15 +2,15 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Actions\PaymentAction; +namespace PayPlugPluginMcp\Tests\Units\Actions\PaymentAction; use Mockery\MockInterface; -use PayPlugPluginCore\Gateways\RefundGateway; -use PayPlugPluginCore\Models\Entities\RefundInputDTO; -use PayPlugPluginCore\Tests\Mock\PaymentMock; -use PayPlugPluginCore\Tests\Mock\RefundInputDTOMock; -use PayPlugPluginCore\Tests\Mock\RefundOutputDTOMock; -use PayPlugPluginCore\Utilities\Services\Api; +use PayPlugPluginMcp\Gateways\RefundGateway; +use PayPlugPluginMcp\Models\Entities\RefundInputDTO; +use PayPlugPluginMcp\Tests\Mock\PaymentMock; +use PayPlugPluginMcp\Tests\Mock\RefundInputDTOMock; +use PayPlugPluginMcp\Tests\Mock\RefundOutputDTOMock; +use PayPlugPluginMcp\Utilities\Services\Api; /** * @group units @@ -26,7 +26,9 @@ class refundActionTest extends paymentActionBase /** @var MockInterface */ private $api_service; - /** @var array */ + /** @var array + * @phpstan-ignore-next-line + */ private $refund_attributes = []; public function setUp(): void diff --git a/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php b/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php index ea99216..76d44c1 100644 --- a/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php +++ b/tests/Units/Gateways/Payment/StandardPaymentGateway/formatPaymentAttributesTest.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; +namespace PayPlugPluginMcp\Tests\Units\Gateways\Payment\StandardPaymentGateway; -use PayPlugPluginCore\Tests\Mock\PaymentInputDTOMock; +use PayPlugPluginMcp\Tests\Mock\PaymentInputDTOMock; /** * @group unit diff --git a/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php b/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php index 7410243..12485ea 100644 --- a/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php +++ b/tests/Units/Gateways/Payment/StandardPaymentGateway/standardPaymentGatewayBase.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Gateways\Payment\StandardPaymentGateway; +namespace PayPlugPluginMcp\Tests\Units\Gateways\Payment\StandardPaymentGateway; use Mockery; -use PayPlugPluginCore\Gateways\Payment\StandardPaymentGateway; +use PayPlugPluginMcp\Gateways\Payment\StandardPaymentGateway; use PHPUnit\Framework\TestCase; abstract class standardPaymentGatewayBase extends TestCase diff --git a/tests/Units/Gateways/PaymentGateway.php b/tests/Units/Gateways/PaymentGateway.php index 2536851..ef40a56 100644 --- a/tests/Units/Gateways/PaymentGateway.php +++ b/tests/Units/Gateways/PaymentGateway.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Gateways; +namespace PayPlugPluginMcp\Tests\Units\Gateways; -use PayPlugPluginCore\Models\Entities\PaymentInputDTO; +use PayPlugPluginMcp\Models\Entities\PaymentInputDTO; class PaymentGateway { @@ -24,7 +24,7 @@ public function load(string $payment_gateway_name): self throw new \Exception('Invalid parameter, $payment_gateway_name given should be a non empty string.'); } - $payment_gateway_path = '\PayPlugPluginCore\Gateways\Payment\\' + $payment_gateway_path = '\PayPlugPluginMcp\Gateways\Payment\\' . str_replace('_', '', ucwords($payment_gateway_name, '_')) . 'PaymentGateway'; if (!class_exists($payment_gateway_path)) { diff --git a/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php b/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php index 3d80122..19eccd1 100644 --- a/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php +++ b/tests/Units/Gateways/Refund/RefundGateway/formatRefundAttributesTest.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Gateways\Refund\RefundGateway; +namespace PayPlugPluginMcp\Tests\Units\Gateways\Refund\RefundGateway; -use PayPlugPluginCore\Tests\Mock\RefundInputDTOMock; +use PayPlugPluginMcp\Tests\Mock\RefundInputDTOMock; /** * @group units diff --git a/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php b/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php index 3c6a2e0..86fa535 100644 --- a/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php +++ b/tests/Units/Gateways/Refund/RefundGateway/refundGatewayBase.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace PayPlugPluginCore\Tests\Units\Gateways\Refund\RefundGateway; +namespace PayPlugPluginMcp\Tests\Units\Gateways\Refund\RefundGateway; use Mockery; -use PayPlugPluginCore\Gateways\RefundGateway; +use PayPlugPluginMcp\Gateways\RefundGateway; use PHPUnit\Framework\TestCase; abstract class refundGatewayBase extends TestCase