From 5c0f2e62f3eae43506d7f61b1537166b64af0c05 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 22 Apr 2025 14:00:50 +0200 Subject: [PATCH 01/24] Fix documentation --- README.md | 2 +- run_tests.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 run_tests.sh diff --git a/README.md b/README.md index 7427822..c570f1e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ While in under developing: "repositories": [ { "type": "vcs", - "url": "https://github.com/enigma-tm/lib-delivery-sdk" + "url": "https://github.com/paysera/lib-delivery-sdk" } ] } diff --git a/run_tests.sh b/run_tests.sh old mode 100644 new mode 100755 From d5c5f768a76b3f7089cb8d1b434072a146881a54 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 29 Apr 2025 09:37:24 +0200 Subject: [PATCH 02/24] Fix documentation, and dependency --- CHANGELOG.md | 3 +++ composer.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0ce300..f80b7a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.2.1 - 2024-04-29 +- Updated documentation, + ## 0.2.0 - 2024-04-01 - Added support for test mode delivery orders diff --git a/composer.json b/composer.json index c25f58c..50abc22 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ ], "require": { "php": ">=7.4", - "paysera/lib-delivery-api-merchant-client": "^1.2.0", + "paysera/lib-delivery-api-merchant-client": "^1.2", "psr/container": "^2.0", "webtopay/libwebtopay": "^3.1" }, From 4d6f3fa05c550b506ff877c0aa13897bd3c5d170 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 6 Jun 2025 17:41:15 +0200 Subject: [PATCH 03/24] Update Adapter --- src/Adapter/ShipmentsAdapter.php | 23 ++++++++--- tests/Adapter/ShipmentsAdapterTest.php | 55 ++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index d7b2277..7dfc153 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -16,13 +16,24 @@ class ShipmentsAdapter */ public function convert(OrderItemsCollection $items): iterable { + $totalWeight = 0.0; + $maxLength = 0.0; + $maxWidth = 0.0; + $totalHeight = 0.0; + foreach ($items as $item) { - yield (new ShipmentCreate()) - ->setHeight($item->getHeight()) - ->setWidth($item->getWidth()) - ->setLength($item->getLength()) - ->setWeight($item->getWeight()) - ; + $totalWeight += $item->getWeight(); + $totalHeight += $item->getHeight(); + $maxLength = max($maxLength, $item->getLength()); + $maxWidth = max($maxWidth, $item->getWidth()); } + + return [ + (new ShipmentCreate()) + ->setLength($maxLength) + ->setWidth($maxWidth) + ->setHeight($totalHeight) + ->setWeight($totalWeight), + ]; } } diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index 1411ea6..315fed7 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -48,7 +48,7 @@ public function testConvert(): void ], ]; - foreach ($mockData as $index => $mockEntry) { + foreach ($mockData as $mockEntry) { $mock = $mockEntry['mock']; foreach ($mockEntry['data'] as $method => $value) { $mock->method($method)->willReturn($value); @@ -57,14 +57,53 @@ public function testConvert(): void $shipments = [...$this->shipmentsAdapter->convert($this->itemsMockCollection)]; - $this->assertCount(2, $shipments); + $this->assertCount(1, $shipments); + $shipment = $shipments[0]; - foreach ($shipments as $index => $shipment) { - $mockDataEntry = $mockData[$index]['data']; - foreach ($mockDataEntry as $method => $expectedValue) { - $property = lcfirst(substr($method, 3)); - $this->assertSame($expectedValue, $shipment->{"get" . ucfirst($property)}()); - } + $this->assertEquals(70, $shipment->getLength()); + $this->assertEquals(60, $shipment->getWidth()); + + $this->assertEquals(60, $shipment->getHeight()); + $this->assertEquals(120, $shipment->getWeight()); + } + + public function testConvertWithFiveItems(): void + { + $items = []; + $totalHeight = 0.0; + $totalWeight = 0.0; + $maxLength = 0.0; + $maxWidth = 0.0; + + for ($i = 1; $i <= 5; $i++) { + $height = 5 * $i; + $width = 10 * $i; + $length = 15 * $i; + $weight = 2 * $i; + + $mock = $this->createMock(MerchantOrderItemInterface::class); + $mock->method('getHeight')->willReturn($height); + $mock->method('getWidth')->willReturn($width); + $mock->method('getLength')->willReturn($length); + $mock->method('getWeight')->willReturn($weight); + + $items[] = $mock; + + $totalHeight += $height; + $totalWeight += $weight; + $maxLength = max($maxLength, $length); + $maxWidth = max($maxWidth, $width); } + + $collection = new OrderItemsCollection($items); + $shipments = [...$this->shipmentsAdapter->convert($collection)]; + + $this->assertCount(1, $shipments); + $shipment = $shipments[0]; + + $this->assertSame($maxLength, $shipment->getLength()); + $this->assertSame($maxWidth, $shipment->getWidth()); + $this->assertSame($totalHeight, $shipment->getHeight()); + $this->assertSame($totalWeight, $shipment->getWeight()); } } From 8f86c908e0f60b40e425c8e4eee76107d72d23ad Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 6 Jun 2025 18:19:11 +0200 Subject: [PATCH 04/24] Update Adapter --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f80b7a2..d3e2ef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.3.0 - 2024-06-15 +- Sending as one big package + ## 0.2.1 - 2024-04-29 -- Updated documentation, + +- Updated documentation ## 0.2.0 - 2024-04-01 - Added support for test mode delivery orders From 3b24dc1fd803bb92470c0967885670095e44c09d Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 6 Jun 2025 20:50:41 +0200 Subject: [PATCH 05/24] Add new settings in interface to setup single shipment or multiple --- src/Adapter/OrderCreateRequestAdapter.php | 2 +- src/Adapter/OrderUpdateRequestAdapter.php | 2 +- src/Adapter/ShipmentsAdapter.php | 32 ++++- .../PayseraDeliverySettingsInterface.php | 1 + tests/Adapter/ShipmentsAdapterTest.php | 113 +++++++----------- 5 files changed, 76 insertions(+), 74 deletions(-) diff --git a/src/Adapter/OrderCreateRequestAdapter.php b/src/Adapter/OrderCreateRequestAdapter.php index 95244fc..5e4f158 100644 --- a/src/Adapter/OrderCreateRequestAdapter.php +++ b/src/Adapter/OrderCreateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderCreate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/OrderUpdateRequestAdapter.php b/src/Adapter/OrderUpdateRequestAdapter.php index 6d6f614..d56855e 100644 --- a/src/Adapter/OrderUpdateRequestAdapter.php +++ b/src/Adapter/OrderUpdateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderUpdate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 7dfc153..9098c3d 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -7,6 +7,7 @@ use Paysera\DeliveryApi\MerchantClient\Entity\ShipmentCreate; use Paysera\DeliverySdk\Collection\OrderItemsCollection; use Paysera\DeliverySdk\Entity\MerchantOrderItemInterface; +use Paysera\DeliverySdk\Entity\PayseraDeliverySettingsInterface; class ShipmentsAdapter { @@ -14,7 +15,21 @@ class ShipmentsAdapter * @param OrderItemsCollection $items * @return iterable */ - public function convert(OrderItemsCollection $items): iterable + public function convert( + OrderItemsCollection $items, + PayseraDeliverySettingsInterface $payseraDeliverySettings + ): iterable { + if ($payseraDeliverySettings->isSinglePerOrderShipmentEnabled()) { + return $this->createSingleShipment($items); + } + return $this->createMultipleShipments($items); + } + + /** + * @param OrderItemsCollection $items + * @return iterable + */ + private function createSingleShipment(OrderItemsCollection $items): iterable { $totalWeight = 0.0; $maxLength = 0.0; @@ -36,4 +51,19 @@ public function convert(OrderItemsCollection $items): iterable ->setWeight($totalWeight), ]; } + + /** + * @param OrderItemsCollection $items + * @return iterable + */ + private function createMultipleShipments(OrderItemsCollection $items): iterable + { + foreach ($items as $item) { + yield (new ShipmentCreate()) + ->setHeight($item->getHeight()) + ->setWidth($item->getWidth()) + ->setLength($item->getLength()) + ->setWeight($item->getWeight()); + } + } } diff --git a/src/Entity/PayseraDeliverySettingsInterface.php b/src/Entity/PayseraDeliverySettingsInterface.php index a39d175..c7b0d96 100644 --- a/src/Entity/PayseraDeliverySettingsInterface.php +++ b/src/Entity/PayseraDeliverySettingsInterface.php @@ -22,4 +22,5 @@ public function isTestModeEnabled(): ?bool; public function isHouseNumberFieldEnabled(): ?bool; public function getUserAgent(): string; + public function isSinglePerOrderShipmentEnabled(): bool; } diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index 315fed7..0f8319c 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -4,106 +4,77 @@ namespace Paysera\DeliverySdk\Tests\phpunit\Adapter; -use ArrayIterator; use Paysera\DeliverySdk\Adapter\ShipmentsAdapter; use Paysera\DeliverySdk\Collection\OrderItemsCollection; use Paysera\DeliverySdk\Entity\MerchantOrderItemInterface; +use Paysera\DeliverySdk\Entity\PayseraDeliverySettingsInterface; use PHPUnit\Framework\TestCase; class ShipmentsAdapterTest extends TestCase { private ShipmentsAdapter $shipmentsAdapter; - private MerchantOrderItemInterface $itemMock1; - private MerchantOrderItemInterface $itemMock2; - private OrderItemsCollection $itemsMockCollection; + private PayseraDeliverySettingsInterface $settingsMock; + private OrderItemsCollection $itemsCollection; protected function setUp(): void { $this->shipmentsAdapter = new ShipmentsAdapter(); - $this->itemMock1 = $this->createMock(MerchantOrderItemInterface::class); - $this->itemMock2 = $this->createMock(MerchantOrderItemInterface::class); - $this->itemsMockCollection = new OrderItemsCollection([$this->itemMock1, $this->itemMock2]); + $this->settingsMock = $this->createMock(PayseraDeliverySettingsInterface::class); + + $item1 = $this->createItemMock(10, 20, 30, 40); + $item2 = $this->createItemMock(50, 60, 70, 80); + + $this->itemsCollection = new OrderItemsCollection([$item1, $item2]); } - public function testConvert(): void + public function testConvertWithMultipleShipments(): void { - $mockData = [ - [ - 'mock' => $this->itemMock1, - 'data' => [ - 'getHeight' => 10, - 'getWidth' => 20, - 'getLength' => 30, - 'getWeight' => 40, - ], - ], - [ - 'mock' => $this->itemMock2, - 'data' => [ - 'getHeight' => 50, - 'getWidth' => 60, - 'getLength' => 70, - 'getWeight' => 80, - ], - ], + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(false); + + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; + + $this->assertCount(2, $shipments); + + $expectedValues = [ + [30, 20, 10, 40], + [70, 60, 50, 80], ]; - foreach ($mockData as $mockEntry) { - $mock = $mockEntry['mock']; - foreach ($mockEntry['data'] as $method => $value) { - $mock->method($method)->willReturn($value); - } + foreach ($shipments as $i => $shipment) { + [$length, $width, $height, $weight] = $expectedValues[$i]; + $this->assertEquals($length, $shipment->getLength()); + $this->assertEquals($width, $shipment->getWidth()); + $this->assertEquals($height, $shipment->getHeight()); + $this->assertEquals($weight, $shipment->getWeight()); } + } + + public function testConvertWithSingleShipment(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(true); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsMockCollection)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; $this->assertCount(1, $shipments); $shipment = $shipments[0]; $this->assertEquals(70, $shipment->getLength()); $this->assertEquals(60, $shipment->getWidth()); - $this->assertEquals(60, $shipment->getHeight()); $this->assertEquals(120, $shipment->getWeight()); } - public function testConvertWithFiveItems(): void + private function createItemMock(int $height, int $width, int $length, int $weight): MerchantOrderItemInterface { - $items = []; - $totalHeight = 0.0; - $totalWeight = 0.0; - $maxLength = 0.0; - $maxWidth = 0.0; - - for ($i = 1; $i <= 5; $i++) { - $height = 5 * $i; - $width = 10 * $i; - $length = 15 * $i; - $weight = 2 * $i; - - $mock = $this->createMock(MerchantOrderItemInterface::class); - $mock->method('getHeight')->willReturn($height); - $mock->method('getWidth')->willReturn($width); - $mock->method('getLength')->willReturn($length); - $mock->method('getWeight')->willReturn($weight); - - $items[] = $mock; - - $totalHeight += $height; - $totalWeight += $weight; - $maxLength = max($maxLength, $length); - $maxWidth = max($maxWidth, $width); - } - - $collection = new OrderItemsCollection($items); - $shipments = [...$this->shipmentsAdapter->convert($collection)]; - - $this->assertCount(1, $shipments); - $shipment = $shipments[0]; - - $this->assertSame($maxLength, $shipment->getLength()); - $this->assertSame($maxWidth, $shipment->getWidth()); - $this->assertSame($totalHeight, $shipment->getHeight()); - $this->assertSame($totalWeight, $shipment->getWeight()); + $mock = $this->createMock(MerchantOrderItemInterface::class); + $mock->method('getHeight')->willReturn($height); + $mock->method('getWidth')->willReturn($width); + $mock->method('getLength')->willReturn($length); + $mock->method('getWeight')->willReturn($weight); + return $mock; } } From 9e7ca34fc1eaad87e3911073912a64de5345faf9 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 Aug 2025 13:26:41 +0200 Subject: [PATCH 06/24] revert changes --- src/Adapter/ShipmentsAdapter.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 9098c3d..64ca1ee 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -63,7 +63,8 @@ private function createMultipleShipments(OrderItemsCollection $items): iterable ->setHeight($item->getHeight()) ->setWidth($item->getWidth()) ->setLength($item->getLength()) - ->setWeight($item->getWeight()); + ->setWeight($item->getWeight()) + ; } } } From 799238173a16a0b213b4e9bb0bd766cd08c68374 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 Aug 2025 17:08:09 +0200 Subject: [PATCH 07/24] Remove space --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3e2ef8..80f67b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Sending as one big package ## 0.2.1 - 2024-04-29 - - Updated documentation ## 0.2.0 - 2024-04-01 From 8002a9ae954de821f77370e7cb0d7ba29b291df6 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 Aug 2025 17:16:27 +0200 Subject: [PATCH 08/24] Php stan fixes --- phpstan-baseline.neon | 4 ---- src/Adapter/ShipmentsAdapter.php | 8 ++++---- src/Util/Container.php | 4 ++++ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index d3bb58a..b3c6e20 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -50,10 +50,6 @@ parameters: count: 1 path: src/Util/Container.php - - - message: "#^Parameter \\#1 \\$argument of class ReflectionClass constructor expects class\\-string\\\\|T of object, string given\\.$#" - count: 1 - path: src/Util/Container.php - message: "#^Property Paysera\\\\DeliverySdk\\\\Util\\\\Container\\:\\:\\$instances type has no value type specified in iterable type array\\.$#" diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 64ca1ee..fc2cffb 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -45,10 +45,10 @@ private function createSingleShipment(OrderItemsCollection $items): iterable return [ (new ShipmentCreate()) - ->setLength($maxLength) - ->setWidth($maxWidth) - ->setHeight($totalHeight) - ->setWeight($totalWeight), + ->setLength((int) $maxLength) + ->setWidth((int) $maxWidth) + ->setHeight((int) $totalHeight) + ->setWeight((int) $totalWeight), ]; } diff --git a/src/Util/Container.php b/src/Util/Container.php index 0c4dcc7..c9cf724 100644 --- a/src/Util/Container.php +++ b/src/Util/Container.php @@ -78,6 +78,10 @@ public function build(string $id): object */ protected function createInstance(string $className): object { + if (!class_exists($className)) { + throw new ContainerCreationFaultException("Class $className does not exist"); + } + $reflector = new ReflectionClass($className); if (!$reflector->isInstantiable()) { From 2ad8c1f6b733e68115920294409c4aa76ec8e781 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 Aug 2025 17:22:00 +0200 Subject: [PATCH 09/24] Php stan fixes --- src/Client/Provider/MerchantClientProvider.php | 2 +- src/Util/Container.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Client/Provider/MerchantClientProvider.php b/src/Client/Provider/MerchantClientProvider.php index c22005a..e051b60 100644 --- a/src/Client/Provider/MerchantClientProvider.php +++ b/src/Client/Provider/MerchantClientProvider.php @@ -38,7 +38,7 @@ public function getMerchantClient(PayseraDeliverySettingsInterface $deliverySett 'mac_secret' => $macSecret, ], 'headers' => [ - self::USER_AGENT_HEADER_NAME => $deliverySettings->getUserAgent() + self::USER_AGENT_HEADER_NAME => $deliverySettings->getUserAgent(), ], ]; diff --git a/src/Util/Container.php b/src/Util/Container.php index c9cf724..548c9a7 100644 --- a/src/Util/Container.php +++ b/src/Util/Container.php @@ -81,7 +81,7 @@ protected function createInstance(string $className): object if (!class_exists($className)) { throw new ContainerCreationFaultException("Class $className does not exist"); } - + $reflector = new ReflectionClass($className); if (!$reflector->isInstantiable()) { From 2c88aec474ea2ce6a175b8e1e6d1434dff007b55 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 Aug 2025 17:27:16 +0200 Subject: [PATCH 10/24] Php stan fixes --- .php-cs-fixer.dist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index fa6dfde..582ba99 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -11,7 +11,7 @@ ->setRiskyAllowed(true) ->setRules([ '@PSR12' => true, - '@PHP82Migration' => true, + '@PHP74Migration' => true, 'strict_param' => true, 'array_syntax' => ['syntax' => 'short'], 'declare_strict_types' => true, From bba9abcb74e871b0f3a10a82e64688e14c35e1da Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Wed, 6 Aug 2025 16:16:10 +0200 Subject: [PATCH 11/24] Cs fixer fix --- composer.json | 2 +- composer.lock | 1185 +++++++++++++++---------------------------------- 2 files changed, 359 insertions(+), 828 deletions(-) diff --git a/composer.json b/composer.json index 50abc22..60a9de8 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "webtopay/libwebtopay": "^3.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.38", + "friendsofphp/php-cs-fixer": "~3.21.0", "mockery/mockery": "^1.6", "phpstan/extension-installer": "^1.3", "phpstan/phpstan-deprecation-rules": "^1.1", diff --git a/composer.lock b/composer.lock index 4e4b33b..e3c7647 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": "4cad416d26841d6ff17c8214977d3f1a", + "content-hash": "2b7aa8ae6e4f62981d51d92a8ee60dcb", "packages": [ { "name": "evp/money", @@ -866,16 +866,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -888,7 +888,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -913,7 +913,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -929,7 +929,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "webtopay/libwebtopay", @@ -988,70 +988,6 @@ } ], "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", @@ -1278,6 +1214,82 @@ ], "time": "2024-05-06T16:37:16+00:00" }, + { + "name": "doctrine/annotations", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^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": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "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": "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/2.0.2" + }, + "time": "2024-09-05T10:17:24+00:00" + }, { "name": "doctrine/instantiator", "version": "2.0.0", @@ -1349,29 +1361,33 @@ "time": "2022-12-30T00:23:10+00:00" }, { - "name": "evenement/evenement", - "version": "v3.0.2", + "name": "doctrine/lexer", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "php": ">=7.0" + "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^9 || ^6" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { "psr-4": { - "Evenement\\": "src/" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1380,136 +1396,97 @@ ], "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.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Tiny utility to get the number of CPU cores.", + "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": [ - "CPU", - "core" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { - "url": "https://github.com/theofidry", - "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%2Flexer", + "type": "tidelift" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.75.0", + "version": "v3.21.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c" + "reference": "d051aff28bbb75830809f4f3b67c6b94c1fc5fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c", - "reference": "399a128ff2fdaf4281e4e79b755693286cdf325c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d051aff28bbb75830809f4f3b67c6b94c1fc5fb6", + "reference": "d051aff28bbb75830809f4f3b67c6b94c1fc5fb6", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", - "composer/semver": "^3.4", + "composer/semver": "^3.3", "composer/xdebug-handler": "^3.0.3", - "ext-filter": "*", - "ext-hash": "*", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "sebastian/diff": "^4.0 || ^5.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.6", - "infection/infection": "^0.29.14", - "justinrainbow/json-schema": "^5.3 || ^6.2", - "keradus/cli-executor": "^2.1", - "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", + "facile-it/paraunit": "^1.3 || ^2.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12", - "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3", - "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -1522,10 +1499,7 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - }, - "exclude-from-classmap": [ - "src/Fixer/Internal/*" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1550,7 +1524,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.75.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.21.3" }, "funding": [ { @@ -1558,7 +1532,7 @@ "type": "github" } ], - "time": "2025-03-31T18:40:42+00:00" + "time": "2023-07-16T22:25:44+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -2607,6 +2581,55 @@ ], "time": "2024-12-05T13:48:26+00:00" }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, { "name": "psr/event-dispatcher", "version": "1.0.0", @@ -2707,532 +2730,6 @@ }, "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/" - } - ], - "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.6", - "source": { - "type": "git", - "url": "https://github.com/reactphp/child-process.git", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", - "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.6" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2025-01-01T16:37:48+00:00" - }, - { - "name": "react/dns", - "version": "v1.13.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "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.13.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2024-06-13T14:18:03+00:00" - }, - { - "name": "react/event-loop", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "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.5.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2023-11-13T13:48:05+00:00" - }, - { - "name": "react/promise", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", - "shasum": "" - }, - "require": { - "php": ">=7.1.0" - }, - "require-dev": { - "phpstan/phpstan": "1.10.39 || 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.2.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2024-05-24T10:39:05+00:00" - }, - { - "name": "react/socket", - "version": "v1.16.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "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" - }, - "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" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Socket\\": "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, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" - ], - "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2024-07-26T10:38:09+00:00" - }, - { - "name": "react/stream", - "version": "v1.4.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" - }, - "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Stream\\": "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 readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" - ], - "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.4.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2024-06-11T12:45:25+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.2", @@ -4198,46 +3695,47 @@ }, { "name": "symfony/console", - "version": "v7.2.5", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e51498ea18570c062e7df29d05a7003585b19b88" + "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", - "reference": "e51498ea18570c062e7df29d05a7003585b19b88", + "url": "https://api.github.com/repos/symfony/console/zipball/59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350", + "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4271,7 +3769,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.5" + "source": "https://github.com/symfony/console/tree/v6.4.24" }, "funding": [ { @@ -4282,33 +3780,37 @@ "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": "2025-03-12T08:11:12+00:00" + "time": "2025-07-30T10:38:54+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/307a09d8d7228d14a05e5e05b95fffdacab032b2", + "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/dependency-injection": "<5.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -4317,13 +3819,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4351,7 +3853,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.24" }, "funding": [ { @@ -4362,25 +3864,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": "2024-09-25T14:21:43+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -4394,7 +3900,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4427,7 +3933,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -4443,29 +3949,29 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v7.2.0", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { @@ -4493,7 +3999,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + "source": "https://github.com/symfony/filesystem/tree/v6.4.24" }, "funding": [ { @@ -4504,32 +4010,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": "2024-10-25T15:15:23+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "73089124388c8510efb8d2d1689285d285937b08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/73089124388c8510efb8d2d1689285d285937b08", + "reference": "73089124388c8510efb8d2d1689285d285937b08", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -4557,7 +4067,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v6.4.24" }, "funding": [ { @@ -4568,29 +4078,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-12-30T19:00:17+00:00" + "time": "2025-07-15T12:02:45+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "baee5736ddf7a0486dd68ca05aa4fd7e64458d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/baee5736ddf7a0486dd68ca05aa4fd7e64458d3d", + "reference": "baee5736ddf7a0486dd68ca05aa4fd7e64458d3d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -4624,7 +4138,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.24" }, "funding": [ { @@ -4635,16 +4149,20 @@ "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-11-20T11:17:29+00:00" + "time": "2025-07-14T16:38:25+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4703,7 +4221,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" }, "funding": [ { @@ -4723,7 +4241,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -4781,7 +4299,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" }, "funding": [ { @@ -4801,7 +4319,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -4862,7 +4380,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" }, "funding": [ { @@ -4882,19 +4400,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -4942,7 +4461,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -4958,20 +4477,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -5022,7 +4541,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -5038,11 +4557,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -5098,7 +4617,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" }, "funding": [ { @@ -5118,20 +4637,20 @@ }, { "name": "symfony/process", - "version": "v7.2.5", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" + "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", - "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", + "url": "https://api.github.com/repos/symfony/process/zipball/8eb6dc555bfb49b2703438d5de65cc9f138ff50b", + "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -5159,7 +4678,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.5" + "source": "https://github.com/symfony/process/tree/v6.4.24" }, "funding": [ { @@ -5170,25 +4689,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": "2025-03-13T12:21:46+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { @@ -5206,7 +4729,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5242,7 +4765,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -5258,24 +4781,24 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.2.4", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898", + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -5304,7 +4827,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.24" }, "funding": [ { @@ -5315,25 +4838,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": "2025-02-24T10:49:57+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", + "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", "shasum": "" }, "require": { @@ -5391,7 +4918,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v7.3.2" }, "funding": [ { @@ -5402,12 +4929,16 @@ "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-11-13T13:31:26+00:00" + "time": "2025-07-10T08:47:49+00:00" }, { "name": "theseer/tokenizer", @@ -5462,12 +4993,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { "php": ">=7.4" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } From b508d48177680f3106ac202d28846533fb83e0fc Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Wed, 6 Aug 2025 16:18:39 +0200 Subject: [PATCH 12/24] Cs fixer fix --- composer.json | 2 +- composer.lock | 200 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 148 insertions(+), 54 deletions(-) diff --git a/composer.json b/composer.json index 60a9de8..09b42b1 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "webtopay/libwebtopay": "^3.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~3.21.0", + "friendsofphp/php-cs-fixer": "3.8.*", "mockery/mockery": "^1.6", "phpstan/extension-installer": "^1.3", "phpstan/phpstan-deprecation-rules": "^1.1", diff --git a/composer.lock b/composer.lock index e3c7647..c7338e5 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": "2b7aa8ae6e4f62981d51d92a8ee60dcb", + "content-hash": "04e9fd29e9abbab7d69f0326294600c7", "packages": [ { "name": "evp/money", @@ -1216,30 +1216,30 @@ }, { "name": "doctrine/annotations", - "version": "2.0.2", + "version": "1.14.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", - "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { - "doctrine/lexer": "^2 || ^3", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", + "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.10.28", + "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": "^5.4 || ^6.4 || ^7", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", "vimeo/psalm": "^4.30 || ^5.14" }, "suggest": { @@ -1286,9 +1286,57 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.2" + "source": "https://github.com/doctrine/annotations/tree/1.14.4" + }, + "time": "2024-09-05T10:15:52+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } }, - "time": "2024-09-05T10:17:24+00:00" + "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/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/instantiator", @@ -1362,27 +1410,28 @@ }, { "name": "doctrine/lexer", - "version": "3.0.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "shasum": "" }, "require": { - "php": "^8.1" + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", + "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": "^5.21" + "vimeo/psalm": "^4.11 || ^5.21" }, "type": "library", "autoload": { @@ -1419,7 +1468,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" + "source": "https://github.com/doctrine/lexer/tree/2.1.1" }, "funding": [ { @@ -1435,57 +1484,55 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:56:58+00:00" + "time": "2024-02-05T11:35:39+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.21.3", + "version": "v3.8.0", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d051aff28bbb75830809f4f3b67c6b94c1fc5fb6" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d051aff28bbb75830809f4f3b67c6b94c1fc5fb6", - "reference": "d051aff28bbb75830809f4f3b67c6b94c1fc5fb6", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.2", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", + "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", + "php-cs-fixer/diff": "^2.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", + "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -1516,15 +1563,9 @@ } ], "description": "A tool to automatically fix PHP code style", - "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" - ], "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.21.3" + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" }, "funding": [ { @@ -1532,7 +1573,7 @@ "type": "github" } ], - "time": "2023-07-16T22:25:44+00:00" + "time": "2022-03-18T17:20:59+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -1904,6 +1945,59 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.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/v2.0.2" + }, + "abandoned": true, + "time": "2020-10-14T08:32:19+00:00" + }, { "name": "phpstan/extension-installer", "version": "1.4.3", From c01843e26f68d0b14aa95e6578473b3e41f14636 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Wed, 6 Aug 2025 16:24:03 +0200 Subject: [PATCH 13/24] Cs fixer fix --- composer.json | 2 +- composer.lock | 501 +++++++++++++++++++++++++++++++------------------- 2 files changed, 310 insertions(+), 193 deletions(-) diff --git a/composer.json b/composer.json index 09b42b1..be4f555 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "webtopay/libwebtopay": "^3.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "3.8.*", + "friendsofphp/php-cs-fixer": "3.0.*", "mockery/mockery": "^1.6", "phpstan/extension-installer": "^1.3", "phpstan/phpstan-deprecation-rules": "^1.1", diff --git a/composer.lock b/composer.lock index c7338e5..1014214 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": "04e9fd29e9abbab7d69f0326294600c7", + "content-hash": "d9caed69a9575b77a1a546e3213f3eea", "packages": [ { "name": "evp/money", @@ -990,38 +990,30 @@ "packages-dev": [ { "name": "composer/pcre", - "version": "3.3.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<1.11.10" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, "branch-alias": { - "dev-main": "3.x-dev" + "dev-main": "1.x-dev" } }, "autoload": { @@ -1049,7 +1041,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" + "source": "https://github.com/composer/pcre/tree/1.0.1" }, "funding": [ { @@ -1065,7 +1057,7 @@ "type": "tidelift" } ], - "time": "2024-11-12T16:29:46+00:00" + "time": "2022-01-21T20:24:37+00:00" }, { "name": "composer/semver", @@ -1150,27 +1142,27 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.5", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", + "composer/pcre": "^1", + "php": "^5.3.2 || ^7.0 || ^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" + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "type": "library", "autoload": { @@ -1194,9 +1186,9 @@ "performance" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", + "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" }, "funding": [ { @@ -1212,7 +1204,7 @@ "type": "tidelift" } ], - "time": "2024-05-06T16:37:16+00:00" + "time": "2022-02-24T20:20:32+00:00" }, { "name": "doctrine/annotations", @@ -1488,56 +1480,56 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.8.0", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + "reference": "dbf8ac24cd9000d7f238739d98cc5dcbb22ffd3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/dbf8ac24cd9000d7f238739d98cc5dcbb22ffd3b", + "reference": "dbf8ac24cd9000d7f238739d98cc5dcbb22ffd3b", "shasum": "" }, "require": { "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", "ext-json": "*", "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", + "php": "^7.1.3 || ^8.0", "php-cs-fixer/diff": "^2.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "symfony/console": "^4.4.20 || ^5.1.3", + "symfony/event-dispatcher": "^4.4.20 || ^5.0", + "symfony/filesystem": "^4.4.20 || ^5.0", + "symfony/finder": "^4.4.20 || ^5.0", + "symfony/options-resolver": "^4.4.20 || ^5.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0", + "symfony/stopwatch": "^4.4.20 || ^5.0" }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^1.4", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.4.3", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", + "phpspec/prophecy": "^1.10.3", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5", "phpunitgoodpractices/polyfill": "^1.5", "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" + "symfony/phpunit-bridge": "^5.2.4", + "symfony/yaml": "^4.4.20 || ^5.0" }, "suggest": { "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "ext-mbstring": "For handling non-UTF8 characters.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." }, "bin": [ "php-cs-fixer" @@ -1565,7 +1557,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.0.3" }, "funding": [ { @@ -1573,7 +1565,7 @@ "type": "github" } ], - "time": "2022-03-18T17:20:59+00:00" + "time": "2021-08-29T19:48:25+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -2776,16 +2768,16 @@ }, { "name": "psr/log", - "version": "3.0.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { @@ -2794,7 +2786,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2820,9 +2812,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2024-09-11T13:17:53+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "sebastian/cli-parser", @@ -3789,47 +3781,52 @@ }, { "name": "symfony/console", - "version": "v6.4.24", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350", - "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", "autoload": { @@ -3863,7 +3860,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.24" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -3874,52 +3871,53 @@ "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": "2025-07-30T10:38:54+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.24", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2" + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/307a09d8d7228d14a05e5e05b95fffdacab032b2", - "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2.5|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/service-contracts": "<2.5" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "autoload": { @@ -3947,7 +3945,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/v6.4.24" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" }, "funding": [ { @@ -3958,16 +3956,12 @@ "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": "2025-07-10T08:14:14+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4047,25 +4041,26 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.24", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", - "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^5.4|^6.4" }, "type": "library", "autoload": { @@ -4093,7 +4088,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.24" + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" }, "funding": [ { @@ -4104,36 +4099,31 @@ "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": "2025-07-10T08:14:14+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/finder", - "version": "v6.4.24", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "73089124388c8510efb8d2d1689285d285937b08" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/73089124388c8510efb8d2d1689285d285937b08", - "reference": "73089124388c8510efb8d2d1689285d285937b08", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4161,7 +4151,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.24" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -4172,34 +4162,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": "2025-07-15T12:02:45+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.24", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "baee5736ddf7a0486dd68ca05aa4fd7e64458d3d" + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/baee5736ddf7a0486dd68ca05aa4fd7e64458d3d", - "reference": "baee5736ddf7a0486dd68ca05aa4fd7e64458d3d", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4232,7 +4220,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.24" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" }, "funding": [ { @@ -4243,16 +4231,12 @@ "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": "2025-07-14T16:38:25+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4573,6 +4557,147 @@ ], "time": "2024-12-23T08:48:59+00:00" }, + { + "name": "symfony/polyfill-php72", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "metapackage", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "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 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "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\\Php73\\": "" + }, + "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 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, { "name": "symfony/polyfill-php80", "version": "v1.32.0", @@ -4731,20 +4856,21 @@ }, { "name": "symfony/process", - "version": "v6.4.24", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b" + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8eb6dc555bfb49b2703438d5de65cc9f138ff50b", - "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4772,7 +4898,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.24" + "source": "https://github.com/symfony/process/tree/v5.4.47" }, "funding": [ { @@ -4783,16 +4909,12 @@ "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": "2025-07-10T08:14:14+00:00" + "time": "2024-11-06T11:36:42+00:00" }, { "name": "symfony/service-contracts", @@ -4879,21 +5001,21 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.24", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898" + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898", - "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/service-contracts": "^2.5|^3" + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -4921,7 +5043,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.24" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" }, "funding": [ { @@ -4932,33 +5054,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": "2025-07-10T08:14:14+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/string", - "version": "v7.3.2", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" + "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", + "url": "https://api.github.com/repos/symfony/string/zipball/f0ce0bd36a3accb4a225435be077b4b4875587f4", + "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4968,12 +5086,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5012,7 +5129,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.2" + "source": "https://github.com/symfony/string/tree/v6.4.24" }, "funding": [ { @@ -5032,7 +5149,7 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "theseer/tokenizer", From fb9634fc84a31e23b695bb833d2111fd16cfc8ea Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Wed, 6 Aug 2025 16:26:15 +0200 Subject: [PATCH 14/24] Cs fixer fix --- src/Adapter/DeliveryOrderRequestAdapterFacade.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Adapter/DeliveryOrderRequestAdapterFacade.php b/src/Adapter/DeliveryOrderRequestAdapterFacade.php index f6fb976..a7c324d 100644 --- a/src/Adapter/DeliveryOrderRequestAdapterFacade.php +++ b/src/Adapter/DeliveryOrderRequestAdapterFacade.php @@ -17,7 +17,6 @@ public function __construct( OrderCreateRequestAdapter $createAdapter, OrderUpdateRequestAdapter $updateAdapter ) { - $this->createAdapter = $createAdapter; $this->updateAdapter = $updateAdapter; } From 6eeaf1c154158aef056ee50c6d3b3a1a02abcb88 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Thu, 7 Aug 2025 16:01:33 +0200 Subject: [PATCH 15/24] Code review fixes --- src/Adapter/OrderCreateRequestAdapter.php | 2 +- src/Adapter/OrderUpdateRequestAdapter.php | 2 +- src/Adapter/ShipmentsAdapter.php | 28 +++++++++---------- .../PayseraDeliverySettingsInterface.php | 1 + .../Adapter/OrderCreateRequestAdapterTest.php | 2 ++ .../Adapter/OrderUpdateRequestAdapterTest.php | 2 ++ tests/Adapter/ShipmentsAdapterTest.php | 4 +-- 7 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/Adapter/OrderCreateRequestAdapter.php b/src/Adapter/OrderCreateRequestAdapter.php index 5e4f158..9581584 100644 --- a/src/Adapter/OrderCreateRequestAdapter.php +++ b/src/Adapter/OrderCreateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderCreate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings()->isSinglePerOrderShipmentEnabled())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/OrderUpdateRequestAdapter.php b/src/Adapter/OrderUpdateRequestAdapter.php index d56855e..be0594d 100644 --- a/src/Adapter/OrderUpdateRequestAdapter.php +++ b/src/Adapter/OrderUpdateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderUpdate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings()->isSinglePerOrderShipmentEnabled())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index fc2cffb..610ea1c 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -17,9 +17,9 @@ class ShipmentsAdapter */ public function convert( OrderItemsCollection $items, - PayseraDeliverySettingsInterface $payseraDeliverySettings + bool $isSinglePerOrderShipmentEnabled = false ): iterable { - if ($payseraDeliverySettings->isSinglePerOrderShipmentEnabled()) { + if ($isSinglePerOrderShipmentEnabled) { return $this->createSingleShipment($items); } return $this->createMultipleShipments($items); @@ -31,24 +31,24 @@ public function convert( */ private function createSingleShipment(OrderItemsCollection $items): iterable { - $totalWeight = 0.0; - $maxLength = 0.0; - $maxWidth = 0.0; - $totalHeight = 0.0; + $width = 0.0; + $height = 0.0; + $length = 0.0; + $weight = 0.0; foreach ($items as $item) { - $totalWeight += $item->getWeight(); - $totalHeight += $item->getHeight(); - $maxLength = max($maxLength, $item->getLength()); - $maxWidth = max($maxWidth, $item->getWidth()); + $width += floor($item->getWidth()); + $height += floor($item->getHeight()); + $length += floor($item->getLength()); + $weight += floor($item->getWeight()); } return [ (new ShipmentCreate()) - ->setLength((int) $maxLength) - ->setWidth((int) $maxWidth) - ->setHeight((int) $totalHeight) - ->setWeight((int) $totalWeight), + ->setLength((int) $length) + ->setWidth((int) $width) + ->setHeight((int) $height) + ->setWeight((int) $weight), ]; } diff --git a/src/Entity/PayseraDeliverySettingsInterface.php b/src/Entity/PayseraDeliverySettingsInterface.php index c7b0d96..d84dae3 100644 --- a/src/Entity/PayseraDeliverySettingsInterface.php +++ b/src/Entity/PayseraDeliverySettingsInterface.php @@ -22,5 +22,6 @@ public function isTestModeEnabled(): ?bool; public function isHouseNumberFieldEnabled(): ?bool; public function getUserAgent(): string; + public function isSinglePerOrderShipmentEnabled(): bool; } diff --git a/tests/Adapter/OrderCreateRequestAdapterTest.php b/tests/Adapter/OrderCreateRequestAdapterTest.php index eb14a04..7c73ea1 100644 --- a/tests/Adapter/OrderCreateRequestAdapterTest.php +++ b/tests/Adapter/OrderCreateRequestAdapterTest.php @@ -91,6 +91,7 @@ public function testConvert(): void ; $this->deliverySettingsMock->method('getResolvedProjectId')->willReturn('123'); + $this->deliverySettingsMock->method('isSinglePerOrderShipmentEnabled')->willReturn(false); $this->shipmentsAdapterMock ->method('convert') @@ -138,6 +139,7 @@ public function testConvertWithoutOptionalFields(): void ->method('getResolvedProjectId') ->willReturn(null) ; + $this->deliverySettingsMock->method('isSinglePerOrderShipmentEnabled')->willReturn(false); $this->merchantOrderMock ->method('getNotificationCallback') ->willReturn(null) diff --git a/tests/Adapter/OrderUpdateRequestAdapterTest.php b/tests/Adapter/OrderUpdateRequestAdapterTest.php index 181a478..ceaaeb8 100644 --- a/tests/Adapter/OrderUpdateRequestAdapterTest.php +++ b/tests/Adapter/OrderUpdateRequestAdapterTest.php @@ -79,6 +79,7 @@ public function testConvert(): void ->method('getResolvedProjectId') ->willReturn('123') ; + $this->deliverySettingsMock->method('isSinglePerOrderShipmentEnabled')->willReturn(false); $this->shipmentsAdapterMock ->method('convert') @@ -137,6 +138,7 @@ public function testConvertWithoutOptionalFields(): void ->method('getResolvedProjectId') ->willReturn(null) ; + $this->deliverySettingsMock->method('isSinglePerOrderShipmentEnabled')->willReturn(false); $this->merchantOrderMock ->method('getNotificationCallback') ->willReturn(null) diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index 0f8319c..c062627 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -33,7 +33,7 @@ public function testConvertWithMultipleShipments(): void ->method('isSinglePerOrderShipmentEnabled') ->willReturn(false); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, false)]; $this->assertCount(2, $shipments); @@ -57,7 +57,7 @@ public function testConvertWithSingleShipment(): void ->method('isSinglePerOrderShipmentEnabled') ->willReturn(true); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, true)]; $this->assertCount(1, $shipments); $shipment = $shipments[0]; From ea22100e0e8f47a515a1f7143939e3535eff0499 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Thu, 7 Aug 2025 16:34:53 +0200 Subject: [PATCH 16/24] tests fix --- tests/Adapter/ShipmentsAdapterTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index c062627..e27906a 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -33,7 +33,7 @@ public function testConvertWithMultipleShipments(): void ->method('isSinglePerOrderShipmentEnabled') ->willReturn(false); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, false)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection)]; $this->assertCount(2, $shipments); @@ -62,8 +62,8 @@ public function testConvertWithSingleShipment(): void $this->assertCount(1, $shipments); $shipment = $shipments[0]; - $this->assertEquals(70, $shipment->getLength()); - $this->assertEquals(60, $shipment->getWidth()); + $this->assertEquals(100, $shipment->getLength()); + $this->assertEquals(80, $shipment->getWidth()); $this->assertEquals(60, $shipment->getHeight()); $this->assertEquals(120, $shipment->getWeight()); } From 6286d455408933abc5580162918782faab0ec139 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 8 Aug 2025 09:47:17 +0200 Subject: [PATCH 17/24] Code review fix --- src/Adapter/ShipmentsAdapter.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 610ea1c..7d92514 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -7,7 +7,6 @@ use Paysera\DeliveryApi\MerchantClient\Entity\ShipmentCreate; use Paysera\DeliverySdk\Collection\OrderItemsCollection; use Paysera\DeliverySdk\Entity\MerchantOrderItemInterface; -use Paysera\DeliverySdk\Entity\PayseraDeliverySettingsInterface; class ShipmentsAdapter { @@ -31,16 +30,16 @@ public function convert( */ private function createSingleShipment(OrderItemsCollection $items): iterable { - $width = 0.0; - $height = 0.0; - $length = 0.0; - $weight = 0.0; + $width = 0; + $height = 0; + $length = 0; + $weight = 0; foreach ($items as $item) { - $width += floor($item->getWidth()); - $height += floor($item->getHeight()); - $length += floor($item->getLength()); - $weight += floor($item->getWeight()); + $width += ceil($item->getWidth()); + $height += ceil($item->getHeight()); + $length += ceil($item->getLength()); + $weight += ceil($item->getWeight()); } return [ From fe054f85bb91556d1c2ea17da17538ba3a1645d3 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 8 Aug 2025 10:51:24 +0200 Subject: [PATCH 18/24] Code review fix --- src/Adapter/ShipmentsAdapter.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 7d92514..e9ee248 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -36,18 +36,18 @@ private function createSingleShipment(OrderItemsCollection $items): iterable $weight = 0; foreach ($items as $item) { - $width += ceil($item->getWidth()); - $height += ceil($item->getHeight()); - $length += ceil($item->getLength()); - $weight += ceil($item->getWeight()); + $width += $item->getWidth(); + $height += $item->getHeight(); + $length += $item->getLength(); + $weight += $item->getWeight(); } return [ (new ShipmentCreate()) - ->setLength((int) $length) - ->setWidth((int) $width) - ->setHeight((int) $height) - ->setWeight((int) $weight), + ->setLength((int) ceil($length)) + ->setWidth((int) ceil($width)) + ->setHeight((int) ceil($height)) + ->setWeight((int) ceil($weight)) ]; } From f548ff0af5e55e3acb69a89ca92e3cef54c0bdcd Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 8 Aug 2025 11:14:06 +0200 Subject: [PATCH 19/24] Code review fix --- src/Adapter/ShipmentsAdapter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index e9ee248..4c7b6e8 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -47,7 +47,7 @@ private function createSingleShipment(OrderItemsCollection $items): iterable ->setLength((int) ceil($length)) ->setWidth((int) ceil($width)) ->setHeight((int) ceil($height)) - ->setWeight((int) ceil($weight)) + ->setWeight((int) ceil($weight)), ]; } From 06f42e4696c6fabff2db84730d69d4520d53e94c Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Mon, 4 May 2026 18:57:34 +0200 Subject: [PATCH 20/24] new version of shingle shipment per oder --- CHANGELOG.md | 5 + src/Adapter/OrderCreateRequestAdapter.php | 2 +- src/Adapter/OrderUpdateRequestAdapter.php | 2 +- src/Adapter/ShipmentsAdapter.php | 30 ++--- .../PayseraDeliverySettingsInterface.php | 8 ++ tests/Adapter/ShipmentsAdapterTest.php | 122 +++++++++++++++++- 6 files changed, 139 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80f67b0..8d6c85a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.4.0 - 2026-05-04 +- Single-shipment-per-order now uses merchant default parcel size from settings instead of summing item dimensions +- Added `getDefaultParcelWidth/Height/Length/Weight` to `PayseraDeliverySettingsInterface` +- `ShipmentsAdapter::convert()` signature changed: now accepts `PayseraDeliverySettingsInterface` instead of a bool flag + ## 0.3.0 - 2024-06-15 - Sending as one big package diff --git a/src/Adapter/OrderCreateRequestAdapter.php b/src/Adapter/OrderCreateRequestAdapter.php index 9581584..5e4f158 100644 --- a/src/Adapter/OrderCreateRequestAdapter.php +++ b/src/Adapter/OrderCreateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderCreate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings()->isSinglePerOrderShipmentEnabled())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/OrderUpdateRequestAdapter.php b/src/Adapter/OrderUpdateRequestAdapter.php index be0594d..d56855e 100644 --- a/src/Adapter/OrderUpdateRequestAdapter.php +++ b/src/Adapter/OrderUpdateRequestAdapter.php @@ -45,7 +45,7 @@ public function convert(PayseraDeliveryOrderRequest $request): OrderUpdate ->setShipmentMethodCode( $this->gatewayUtils->getShipmentMethodCode($deliveryGateway->getSettings()) ) - ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings()->isSinglePerOrderShipmentEnabled())]) + ->setShipments([...$this->shipmentsAdapter->convert($orderDto->getItems(), $request->getDeliverySettings())]) ->setReceiver( $this->shipmentPointAdapter->convert( $orderDto->getShipping(), diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 4c7b6e8..d33a5b8 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -7,6 +7,7 @@ use Paysera\DeliveryApi\MerchantClient\Entity\ShipmentCreate; use Paysera\DeliverySdk\Collection\OrderItemsCollection; use Paysera\DeliverySdk\Entity\MerchantOrderItemInterface; +use Paysera\DeliverySdk\Entity\PayseraDeliverySettingsInterface; class ShipmentsAdapter { @@ -16,38 +17,25 @@ class ShipmentsAdapter */ public function convert( OrderItemsCollection $items, - bool $isSinglePerOrderShipmentEnabled = false + ?PayseraDeliverySettingsInterface $deliverySettings = null ): iterable { - if ($isSinglePerOrderShipmentEnabled) { - return $this->createSingleShipment($items); + if ($deliverySettings !== null && $deliverySettings->isSinglePerOrderShipmentEnabled()) { + return $this->createSingleShipment($deliverySettings); } return $this->createMultipleShipments($items); } /** - * @param OrderItemsCollection $items * @return iterable */ - private function createSingleShipment(OrderItemsCollection $items): iterable + private function createSingleShipment(PayseraDeliverySettingsInterface $deliverySettings): iterable { - $width = 0; - $height = 0; - $length = 0; - $weight = 0; - - foreach ($items as $item) { - $width += $item->getWidth(); - $height += $item->getHeight(); - $length += $item->getLength(); - $weight += $item->getWeight(); - } - return [ (new ShipmentCreate()) - ->setLength((int) ceil($length)) - ->setWidth((int) ceil($width)) - ->setHeight((int) ceil($height)) - ->setWeight((int) ceil($weight)), + ->setLength($deliverySettings->getDefaultParcelLength()) + ->setWidth($deliverySettings->getDefaultParcelWidth()) + ->setHeight($deliverySettings->getDefaultParcelHeight()) + ->setWeight($deliverySettings->getDefaultParcelWeight()), ]; } diff --git a/src/Entity/PayseraDeliverySettingsInterface.php b/src/Entity/PayseraDeliverySettingsInterface.php index d84dae3..f764fc5 100644 --- a/src/Entity/PayseraDeliverySettingsInterface.php +++ b/src/Entity/PayseraDeliverySettingsInterface.php @@ -24,4 +24,12 @@ public function isHouseNumberFieldEnabled(): ?bool; public function getUserAgent(): string; public function isSinglePerOrderShipmentEnabled(): bool; + + public function getDefaultParcelWidth(): int; + + public function getDefaultParcelHeight(): int; + + public function getDefaultParcelLength(): int; + + public function getDefaultParcelWeight(): int; } diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index e27906a..7cde840 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -33,7 +33,7 @@ public function testConvertWithMultipleShipments(): void ->method('isSinglePerOrderShipmentEnabled') ->willReturn(false); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; $this->assertCount(2, $shipments); @@ -51,21 +51,129 @@ public function testConvertWithMultipleShipments(): void } } - public function testConvertWithSingleShipment(): void + public function testConvertWithMultipleShipmentsEmptyItems(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(false); + + $shipments = [...$this->shipmentsAdapter->convert(new OrderItemsCollection([]), $this->settingsMock)]; + + $this->assertCount(0, $shipments); + } + + public function testConvertWithoutSettingsFallsBackToMultipleShipments(): void + { + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection)]; + + $this->assertCount(2, $shipments); + $this->assertEquals(30, $shipments[0]->getLength()); + $this->assertEquals(20, $shipments[0]->getWidth()); + $this->assertEquals(10, $shipments[0]->getHeight()); + $this->assertEquals(40, $shipments[0]->getWeight()); + } + + public function testConvertWithSingleShipmentUsesDefaultParcelSize(): void { $this->settingsMock ->method('isSinglePerOrderShipmentEnabled') ->willReturn(true); + $this->settingsMock->method('getDefaultParcelLength')->willReturn(25); + $this->settingsMock->method('getDefaultParcelWidth')->willReturn(15); + $this->settingsMock->method('getDefaultParcelHeight')->willReturn(10); + $this->settingsMock->method('getDefaultParcelWeight')->willReturn(5); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, true)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; $this->assertCount(1, $shipments); $shipment = $shipments[0]; - $this->assertEquals(100, $shipment->getLength()); - $this->assertEquals(80, $shipment->getWidth()); - $this->assertEquals(60, $shipment->getHeight()); - $this->assertEquals(120, $shipment->getWeight()); + $this->assertEquals(25, $shipment->getLength()); + $this->assertEquals(15, $shipment->getWidth()); + $this->assertEquals(10, $shipment->getHeight()); + $this->assertEquals(5, $shipment->getWeight()); + } + + public function testConvertWithSingleShipmentIgnoresItemDimensions(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(true); + $this->settingsMock->method('getDefaultParcelLength')->willReturn(25); + $this->settingsMock->method('getDefaultParcelWidth')->willReturn(15); + $this->settingsMock->method('getDefaultParcelHeight')->willReturn(10); + $this->settingsMock->method('getDefaultParcelWeight')->willReturn(5); + + $itemWithHugeDimensions = $this->createItemMock(9999, 9999, 9999, 9999); + $items = new OrderItemsCollection([$itemWithHugeDimensions]); + + $shipments = [...$this->shipmentsAdapter->convert($items, $this->settingsMock)]; + + $this->assertCount(1, $shipments); + $this->assertEquals(25, $shipments[0]->getLength()); + $this->assertEquals(15, $shipments[0]->getWidth()); + $this->assertEquals(10, $shipments[0]->getHeight()); + $this->assertEquals(5, $shipments[0]->getWeight()); + } + + public function testConvertWithSingleShipmentEmptyItemsStillUsesDefaults(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(true); + $this->settingsMock->method('getDefaultParcelLength')->willReturn(25); + $this->settingsMock->method('getDefaultParcelWidth')->willReturn(15); + $this->settingsMock->method('getDefaultParcelHeight')->willReturn(10); + $this->settingsMock->method('getDefaultParcelWeight')->willReturn(5); + + $shipments = [...$this->shipmentsAdapter->convert(new OrderItemsCollection([]), $this->settingsMock)]; + + $this->assertCount(1, $shipments); + $this->assertEquals(25, $shipments[0]->getLength()); + $this->assertEquals(15, $shipments[0]->getWidth()); + $this->assertEquals(10, $shipments[0]->getHeight()); + $this->assertEquals(5, $shipments[0]->getWeight()); + } + + public function testConvertWithSingleShipmentDoesNotReadItemGetters(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(true); + $this->settingsMock->method('getDefaultParcelLength')->willReturn(25); + $this->settingsMock->method('getDefaultParcelWidth')->willReturn(15); + $this->settingsMock->method('getDefaultParcelHeight')->willReturn(10); + $this->settingsMock->method('getDefaultParcelWeight')->willReturn(5); + + $item = $this->createMock(MerchantOrderItemInterface::class); + $item->expects($this->never())->method('getHeight'); + $item->expects($this->never())->method('getWidth'); + $item->expects($this->never())->method('getLength'); + $item->expects($this->never())->method('getWeight'); + + $shipments = [...$this->shipmentsAdapter->convert(new OrderItemsCollection([$item]), $this->settingsMock)]; + + $this->assertCount(1, $shipments); + } + + public function testConvertWithMultipleShipmentsPreservesItemOrder(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(false); + + $items = new OrderItemsCollection([ + $this->createItemMock(1, 2, 3, 4), + $this->createItemMock(5, 6, 7, 8), + $this->createItemMock(9, 10, 11, 12), + ]); + + $shipments = [...$this->shipmentsAdapter->convert($items, $this->settingsMock)]; + + $this->assertCount(3, $shipments); + $this->assertEquals(3, $shipments[0]->getLength()); + $this->assertEquals(7, $shipments[1]->getLength()); + $this->assertEquals(11, $shipments[2]->getLength()); } private function createItemMock(int $height, int $width, int $length, int $weight): MerchantOrderItemInterface From 476bd1b05019cc08be88647f6f3804b94848f6b5 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 May 2026 15:17:34 +0200 Subject: [PATCH 21/24] new version of shingle shipment per oder --- src/Adapter/ShipmentsAdapter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index d33a5b8..16db308 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -17,9 +17,9 @@ class ShipmentsAdapter */ public function convert( OrderItemsCollection $items, - ?PayseraDeliverySettingsInterface $deliverySettings = null + PayseraDeliverySettingsInterface $deliverySettings ): iterable { - if ($deliverySettings !== null && $deliverySettings->isSinglePerOrderShipmentEnabled()) { + if ($deliverySettings->isSinglePerOrderShipmentEnabled()) { return $this->createSingleShipment($deliverySettings); } return $this->createMultipleShipments($items); From a7448b200160c5a5d1cc48beebe6c7337b718f26 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Tue, 5 May 2026 19:08:12 +0200 Subject: [PATCH 22/24] new version of shingle shipment per oder --- CHANGELOG.md | 2 +- composer.lock | 18 +++++++++--------- tests/Adapter/ShipmentsAdapterTest.php | 8 ++++++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cd73ef..7ed4265 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 0.5.0 - 2026-05-04 +## 0.5.0 - 2026-05-05 - Single-shipment-per-order now uses merchant default parcel size from settings instead of summing item dimensions - Added `getDefaultParcelWidth/Height/Length/Weight` to `PayseraDeliverySettingsInterface` - `ShipmentsAdapter::convert()` signature changed: now accepts `PayseraDeliverySettingsInterface` instead of a bool flag diff --git a/composer.lock b/composer.lock index 1014214..822c6b6 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": "d9caed69a9575b77a1a546e3213f3eea", + "content-hash": "60e4bf6fabaf31e3af822a03eac5ea2c", "packages": [ { "name": "evp/money", @@ -536,16 +536,16 @@ }, { "name": "paysera/lib-delivery-api-merchant-client", - "version": "1.2.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/paysera/lib-delivery-api-merchant-client.git", - "reference": "263496744b42f1fb10767636fba05efea743a783" + "reference": "2943b121f7037ce5743c909f456936de3edd03a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paysera/lib-delivery-api-merchant-client/zipball/263496744b42f1fb10767636fba05efea743a783", - "reference": "263496744b42f1fb10767636fba05efea743a783", + "url": "https://api.github.com/repos/paysera/lib-delivery-api-merchant-client/zipball/2943b121f7037ce5743c909f456936de3edd03a8", + "reference": "2943b121f7037ce5743c909f456936de3edd03a8", "shasum": "" }, "require": { @@ -564,9 +564,9 @@ "description": "Paysera Delivery Api Merchant Client", "support": { "issues": "https://github.com/paysera/lib-delivery-api-merchant-client/issues", - "source": "https://github.com/paysera/lib-delivery-api-merchant-client/tree/1.2.1" + "source": "https://github.com/paysera/lib-delivery-api-merchant-client/tree/1.5.1" }, - "time": "2025-04-29T10:04:12+00:00" + "time": "2025-12-03T12:45:08+00:00" }, { "name": "paysera/lib-rest-client-common", @@ -5204,12 +5204,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { "php": ">=7.4" }, - "platform-dev": {}, + "platform-dev": [], "plugin-api-version": "2.6.0" } diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index e27906a..06daa24 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -33,7 +33,7 @@ public function testConvertWithMultipleShipments(): void ->method('isSinglePerOrderShipmentEnabled') ->willReturn(false); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; $this->assertCount(2, $shipments); @@ -56,8 +56,12 @@ public function testConvertWithSingleShipment(): void $this->settingsMock ->method('isSinglePerOrderShipmentEnabled') ->willReturn(true); + $this->settingsMock->method('getDefaultParcelLength')->willReturn(100); + $this->settingsMock->method('getDefaultParcelWidth')->willReturn(80); + $this->settingsMock->method('getDefaultParcelHeight')->willReturn(60); + $this->settingsMock->method('getDefaultParcelWeight')->willReturn(120); - $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, true)]; + $shipments = [...$this->shipmentsAdapter->convert($this->itemsCollection, $this->settingsMock)]; $this->assertCount(1, $shipments); $shipment = $shipments[0]; From b06871dd2d03052562743319d6f38058d14569e9 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Thu, 7 May 2026 21:56:14 +0200 Subject: [PATCH 23/24] new version of shingle shipment per oder --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ed4265..9113c47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,9 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 0.3.0 - 2024-06-15 - Sending as one big package -## 0.3.0 - 2024-06-15 -- Sending as one big package - ## 0.2.1 - 2024-04-29 - Updated documentation From b6a953009474a4ddcef20fb9d2f659ec774f4a35 Mon Sep 17 00:00:00 2001 From: Adam Zagroba Date: Fri, 8 May 2026 11:43:53 +0200 Subject: [PATCH 24/24] Ai code review fix --- src/Adapter/ShipmentsAdapter.php | 4 ++++ tests/Adapter/ShipmentsAdapterTest.php | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/Adapter/ShipmentsAdapter.php b/src/Adapter/ShipmentsAdapter.php index 16db308..713b67d 100644 --- a/src/Adapter/ShipmentsAdapter.php +++ b/src/Adapter/ShipmentsAdapter.php @@ -20,12 +20,16 @@ public function convert( PayseraDeliverySettingsInterface $deliverySettings ): iterable { if ($deliverySettings->isSinglePerOrderShipmentEnabled()) { + if (count($items) === 0) { + return []; + } return $this->createSingleShipment($deliverySettings); } return $this->createMultipleShipments($items); } /** + * @param PayseraDeliverySettingsInterface $deliverySettings * @return iterable */ private function createSingleShipment(PayseraDeliverySettingsInterface $deliverySettings): iterable diff --git a/tests/Adapter/ShipmentsAdapterTest.php b/tests/Adapter/ShipmentsAdapterTest.php index 06daa24..ba85c8a 100644 --- a/tests/Adapter/ShipmentsAdapterTest.php +++ b/tests/Adapter/ShipmentsAdapterTest.php @@ -72,6 +72,17 @@ public function testConvertWithSingleShipment(): void $this->assertEquals(120, $shipment->getWeight()); } + public function testConvertWithSingleShipmentReturnsNothingWhenItemsAreEmpty(): void + { + $this->settingsMock + ->method('isSinglePerOrderShipmentEnabled') + ->willReturn(true); + + $shipments = [...$this->shipmentsAdapter->convert(new OrderItemsCollection([]), $this->settingsMock)]; + + $this->assertCount(0, $shipments); + } + private function createItemMock(int $height, int $width, int $length, int $weight): MerchantOrderItemInterface { $mock = $this->createMock(MerchantOrderItemInterface::class);