From 0291ca5397a34575617ec8c9c05e04be65f86d24 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 12 Nov 2025 21:46:11 +0800 Subject: [PATCH 01/44] Show product title on variant chip Potential fix for #4155 --- CHANGELOG-WIP.md | 1 + src/elements/Variant.php | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 2d101d2596..f50baadd95 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -8,6 +8,7 @@ - Logged-in users who own the order or have appropriate permissions bypass the email verification flow and can download PDFs directly. - Added a new system email message for sending PDF download links to customers. - It is now possible to select multiple products in variant conditions. ([#4166](https://github.com/craftcms/commerce/pull/4166)) +- Variants now include their owner products' title when being displayed in the control panel. ([#4155](https://github.com/craftcms/commerce/issues/4155)) ### Administration - Added billing and shipping address conditions to gateways. ([#4100](https://github.com/craftcms/commerce/pull/4100)) diff --git a/src/elements/Variant.php b/src/elements/Variant.php index 5cd2a09b50..c2bc971934 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -256,6 +256,33 @@ public function init(): void $this->ownerType = Product::class; } + /** + * @inheritdoc + */ + public function getUiLabel(): string + { + $referrer = Craft::$app->getRequest()->getReferrer(); + $isAjax = Craft::$app->getRequest()->getIsAjax(); + $pathInfo = Craft::$app->getRequest()->getPathInfo(); + if ( + ($isAjax && str_contains($referrer, 'commerce') && str_contains($referrer, 'products')) + || + (str_contains($pathInfo, 'commerce') && str_contains($pathInfo, 'products')) + ) { + return parent::getUiLabel(); + } + + if (!$this->owner) { + return parent::getUiLabel(); + } + + if (Craft::$app->getLocale()->getOrientation() == 'rtl') { + return Html::encode(parent::getUiLabel() . ' : ' . $this->owner->getUiLabel()); + } + + return Html::encode($this->owner->getUiLabel() . ' : ' . parent::getUiLabel()); + } + /** * @inheritdoc */ @@ -1181,7 +1208,7 @@ public function beforeSave(bool $isNew): bool // Validate shipping category ID is available for this product type $availableShippingCategories = $this->availableShippingCategories(); $availableShippingCategoryIds = ArrayHelper::getColumn($availableShippingCategories, 'id'); - + // If the current shipping category ID is not in the available categories, set it to the default one $currentShippingCategoryId = $this->getShippingCategoryId(); if (!in_array($currentShippingCategoryId, $availableShippingCategoryIds)) { From 0c450a2b8407f3fc13e3cd30fe085170786ac06f Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 12 Nov 2025 21:50:18 +0800 Subject: [PATCH 02/44] Cleanup --- src/elements/Variant.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/elements/Variant.php b/src/elements/Variant.php index c2bc971934..98d6aa03cc 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -261,9 +261,10 @@ public function init(): void */ public function getUiLabel(): string { - $referrer = Craft::$app->getRequest()->getReferrer(); - $isAjax = Craft::$app->getRequest()->getIsAjax(); - $pathInfo = Craft::$app->getRequest()->getPathInfo(); + $request = Craft::$app->getRequest(); + $referrer = $request->getReferrer(); + $isAjax = $request->getIsAjax(); + $pathInfo = $request->getPathInfo(); if ( ($isAjax && str_contains($referrer, 'commerce') && str_contains($referrer, 'products')) || From c5961c114a9e64d641b28da8bcf1ba5285633bc8 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 12 Nov 2025 21:51:16 +0800 Subject: [PATCH 03/44] Not needed --- src/elements/Variant.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/elements/Variant.php b/src/elements/Variant.php index 98d6aa03cc..812e4bf2db 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -278,10 +278,10 @@ public function getUiLabel(): string } if (Craft::$app->getLocale()->getOrientation() == 'rtl') { - return Html::encode(parent::getUiLabel() . ' : ' . $this->owner->getUiLabel()); + return parent::getUiLabel() . ' : ' . $this->owner->getUiLabel(); } - return Html::encode($this->owner->getUiLabel() . ' : ' . parent::getUiLabel()); + return $this->owner->getUiLabel() . ' : ' . parent::getUiLabel(); } /** From 48ccfdce593ada7aa352aab448611e1ca4980406 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 12 Nov 2025 21:53:13 +0800 Subject: [PATCH 04/44] Cleanup --- src/elements/Variant.php | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/elements/Variant.php b/src/elements/Variant.php index 812e4bf2db..3876ec3529 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -262,26 +262,23 @@ public function init(): void public function getUiLabel(): string { $request = Craft::$app->getRequest(); - $referrer = $request->getReferrer(); - $isAjax = $request->getIsAjax(); - $pathInfo = $request->getPathInfo(); - if ( - ($isAjax && str_contains($referrer, 'commerce') && str_contains($referrer, 'products')) - || - (str_contains($pathInfo, 'commerce') && str_contains($pathInfo, 'products')) - ) { - return parent::getUiLabel(); - } + $referrer = $request->getReferrer() ?? ''; + $pathInfo = $request->getPathInfo() ?? ''; - if (!$this->owner) { + $isCommerceProductContext = ( + str_contains($pathInfo, 'commerce/products') || + ($request->getIsAjax() && str_contains($referrer, 'commerce/products')) + ); + + if ($isCommerceProductContext || !$this->owner) { return parent::getUiLabel(); } - if (Craft::$app->getLocale()->getOrientation() == 'rtl') { - return parent::getUiLabel() . ' : ' . $this->owner->getUiLabel(); - } + $labelParts = Craft::$app->getLocale()->getOrientation() === 'rtl' + ? [parent::getUiLabel(), $this->owner->getUiLabel()] + : [$this->owner->getUiLabel(), parent::getUiLabel()]; - return $this->owner->getUiLabel() . ' : ' . parent::getUiLabel(); + return implode(' : ', $labelParts); } /** From 7b366472a07bec573a75069972b77567ca0c7839 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 12 Nov 2025 21:59:22 +0800 Subject: [PATCH 05/44] Not nullable anyway --- src/elements/Variant.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/Variant.php b/src/elements/Variant.php index 3876ec3529..2875650dd7 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -263,7 +263,7 @@ public function getUiLabel(): string { $request = Craft::$app->getRequest(); $referrer = $request->getReferrer() ?? ''; - $pathInfo = $request->getPathInfo() ?? ''; + $pathInfo = $request->getPathInfo(); $isCommerceProductContext = ( str_contains($pathInfo, 'commerce/products') || From 9376da77283f95243c29fc750c0ec05b13a0ef01 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 3 Dec 2025 13:17:56 +0800 Subject: [PATCH 06/44] Add missing translation for 4d241314c21345189e7e588c3a30b6d11bf99d53 --- src/templates/settings/producttypes/_edit.twig | 1 + src/translations/en/commerce.php | 1 + 2 files changed, 2 insertions(+) diff --git a/src/templates/settings/producttypes/_edit.twig b/src/templates/settings/producttypes/_edit.twig index 1aeb8dc038..681bcc130a 100644 --- a/src/templates/settings/producttypes/_edit.twig +++ b/src/templates/settings/producttypes/_edit.twig @@ -443,6 +443,7 @@ {% if not headlessMode %} {{ forms.editableTableField({ label: 'Preview Targets'|t('app'), + instructions: 'Locations that should be available for previewing products in this product type.'|t('commerce'), id: 'previewTargets', name: 'previewTargets', cols: { diff --git a/src/translations/en/commerce.php b/src/translations/en/commerce.php index cb0ec990d8..b1e21989ad 100644 --- a/src/translations/en/commerce.php +++ b/src/translations/en/commerce.php @@ -629,6 +629,7 @@ 'Link' => 'Link', 'Live' => 'Live', 'Location' => 'Location', + 'Locations that should be available for previewing products in this product type.' => 'Locations that should be available for previewing products in this product type.', 'MM' => 'MM', 'Make a payment' => 'Make a payment', 'Make this the primary store' => 'Make this the primary store', From e952d01f9444f68b83ded751dd2566ab3198ab22 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 3 Dec 2025 13:19:26 +0800 Subject: [PATCH 07/44] WIP release notes --- CHANGELOG-WIP.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 CHANGELOG-WIP.md diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md new file mode 100644 index 0000000000..1e8ae192fa --- /dev/null +++ b/CHANGELOG-WIP.md @@ -0,0 +1 @@ +# WIP Release notes for Commerce 5.6 \ No newline at end of file From c5b0a484f75e076a846bb725a69010938d9c3786 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 15 Jan 2026 15:17:46 +0800 Subject: [PATCH 08/44] Added `relatedToProducts` and `relatedToVariants` GraphQL query arguments. --- CHANGELOG-WIP.md | 4 +- src/Plugin.php | 42 +++++++++++++++++++ src/gql/handlers/RelatedProducts.php | 31 ++++++++++++++ src/gql/handlers/RelatedVariants.php | 31 ++++++++++++++ .../types/input/criteria/ProductRelation.php | 39 +++++++++++++++++ .../types/input/criteria/VariantRelation.php | 39 +++++++++++++++++ 6 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 src/gql/handlers/RelatedProducts.php create mode 100644 src/gql/handlers/RelatedVariants.php create mode 100644 src/gql/types/input/criteria/ProductRelation.php create mode 100644 src/gql/types/input/criteria/VariantRelation.php diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 1e8ae192fa..a02cd6c30c 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1 +1,3 @@ -# WIP Release notes for Commerce 5.6 \ No newline at end of file +# WIP Release notes for Commerce 5.6 + +- Added `relatedToProducts` and `relatedToVariants` GraphQL query arguments, enabling queries for elements related to specific products or variants. ([#4202](https://github.com/craftcms/commerce/discussions/4202)) \ No newline at end of file diff --git a/src/Plugin.php b/src/Plugin.php index 29be666c38..6c81cb1bb7 100755 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -137,6 +137,7 @@ use craft\events\RegisterComponentTypesEvent; use craft\events\RegisterElementExportersEvent; use craft\events\RegisterEmailMessagesEvent; +use craft\events\RegisterGqlArgumentHandlersEvent; use craft\events\RegisterGqlEagerLoadableFields; use craft\events\RegisterGqlQueriesEvent; use craft\events\RegisterGqlSchemaComponentsEvent; @@ -144,6 +145,11 @@ use craft\events\RegisterUserPermissionsEvent; use craft\fields\Link; use craft\fixfks\controllers\RestoreController; +use craft\commerce\gql\handlers\RelatedProducts; +use craft\commerce\gql\handlers\RelatedVariants; +use craft\commerce\gql\types\input\criteria\ProductRelation; +use craft\commerce\gql\types\input\criteria\VariantRelation; +use craft\gql\ArgumentManager; use craft\gql\ElementQueryConditionBuilder; use craft\helpers\ArrayHelper; use craft\helpers\Console; @@ -311,6 +317,7 @@ public function init(): void $this->_registerGqlQueries(); $this->_registerGqlComponents(); $this->_registerGqlEagerLoadableFields(); + $this->_registerGqlArgumentHandlers(); $this->_registerLinkTypes(); $this->_registerCacheTypes(); $this->_registerGarbageCollection(); @@ -1029,6 +1036,41 @@ private function _registerGqlEagerLoadableFields(): void }); } + /** + * Register the Gql argument handlers + * + * @since 5.6.0 + */ + private function _registerGqlArgumentHandlers(): void + { + Event::on(ArgumentManager::class, ArgumentManager::EVENT_DEFINE_GQL_ARGUMENT_HANDLERS, static function(RegisterGqlArgumentHandlersEvent $event) { + $event->handlers['relatedToProducts'] = RelatedProducts::class; + $event->handlers['relatedToVariants'] = RelatedVariants::class; + }); + + // Add relatedToProducts and relatedToVariants arguments to element queries + Event::on(Gql::class, Gql::EVENT_REGISTER_GQL_QUERIES, static function(RegisterGqlQueriesEvent $event) { + $relatedToProductsArg = [ + 'name' => 'relatedToProducts', + 'type' => \GraphQL\Type\Definition\Type::listOf(ProductRelation::getType()), + 'description' => 'Narrows the query results to elements that relate to a product list defined with this argument.', + ]; + $relatedToVariantsArg = [ + 'name' => 'relatedToVariants', + 'type' => \GraphQL\Type\Definition\Type::listOf(VariantRelation::getType()), + 'description' => 'Narrows the query results to elements that relate to a variant list defined with this argument.', + ]; + + // Add the arguments to all relevant queries + foreach ($event->queries as $queryName => &$queryConfig) { + if (isset($queryConfig['args']) && is_array($queryConfig['args'])) { + $queryConfig['args']['relatedToProducts'] = $relatedToProductsArg; + $queryConfig['args']['relatedToVariants'] = $relatedToVariantsArg; + } + } + }); + } + /** * Register the cache types */ diff --git a/src/gql/handlers/RelatedProducts.php b/src/gql/handlers/RelatedProducts.php new file mode 100644 index 0000000000..49714dc334 --- /dev/null +++ b/src/gql/handlers/RelatedProducts.php @@ -0,0 +1,31 @@ + + * @since 5.6.0 + */ +class RelatedProducts extends RelationArgumentHandler +{ + protected string $argumentName = 'relatedToProducts'; + + /** + * @inheritdoc + */ + protected function handleArgument($argumentValue): mixed + { + $argumentValue = parent::handleArgument($argumentValue); + return $this->getIds(Product::class, $argumentValue); + } +} diff --git a/src/gql/handlers/RelatedVariants.php b/src/gql/handlers/RelatedVariants.php new file mode 100644 index 0000000000..d30a4c99de --- /dev/null +++ b/src/gql/handlers/RelatedVariants.php @@ -0,0 +1,31 @@ + + * @since 5.6.0 + */ +class RelatedVariants extends RelationArgumentHandler +{ + protected string $argumentName = 'relatedToVariants'; + + /** + * @inheritdoc + */ + protected function handleArgument($argumentValue): mixed + { + $argumentValue = parent::handleArgument($argumentValue); + return $this->getIds(Variant::class, $argumentValue); + } +} diff --git a/src/gql/types/input/criteria/ProductRelation.php b/src/gql/types/input/criteria/ProductRelation.php new file mode 100644 index 0000000000..0bb5243aba --- /dev/null +++ b/src/gql/types/input/criteria/ProductRelation.php @@ -0,0 +1,39 @@ + + * @since 5.6.0 + */ +class ProductRelation extends InputObjectType +{ + /** + * @return mixed + */ + public static function getType(): mixed + { + $typeName = 'ProductRelationCriteriaInput'; + + return GqlEntityRegistry::getOrCreate($typeName, fn() => new InputObjectType([ + 'name' => $typeName, + 'fields' => fn() => [ + ...ProductArguments::getArguments(), + ...ProductArguments::getContentArguments(), + ...RelationCriteria::getArguments(), + ], + ])); + } +} diff --git a/src/gql/types/input/criteria/VariantRelation.php b/src/gql/types/input/criteria/VariantRelation.php new file mode 100644 index 0000000000..24e6344d30 --- /dev/null +++ b/src/gql/types/input/criteria/VariantRelation.php @@ -0,0 +1,39 @@ + + * @since 5.6.0 + */ +class VariantRelation extends InputObjectType +{ + /** + * @return mixed + */ + public static function getType(): mixed + { + $typeName = 'VariantRelationCriteriaInput'; + + return GqlEntityRegistry::getOrCreate($typeName, fn() => new InputObjectType([ + 'name' => $typeName, + 'fields' => fn() => [ + ...VariantArguments::getArguments(), + ...VariantArguments::getContentArguments(), + ...RelationCriteria::getArguments(), + ], + ])); + } +} From 25afc292b57d68fd057079962cd7bca9b23bfc7f Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 28 Jan 2026 19:44:54 +0800 Subject: [PATCH 09/44] Refactor Product query editability --- CHANGELOG-WIP.md | 5 +- src/elements/Product.php | 2 +- src/elements/db/ProductQuery.php | 87 +++++++++++++++++++++++++++----- 3 files changed, 78 insertions(+), 16 deletions(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 1e8ae192fa..227b8b1e3e 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1 +1,4 @@ -# WIP Release notes for Commerce 5.6 \ No newline at end of file +# WIP Release notes for Commerce 5.6 + +- Added `craft\commerce\elements\db\ProductQuery::$savable` +- Added `\craft\commerce\elements\db\ProductQuery::savable()` \ No newline at end of file diff --git a/src/elements/Product.php b/src/elements/Product.php index a2495b5126..18ef6bda6c 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -226,7 +226,7 @@ protected static function defineSources(string $context = null): array $editable = true; } else { $productTypes = Plugin::getInstance()->getProductTypes()->getAllProductTypes(); - $editable = false; + $editable = null; } $productTypeIds = []; diff --git a/src/elements/db/ProductQuery.php b/src/elements/db/ProductQuery.php index c821df1847..d38e099c63 100644 --- a/src/elements/db/ProductQuery.php +++ b/src/elements/db/ProductQuery.php @@ -52,9 +52,17 @@ class ProductQuery extends ElementQuery { /** - * @var bool Whether to only return products that the user has permission to edit. + * @var bool|null Whether to only return products that the user has permission to view. + * @used-by editable() */ - public bool $editable = false; + public ?bool $editable = null; + + /** + * @var bool|null Whether to only return products that the user has permission to save. + * @used-by savable() + * @since 5.6.0 + */ + public ?bool $savable = null; /** * @var mixed The Post Date that the resulting products must have. @@ -529,17 +537,32 @@ public function after(DateTime|string $value): static } /** - * Sets the [[editable]] property. + * Sets the [[$editable]] property. * - * @param bool $value The property value (defaults to true) + * @param bool|null $value The property value (defaults to true) * @return static self reference + * @uses $editable */ - public function editable(bool $value = true): static + public function editable(?bool $value = true): static { $this->editable = $value; return $this; } + /** + * Sets the [[$savable]] property. + * + * @param bool|null $value The property value (defaults to true) + * @return static self reference + * @uses $savable + * @since 5.6.0 + */ + public function savable(?bool $value = true): static + { + $this->savable = $value; + return $this; + } + /** * Narrows the query results based on the products’ types, per the types’ IDs. * @@ -825,7 +848,8 @@ protected function beforePrepare(): bool } $this->_applyHasVariantParam(); - $this->_applyEditableParam(); + $this->_applyEditableParam($this->editable, 'commerce-editProductType'); + $this->_applyEditableParam($this->savable, 'commerce-editProductType'); $this->_applyRefParam(); return parent::beforePrepare(); @@ -858,26 +882,61 @@ private function _normalizeTypeId(): void } /** - * Applies the 'editable' param to the query being prepared. + * Applies an authorization param to the query being prepared. * + * @param bool|null $value + * @param string $permissionPrefix * @throws QueryAbortedException */ - private function _applyEditableParam(): void + private function _applyEditableParam(?bool $value, string $permissionPrefix): void { - if (!$this->editable) { + if ($value === null) { return; } $user = Craft::$app->getUser()->getIdentity(); if (!$user) { - throw new QueryAbortedException('Could not execute query for product when no user found'); + throw new QueryAbortedException(); } - // Limit the query to only the sections the user has permission to edit - $this->subQuery->andWhere([ - 'commerce_products.typeId' => Plugin::getInstance()->getProductTypes()->getEditableProductTypeIds(), - ]); + $productTypes = Plugin::getInstance()->getProductTypes()->getAllProductTypes(); + + if (empty($productTypes)) { + return; + } + + $authorizedTypeIds = []; + + foreach ($productTypes as $productType) { + if ($user->can("$permissionPrefix:$productType->uid")) { + $authorizedTypeIds[] = $productType->id; + } + } + + if (count($authorizedTypeIds) === count($productTypes)) { + // They have access to everything + if (!$value) { + throw new QueryAbortedException(); + } + return; + } + + if (empty($authorizedTypeIds)) { + // They don't have access to anything + if ($value) { + throw new QueryAbortedException(); + } + return; + } + + $condition = ['commerce_products.typeId' => $authorizedTypeIds]; + + if (!$value) { + $condition = ['not', $condition]; + } + + $this->subQuery->andWhere($condition); } /** From 4721b333559ebcc3fb2bc1e25e4e5b08e0566b91 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 28 Jan 2026 20:36:14 +0800 Subject: [PATCH 10/44] Update variant query also See 25afc292b57d68fd057079962cd7bca9b23bfc7f --- CHANGELOG-WIP.md | 9 ++- src/elements/db/VariantQuery.php | 99 +++++++++++++++++++++++++++++++- 2 files changed, 104 insertions(+), 4 deletions(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 227b8b1e3e..a67969adc0 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1,4 +1,9 @@ # WIP Release notes for Commerce 5.6 -- Added `craft\commerce\elements\db\ProductQuery::$savable` -- Added `\craft\commerce\elements\db\ProductQuery::savable()` \ No newline at end of file +- Added `craft\commerce\elements\db\ProductQuery::$savable`. +- Added `craft\commerce\elements\db\ProductQuery::savable()`. +- Added `craft\commerce\elements\db\VariantQuery::$savable`. +- Added `craft\commerce\elements\db\VariantQuery::savable()`. +- Added `craft\commerce\elements\db\VariantQuery::editable()`. +- `craft\commerce\elements\db\ProductQuery::$editable` is now nullable. +- `craft\commerce\elements\db\VariantQuery::$editable` is now nullable. \ No newline at end of file diff --git a/src/elements/db/VariantQuery.php b/src/elements/db/VariantQuery.php index 970c7e99a8..c534d5f9c1 100755 --- a/src/elements/db/VariantQuery.php +++ b/src/elements/db/VariantQuery.php @@ -66,9 +66,17 @@ class VariantQuery extends PurchasableQuery protected array $defaultOrderBy = ['elements_owners.sortOrder' => SORT_ASC]; /** - * @var bool Whether to only return variants that the user has permission to edit. + * @var bool|null Whether to only return variants that the user has permission to view. + * @used-by editable() */ - public bool $editable = false; + public ?bool $editable = null; + + /** + * @var bool|null Whether to only return variants that the user has permission to save. + * @used-by savable() + * @since 5.6.0 + */ + public ?bool $savable = null; /** * @var bool|null @@ -432,6 +440,33 @@ public function maxQty(mixed $value): VariantQuery return $this; } + /** + * Sets the [[$editable]] property. + * + * @param bool|null $value The property value (defaults to true) + * @return static self reference + * @uses $editable + */ + public function editable(?bool $value = true): static + { + $this->editable = $value; + return $this; + } + + /** + * Sets the [[$savable]] property. + * + * @param bool|null $value The property value (defaults to true) + * @return static self reference + * @uses $savable + * @since 5.6.0 + */ + public function savable(?bool $value = true): static + { + $this->savable = $value; + return $this; + } + /** * @param Connection|null $db * @return VariantCollection @@ -741,6 +776,8 @@ protected function beforePrepare(): bool } $this->_applyHasProductParam(); + $this->_applyEditableParam($this->editable, 'commerce-editProductType'); + $this->_applyEditableParam($this->savable, 'commerce-editProductType'); return parent::beforePrepare(); } @@ -808,6 +845,64 @@ private function _applyHasProductParam(): void $this->subQuery->andWhere(['commerce_variants.primaryOwnerId' => $productQuery]); } + /** + * Applies an authorization param to the query being prepared. + * + * @param bool|null $value + * @param string $permissionPrefix + * @throws QueryAbortedException + */ + private function _applyEditableParam(?bool $value, string $permissionPrefix): void + { + if ($value === null) { + return; + } + + $user = Craft::$app->getUser()->getIdentity(); + + if (!$user) { + throw new QueryAbortedException(); + } + + $productTypes = Plugin::getInstance()->getProductTypes()->getAllProductTypes(); + + if (empty($productTypes)) { + return; + } + + $authorizedTypeIds = []; + + foreach ($productTypes as $productType) { + if ($user->can("$permissionPrefix:$productType->uid")) { + $authorizedTypeIds[] = $productType->id; + } + } + + if (count($authorizedTypeIds) === count($productTypes)) { + // They have access to everything + if (!$value) { + throw new QueryAbortedException(); + } + return; + } + + if (empty($authorizedTypeIds)) { + // They don't have access to anything + if ($value) { + throw new QueryAbortedException(); + } + return; + } + + $condition = ['commerce_products.typeId' => $authorizedTypeIds]; + + if (!$value) { + $condition = ['not', $condition]; + } + + $this->subQuery->andWhere($condition); + } + /** * Applies the 'productStatus' param to the query being prepared. * From 0880b4c4d989d7775c8212b830e93b2c6fb43af7 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 28 Jan 2026 20:46:59 +0800 Subject: [PATCH 11/44] Improve set and adjust language --- .../inventory/levels/_updateInventoryLevelModal.twig | 4 ++-- src/translations/en/commerce.php | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/templates/inventory/levels/_updateInventoryLevelModal.twig b/src/templates/inventory/levels/_updateInventoryLevelModal.twig index 03efd2dddf..f42f965f06 100644 --- a/src/templates/inventory/levels/_updateInventoryLevelModal.twig +++ b/src/templates/inventory/levels/_updateInventoryLevelModal.twig @@ -10,8 +10,8 @@ name: 'updateAction', value: updateAction, options: [ - { label: "Set"|t('commerce'), value: "set" }, - { label: "Adjust"|t('commerce'), value: "adjust" } + { label: "Set to"|t('commerce'), value: "set" }, + { label: "Adjust by"|t('commerce'), value: "adjust" } ] }) }} diff --git a/src/translations/en/commerce.php b/src/translations/en/commerce.php index cb0ec990d8..50a06305b4 100644 --- a/src/translations/en/commerce.php +++ b/src/translations/en/commerce.php @@ -45,6 +45,7 @@ 'Adjust Quantity' => 'Adjust Quantity', 'Adjust price when included rate is disqualified?' => 'Adjust price when included rate is disqualified?', 'Adjust' => 'Adjust', + 'Adjust by' => 'Adjust by', 'Adjustments' => 'Adjustments', 'Administrative Area Code of Origin' => 'Administrative Area Code of Origin', 'Advanced' => 'Advanced', @@ -998,6 +999,7 @@ 'Set the sale price to a flat amount' => 'Set the sale price to a flat amount', 'Set the sale price to a percentage of the original price' => 'Set the sale price to a percentage of the original price', 'Set' => 'Set', + 'Set to' => 'Set to', 'Settings saved.' => 'Settings saved.', 'Settings' => 'Settings', 'Share cart…' => 'Share cart…', From 63b2f2d833d38a491344c97efe622cefd996b2f1 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 28 Jan 2026 21:06:27 +0800 Subject: [PATCH 12/44] Fixed #4197 --- CHANGELOG.md | 1 + src/elements/Product.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 248d5a1d20..f8bc150b8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Fixed [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SQL injection vulnerabilities in the control panel. (GHSA-j3x5-mghf-xvfw, GHSA-pmgj-gmm4-jh6j) - Fixed [low-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerabilities in the control panel. (GHSA-mqxf-2998-c6cp, GHSA-wj89-2385-gpx3, GHSA-mj32-r678-7mvp) - Fixed a [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerability in the control panel. (GHSA-cfpv-rmpf-f624) +- Fixed a bug where Variant with empty SKUs didn't show a validation error when saving a product after it was duplicated. ([#4197](https://github.com/craftcms/commerce/issues/4197)) - Added `craft\commerce\models\LineItemStatus::getDisplayName()`. ## 5.5.2 - 2025-12-31 diff --git a/src/elements/Product.php b/src/elements/Product.php index a2495b5126..c53ec0d2a2 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -1837,6 +1837,23 @@ function() { }, 'on' => self::SCENARIO_LIVE, ], + [ + ['variants'], + function() { + // Only validate SKUs on canonical saves (not duplicates/propagations) + if (!$this->getIsCanonical() || $this->duplicateOf || $this->propagating) { + return; + } + + foreach ($this->getVariants(true) as $variant) { + if (!$variant->sku || PurchasableHelper::isTempSku($variant->sku)) { + $this->addError('variants', Craft::t('commerce', 'All variants must have a SKU.')); + break; + } + } + }, + 'on' => self::SCENARIO_LIVE, + ], [ ['variants'], function() { From f1cd82df6d3792910c31b26fbd3ba96810a2b4da Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 15:47:45 +0800 Subject: [PATCH 13/44] Cleanup --- src/fields/Products.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/fields/Products.php b/src/fields/Products.php index 268934e5bb..20aa1c9337 100644 --- a/src/fields/Products.php +++ b/src/fields/Products.php @@ -8,12 +8,10 @@ namespace craft\commerce\fields; use Craft; -use craft\base\ElementInterface; use craft\commerce\elements\Product; use craft\commerce\gql\arguments\elements\Product as ProductArguments; use craft\commerce\gql\interfaces\elements\Product as ProductInterface; use craft\commerce\gql\resolvers\elements\Product as ProductResolver; -use craft\commerce\web\assets\editproduct\EditProductAsset; use craft\fields\BaseRelationField; use craft\helpers\Gql as GqlHelper; use craft\services\Gql as GqlService; From 4ac2eef1269875a4df62417c0fbbec19f74d7b81 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 28 Jan 2026 21:06:27 +0800 Subject: [PATCH 14/44] Fixed #4197 --- CHANGELOG.md | 1 + src/elements/Product.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e66f5bbf6f..cc1ec03215 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ x - Fixed [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SQL injection vulnerabilities in the control panel. (GHSA-j3x5-mghf-xvfw, GHSA-pmgj-gmm4-jh6j) - Fixed [low-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerabilities in the control panel. (GHSA-mqxf-2998-c6cp, GHSA-wj89-2385-gpx3, GHSA-mj32-r678-7mvp) - Fixed a [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerability in the control panel. (GHSA-cfpv-rmpf-f624) +- Fixed a bug where Variant with empty SKUs didn't show a validation error when saving a product after it was duplicated. ([#4197](https://github.com/craftcms/commerce/issues/4197)) - Added `craft\commerce\models\LineItemStatus::getDisplayName()`. ## 5.5.2 - 2025-12-31 diff --git a/src/elements/Product.php b/src/elements/Product.php index a2495b5126..c53ec0d2a2 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -1837,6 +1837,23 @@ function() { }, 'on' => self::SCENARIO_LIVE, ], + [ + ['variants'], + function() { + // Only validate SKUs on canonical saves (not duplicates/propagations) + if (!$this->getIsCanonical() || $this->duplicateOf || $this->propagating) { + return; + } + + foreach ($this->getVariants(true) as $variant) { + if (!$variant->sku || PurchasableHelper::isTempSku($variant->sku)) { + $this->addError('variants', Craft::t('commerce', 'All variants must have a SKU.')); + break; + } + } + }, + 'on' => self::SCENARIO_LIVE, + ], [ ['variants'], function() { From 406ac2d11283a087981f44feed4a5a873cce2b7f Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 21:04:31 +0800 Subject: [PATCH 15/44] Add variant SKU validation to live products --- composer.json | 2 +- composer.lock | 3096 ++++++++++++++++-------------- src/elements/Product.php | 18 +- src/translations/en/commerce.php | 1 + 4 files changed, 1667 insertions(+), 1450 deletions(-) diff --git a/composer.json b/composer.json index 424ae5b760..58d3c12e6d 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "prefer-stable": true, "require": { "php": "^8.2", - "craftcms/cms": "^5.6.0", + "craftcms/cms": "^5.9.0", "dompdf/dompdf": "^2.0.2", "ibericode/vat": "^1.2.2", "iio/libmergepdf": "^4.0", diff --git a/composer.lock b/composer.lock index fc02233879..b77768bdd8 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": "ff78ccead3f15c9a900dafb12295cbee", + "content-hash": "5722c0136166cfedca244fa3fc58d187", "packages": [ { "name": "bacon/bacon-qr-code", @@ -62,25 +62,25 @@ }, { "name": "brick/math", - "version": "0.12.3", + "version": "0.14.5", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + "reference": "618a8077b3c326045e10d5788ed713b341fcfe40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "url": "https://api.github.com/repos/brick/math/zipball/618a8077b3c326045e10d5788ed713b341fcfe40", + "reference": "618a8077b3c326045e10d5788ed713b341fcfe40", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -110,7 +110,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.3" + "source": "https://github.com/brick/math/tree/0.14.5" }, "funding": [ { @@ -118,7 +118,76 @@ "type": "github" } ], - "time": "2025-02-28T13:11:00+00:00" + "time": "2026-02-03T18:06:51+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" }, { "name": "cebe/markdown", @@ -186,16 +255,16 @@ }, { "name": "commerceguys/addressing", - "version": "v2.2.4", + "version": "v2.2.5", "source": { "type": "git", "url": "https://github.com/commerceguys/addressing.git", - "reference": "ea826dbe5b3fe76960073a2167d5cf996c811cda" + "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/addressing/zipball/ea826dbe5b3fe76960073a2167d5cf996c811cda", - "reference": "ea826dbe5b3fe76960073a2167d5cf996c811cda", + "url": "https://api.github.com/repos/commerceguys/addressing/zipball/15b789e5e6ededaf803d23c56cdc300a94522a7c", + "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c", "shasum": "" }, "require": { @@ -207,7 +276,7 @@ "mikey179/vfsstream": "^1.6.11", "phpunit/phpunit": "^9.6", "squizlabs/php_codesniffer": "^3.7", - "symfony/validator": "^5.4 || ^6.3 || ^7.0" + "symfony/validator": "^5.4 || ^6.3 || ^7.0 || ^8.0" }, "suggest": { "symfony/validator": "to validate addresses" @@ -244,22 +313,101 @@ ], "support": { "issues": "https://github.com/commerceguys/addressing/issues", - "source": "https://github.com/commerceguys/addressing/tree/v2.2.4" + "source": "https://github.com/commerceguys/addressing/tree/v2.2.5" + }, + "time": "2026-01-05T13:00:32+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" }, - "time": "2025-01-13T16:03:24+00:00" + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -311,7 +459,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -321,26 +469,22 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "craftcms/cms", - "version": "5.7.8", + "version": "5.9.6", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", - "reference": "3fea28125abcf67e0f556da9f1ee8093d58e3641" + "reference": "558372701d7870da4a3cda88592a21d962de0cb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms/zipball/3fea28125abcf67e0f556da9f1ee8093d58e3641", - "reference": "3fea28125abcf67e0f556da9f1ee8093d58e3641", + "url": "https://api.github.com/repos/craftcms/cms/zipball/558372701d7870da4a3cda88592a21d962de0cb1", + "reference": "558372701d7870da4a3cda88592a21d962de0cb1", "shasum": "" }, "require": { @@ -351,7 +495,7 @@ "craftcms/server-check": "~5.0.1", "creocoder/yii2-nested-sets": "~0.9.0", "elvanto/litemoji": "~4.3.0", - "enshrined/svg-sanitize": "~0.19.0", + "enshrined/svg-sanitize": "~0.22.0", "ext-bcmath": "*", "ext-curl": "*", "ext-dom": "*", @@ -364,12 +508,14 @@ "ext-zip": "*", "guzzlehttp/guzzle": "^7.2.0", "illuminate/collections": "^v10.42.0", + "illuminate/support": "^10.49", "league/uri": "^7.0", "mikehaertl/php-shellcommand": "^1.6.3", "moneyphp/money": "^4.0", "monolog/monolog": "^3.0", "php": "^8.2", "phpdocumentor/reflection-docblock": "^5.3", + "phpoffice/phpspreadsheet": "^5.3", "pixelandtonic/imagine": "~1.3.3.1", "pragmarx/google2fa": "^8.0", "pragmarx/recovery": "^0.2.1", @@ -382,22 +528,23 @@ "symfony/property-access": "^7.0", "symfony/property-info": "^7.0", "symfony/serializer": "^6.4", - "symfony/var-dumper": "^5.0|^6.0", - "symfony/yaml": "^5.2.3|^6.0", + "symfony/var-dumper": "^5.0|^6.0|^7.0", + "symfony/yaml": "^5.2.3|^6.0|^7.0", + "thamtech/yii2-ratelimiter-advanced": "^0.5.0", "theiconic/name-parser": "^1.2", - "twig/twig": "~3.15.0", - "voku/stringy": "^6.4.0", + "twig/twig": "~3.21.1", + "voku/portable-ascii": "^2.0", "web-auth/webauthn-lib": "~4.9.0", "webonyx/graphql-php": "~14.11.10", - "yiisoft/yii2": "~2.0.52.0", - "yiisoft/yii2-debug": "~2.1.26.0", + "yiisoft/yii2": "~2.0.54.0", + "yiisoft/yii2-debug": "~2.1.27.0", "yiisoft/yii2-queue": "~2.3.2", "yiisoft/yii2-symfonymailer": "^4.0.0" }, "provide": { "bower-asset/inputmask": "5.0.9", "bower-asset/jquery": "3.6.1", - "bower-asset/punycode": "^1.4", + "bower-asset/punycode": "^2.2", "bower-asset/yii2-pjax": "~2.0.1", "yii2tech/ar-softdelete": "1.0.4" }, @@ -412,8 +559,8 @@ "craftcms/ecs": "dev-main", "fakerphp/faker": "^1.19.0", "league/factory-muffin": "^3.3.0", - "phpstan/phpstan": "^1.10.56", - "rector/rector": "^1.2", + "phpstan/phpstan": "^2.1", + "rector/rector": "^2.0", "vlucas/phpdotenv": "^5.4.1", "yiisoft/yii2-redis": "^2.0" }, @@ -454,7 +601,7 @@ "rss": "https://github.com/craftcms/cms/releases.atom", "source": "https://github.com/craftcms/cms" }, - "time": "2025-05-28T18:48:09+00:00" + "time": "2026-02-03T16:48:37+00:00" }, { "name": "craftcms/plugin-installer", @@ -511,16 +658,16 @@ }, { "name": "craftcms/server-check", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/craftcms/server-check.git", - "reference": "08082638f8caff8ab86a223898e8ea167b3f5879" + "reference": "3b1f239c1cc781710978b0baa3e3bc99410d1973" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/server-check/zipball/08082638f8caff8ab86a223898e8ea167b3f5879", - "reference": "08082638f8caff8ab86a223898e8ea167b3f5879", + "url": "https://api.github.com/repos/craftcms/server-check/zipball/3b1f239c1cc781710978b0baa3e3bc99410d1973", + "reference": "3b1f239c1cc781710978b0baa3e3bc99410d1973", "shasum": "" }, "type": "library", @@ -549,7 +696,7 @@ "rss": "https://github.com/craftcms/server-check/releases.atom", "source": "https://github.com/craftcms/server-check" }, - "time": "2025-02-11T20:26:29+00:00" + "time": "2025-07-23T14:22:43+00:00" }, { "name": "creocoder/yii2-nested-sets", @@ -597,16 +744,16 @@ }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -641,89 +788,22 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" - }, - "time": "2024-08-09T14:30:48+00:00" - }, - { - "name": "defuse/php-encryption", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/defuse/php-encryption.git", - "reference": "f53396c2d34225064647a05ca76c1da9d99e5828" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828", - "reference": "f53396c2d34225064647a05ca76c1da9d99e5828", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "paragonie/random_compat": ">= 2", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^5|^6|^7|^8|^9|^10", - "yoast/phpunit-polyfills": "^2.0.0" - }, - "bin": [ - "bin/generate-defuse-key" - ], - "type": "library", - "autoload": { - "psr-4": { - "Defuse\\Crypto\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Hornby", - "email": "taylor@defuse.ca", - "homepage": "https://defuse.ca/" - }, - { - "name": "Scott Arciszewski", - "email": "info@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "Secure PHP Encryption Library", - "keywords": [ - "aes", - "authenticated encryption", - "cipher", - "crypto", - "cryptography", - "encrypt", - "encryption", - "openssl", - "security", - "symmetric key cryptography" - ], - "support": { - "issues": "https://github.com/defuse/php-encryption/issues", - "source": "https://github.com/defuse/php-encryption/tree/v2.4.0" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2023-06-19T06:10:36+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "doctrine/collections", - "version": "2.3.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", "shasum": "" }, "require": { @@ -732,11 +812,11 @@ "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5" + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { @@ -780,7 +860,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.3.0" + "source": "https://github.com/doctrine/collections/tree/2.6.0" }, "funding": [ { @@ -796,7 +876,7 @@ "type": "tidelift" } ], - "time": "2025-03-22T10:17:19+00:00" + "time": "2026-01-15T10:01:58+00:00" }, { "name": "doctrine/deprecations", @@ -846,6 +926,96 @@ }, "time": "2025-04-07T20:06:18+00:00" }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "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": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, { "name": "doctrine/lexer", "version": "3.0.1", @@ -1097,25 +1267,25 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.19.0", + "version": "0.22.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e" + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", - "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/0afa95ea74be155a7bcd6c6fb60c276c39984500", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" + "phpunit/phpunit": "^6.5 || ^8.5" }, "type": "library", "autoload": { @@ -1136,26 +1306,26 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.19.0" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.22.0" }, - "time": "2024-06-18T10:27:15+00:00" + "time": "2025-08-12T10:13:48+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1197,28 +1367,28 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.9.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1309,7 +1479,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1325,20 +1495,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:37:11+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1346,7 +1516,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1392,7 +1562,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1408,20 +1578,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:27:01+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -1437,7 +1607,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1508,7 +1678,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -1524,7 +1694,7 @@ "type": "tidelift" } ], - "time": "2025-03-27T12:30:47+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "ibericode/vat", @@ -1637,16 +1807,16 @@ }, { "name": "illuminate/collections", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8" + "reference": "6ae9c74fa92d4e1824d1b346cd435e8eacdc3232" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/48de3d6bc6aa779112ddcb608a3a96fc975d89d8", - "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8", + "url": "https://api.github.com/repos/illuminate/collections/zipball/6ae9c74fa92d4e1824d1b346cd435e8eacdc3232", + "reference": "6ae9c74fa92d4e1824d1b346cd435e8eacdc3232", "shasum": "" }, "require": { @@ -1688,20 +1858,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-09-08T19:05:53+00:00" }, { "name": "illuminate/conditionable", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5" + "reference": "47c700320b7a419f0d188d111f3bbed978fcbd3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", - "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/47c700320b7a419f0d188d111f3bbed978fcbd3f", + "reference": "47c700320b7a419f0d188d111f3bbed978fcbd3f", "shasum": "" }, "require": { @@ -1734,20 +1904,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-03-24T11:47:24+00:00" }, { "name": "illuminate/contracts", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74" + "reference": "2393ef579e020d88e24283913c815c3e2c143323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/f90663a69f926105a70b78060a31f3c64e2d1c74", - "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/2393ef579e020d88e24283913c815c3e2c143323", + "reference": "2393ef579e020d88e24283913c815c3e2c143323", "shasum": "" }, "require": { @@ -1782,11 +1952,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-03-24T11:47:24+00:00" }, { "name": "illuminate/macroable", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -1831,40 +2001,56 @@ "time": "2023-06-05T12:46:42+00:00" }, { - "name": "lcobucci/clock", - "version": "3.3.1", + "name": "illuminate/support", + "version": "v10.49.0", "source": { "type": "git", - "url": "https://github.com/lcobucci/clock.git", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" + "url": "https://github.com/illuminate/support.git", + "reference": "28b505e671dbe119e4e32a75c78f87189d046e39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "url": "https://api.github.com/repos/illuminate/support/zipball/28b505e671dbe119e4e32a75c78f87189d046e39", + "reference": "28b505e671dbe119e4e32a75c78f87189d046e39", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/clock": "^1.0" + "doctrine/inflector": "^2.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "nesbot/carbon": "^2.67", + "php": "^8.1", + "voku/portable-ascii": "^2.0" }, - "provide": { - "psr/clock-implementation": "1.0" + "conflict": { + "tightenco/collect": "<5.5.33" }, - "require-dev": { - "infection/infection": "^0.29", - "lcobucci/coding-standard": "^11.1.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.10.25", - "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-phpunit": "^1.3.13", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^11.3.6" + "suggest": { + "illuminate/filesystem": "Required to use the composer class (^10.0).", + "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.6).", + "ramsey/uuid": "Required to use Str::uuid() (^4.7).", + "symfony/process": "Required to use the composer class (^6.2).", + "symfony/uid": "Required to use Str::ulid() (^6.2).", + "symfony/var-dumper": "Required to use the dd function (^6.2).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, "autoload": { + "files": [ + "helpers.php" + ], "psr-4": { - "Lcobucci\\Clock\\": "src" + "Illuminate\\Support\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1873,16 +2059,71 @@ ], "authors": [ { - "name": "Luís Cobucci", - "email": "lcobucci@gmail.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Yet another clock abstraction", + "description": "The Illuminate Support package.", + "homepage": "https://laravel.com", "support": { - "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.3.1" + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "funding": [ + "time": "2025-09-08T19:05:53+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/a3139d9e97d47826f27e6a17bb63f13621f86058", + "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058", + "shasum": "" + }, + "require": { + "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.31", + "lcobucci/coding-standard": "^11.2.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^2.0.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0.0", + "phpstan/phpstan-strict-rules": "^2.0.0", + "phpunit/phpunit": "^12.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.5.0" + }, + "funding": [ { "url": "https://github.com/lcobucci", "type": "github" @@ -1892,37 +2133,42 @@ "type": "patreon" } ], - "time": "2024-09-24T20:45:14+00:00" + "time": "2025-10-27T09:03:17+00:00" }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.8", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1950,6 +2196,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -1962,9 +2209,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -1974,7 +2223,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.8.0" }, "funding": [ { @@ -1982,26 +2231,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2026-01-14T17:24:56+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -2009,6 +2257,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -2033,7 +2282,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -2058,7 +2307,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" }, "funding": [ { @@ -2066,20 +2315,205 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2026-01-15T06:54:53+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/682f1098a8fddbaf43edac2306a691c7ad508ec5", + "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.3" + }, + "require-dev": { + "brianium/paratest": "^7.7", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.86", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^12.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2025-12-10T09:58:31+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -2131,9 +2565,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "mikehaertl/php-shellcommand", @@ -2183,23 +2617,23 @@ }, { "name": "moneyphp/money", - "version": "v4.7.0", + "version": "v4.8.0", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa" + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/af048f0206d3b39b8fad9de6a230cedf765365fa", - "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa", + "url": "https://api.github.com/repos/moneyphp/money/zipball/b358727ea5a5cd2d7475e59c31dfc352440ae7ec", + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec", "shasum": "" }, "require": { "ext-bcmath": "*", "ext-filter": "*", "ext-json": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cache/taggable-cache": "^1.1.0", @@ -2267,22 +2701,22 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.7.0" + "source": "https://github.com/moneyphp/money/tree/v4.8.0" }, - "time": "2025-04-03T08:26:36+00:00" + "time": "2025-10-23T07:55:09+00:00" }, { "name": "monolog/monolog", - "version": "3.9.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { @@ -2300,7 +2734,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.8", "phpstan/phpstan": "^2", @@ -2360,7 +2794,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -2372,33 +2806,70 @@ "type": "tidelift" } ], - "time": "2025-03-24T10:02:05+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { - "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", + "name": "nesbot/carbon", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { - "php": "^8" + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" }, + "bin": [ + "bin/carbon" + ], "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2407,65 +2878,72 @@ ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" }, { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" } ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" + "date", + "datetime", + "time" ], "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" }, - "time": "2024-05-08T12:36:18+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-01-08T20:10:23+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "paragonie/constant_time_encoding", + "version": "v3.1.3", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { - "php": ">= 7" + "php": "^8" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -2474,22 +2952,37 @@ { "name": "Paragon Initiative Enterprises", "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" ], "support": { "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2020-10-15T08:29:30+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "phenx/php-font-lib", @@ -2636,16 +3129,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { @@ -2655,7 +3148,7 @@ "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -2694,22 +3187,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -2752,29 +3245,138 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "name": "phpoffice/phpspreadsheet", + "version": "5.4.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "48f2fe37d64c2dece0ef71fb2ac55497566782af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/48f2fe37d64c2dece0ef71fb2ac55497566782af", + "reference": "48f2fe37d64c2dece0ef71fb2ac55497566782af", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.1", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0 || ^3.0", + "ext-intl": "*", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.5", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1 || ^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0 || ^2.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions, required for NumberFormat Wizard and StringHelper::setLocale()", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + }, + { + "name": "Owen Leibman" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.4.0" + }, + "time": "2026-01-11T04:52:00+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", @@ -2799,9 +3401,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "pixelandtonic/imagine", @@ -3763,40 +4365,28 @@ }, { "name": "spomky-labs/cbor-php", - "version": "3.1.0", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4" + "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", - "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/2a5fb86aacfe1004611370ead6caa2bfc88435d0", + "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", "ext-mbstring": "*", "php": ">=8.0" }, "require-dev": { - "ekino/phpstan-banned-code": "^1.0", "ext-json": "*", - "infection/infection": "^0.29", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-beberlei-assert": "^1.0", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^10.1|^11.0", - "qossmic/deptrac": "^2.0", - "rector/rector": "^1.0", "roave/security-advisories": "dev-latest", - "symfony/var-dumper": "^6.0|^7.0", - "symplify/easy-coding-standard": "^12.0" + "symfony/error-handler": "^6.4|^7.1|^8.0", + "symfony/var-dumper": "^6.4|^7.1|^8.0" }, "suggest": { "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", @@ -3830,7 +4420,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.1.0" + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.2" }, "funding": [ { @@ -3842,24 +4432,24 @@ "type": "patreon" } ], - "time": "2024-07-18T08:37:03+00:00" + "time": "2025-11-13T13:00:34+00:00" }, { "name": "spomky-labs/pki-framework", - "version": "1.2.3", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31" + "reference": "f0e9a548df4e3942886adc9b7830581a46334631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/5ff1dcc21e961b60149a80e77f744fc047800b31", - "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/f0e9a548df4e3942886adc9b7830581a46334631", + "reference": "f0e9a548df4e3942886adc9b7830581a46334631", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13", + "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14", "ext-mbstring": "*", "php": ">=8.1" }, @@ -3867,7 +4457,7 @@ "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", "ext-gmp": "*", "ext-openssl": "*", - "infection/infection": "^0.28|^0.29", + "infection/infection": "^0.28|^0.29|^0.31", "php-parallel-lint/php-parallel-lint": "^1.3", "phpstan/extension-installer": "^1.3|^2.0", "phpstan/phpstan": "^1.8|^2.0", @@ -3877,8 +4467,8 @@ "phpunit/phpunit": "^10.1|^11.0|^12.0", "rector/rector": "^1.0|^2.0", "roave/security-advisories": "dev-latest", - "symfony/string": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", "symplify/easy-coding-standard": "^12.0" }, "suggest": { @@ -3939,7 +4529,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.3" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.1" }, "funding": [ { @@ -3951,20 +4541,20 @@ "type": "patreon" } ], - "time": "2025-04-25T15:57:13+00:00" + "time": "2025-12-20T12:57:40+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", "shasum": "" }, "require": { @@ -4000,7 +4590,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" }, "funding": [ { @@ -4011,12 +4601,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-09-25T14:21:43+00:00" + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4087,26 +4681,27 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166" + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/0fabbc3d6a9c473b716a93fc8e7a537adb396166", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/71fd6a82fc357c8b5de22f78b228acfc43dee965", + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965", "shasum": "" }, "require": { "masterminds/html5": "^2.6", "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^6.4|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4134,7 +4729,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.3.0" + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.4" }, "funding": [ { @@ -4145,25 +4740,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-05T10:15:41+00:00" + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", "shasum": "" }, "require": { @@ -4180,13 +4779,14 @@ }, "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": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4214,7 +4814,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.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" }, "funding": [ { @@ -4225,12 +4825,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": "2025-04-22T09:11:45+00:00" + "time": "2026-01-05T11:45:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4310,16 +4914,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789", + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789", "shasum": "" }, "require": { @@ -4356,7 +4960,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v6.4.30" }, "funding": [ { @@ -4367,25 +4971,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-10-25T15:07:50+00:00" + "time": "2025-11-26T14:43:45+00:00" }, { "name": "symfony/http-client", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9" + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/57e4fb86314015a695a750ace358d07a7e37b8a9", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/84bb634857a893cc146cceb467e31b3f02c5fe9f", + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f", "shasum": "" }, "require": { @@ -4393,10 +5001,12 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -4409,18 +5019,18 @@ "require-dev": { "amphp/http-client": "^4.2.1|^5.0", "amphp/http-tunnel": "^1.0|^2.0", - "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", "symfony/amphp-http-client-meta": "^1.0|^2.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4451,7 +5061,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.3.0" + "source": "https://github.com/symfony/http-client/tree/v7.4.5" }, "funding": [ { @@ -4462,12 +5072,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": "2025-05-02T08:23:16+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/http-client-contracts", @@ -4549,16 +5163,16 @@ }, { "name": "symfony/mailer", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", "shasum": "" }, "require": { @@ -4566,8 +5180,8 @@ "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -4578,10 +5192,10 @@ "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4609,7 +5223,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.0" + "source": "https://github.com/symfony/mailer/tree/v7.4.4" }, "funding": [ { @@ -4620,48 +5234,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-04-04T09:51:09+00:00" + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/mime", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", + "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", "symfony/mailer": "<6.4", "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "phpdocumentor/reflection-docblock": "^5.2", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" }, "type": "library", "autoload": { @@ -4693,7 +5312,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.0" + "source": "https://github.com/symfony/mime/tree/v7.4.5" }, "funding": [ { @@ -4704,16 +5323,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": "2025-02-19T08:51:26+00:00" + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4772,7 +5395,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -4784,83 +5407,7 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/5f3b930437ae03ae5dff61269024d8ea1b3774aa", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/nicolas-grekas", "type": "github" }, { @@ -4868,20 +5415,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T14:58:18+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -4930,7 +5477,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -4941,16 +5488,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-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -5013,7 +5564,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -5024,6 +5575,10 @@ "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" @@ -5033,7 +5588,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5094,7 +5649,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -5105,6 +5660,10 @@ "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" @@ -5114,7 +5673,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -5175,7 +5734,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -5186,6 +5745,10 @@ "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" @@ -5194,34 +5757,49 @@ "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "name": "symfony/polyfill-php80", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { "php": ">=7.2" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { "url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -5231,7 +5809,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5240,7 +5818,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -5251,25 +5829,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-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.32.0", + "name": "symfony/polyfill-php83", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -5287,7 +5869,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -5307,7 +5889,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5316,7 +5898,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { @@ -5327,25 +5909,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-09T11:45:10+00:00" + "time": "2025-07-08T02:45:35+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "000df7860439609837bbe28670b0be15783b7fbf" + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf", - "reference": "000df7860439609837bbe28670b0be15783b7fbf", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { @@ -5392,7 +5978,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -5403,16 +5989,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": "2025-02-20T12:04:08+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -5471,7 +6061,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" }, "funding": [ { @@ -5482,6 +6072,10 @@ "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" @@ -5491,16 +6085,16 @@ }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "608476f4604102976d687c483ac63a79ba18cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", "shasum": "" }, "require": { @@ -5532,7 +6126,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.4.5" }, "funding": [ { @@ -5543,33 +6137,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/property-access", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b" + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/3bcf43665d6aff90547b005348e1e351f4e2174b", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b", + "url": "https://api.github.com/repos/symfony/property-access/zipball/fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/property-info": "^6.4|^7.0" + "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" }, "type": "library", "autoload": { @@ -5608,7 +6207,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.3.0" + "source": "https://github.com/symfony/property-access/tree/v7.4.4" }, "funding": [ { @@ -5619,35 +6218,39 @@ "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-05-10T11:59:09+00:00" + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/property-info", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "200d230d8553610ada73ac557501dc4609aad31f" + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/200d230d8553610ada73ac557501dc4609aad31f", - "reference": "200d230d8553610ada73ac557501dc4609aad31f", + "url": "https://api.github.com/repos/symfony/property-info/zipball/1c9d326bd69602561e2ea467a16c09b5972eee21", + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0", - "symfony/type-info": "~7.1.9|^7.2.2" + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/type-info": "~7.3.10|^7.4.4|^8.0.4" }, "conflict": { - "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/reflection-docblock": "<5.2|>=6", "phpdocumentor/type-resolver": "<1.5.1", "symfony/cache": "<6.4", "symfony/dependency-injection": "<6.4", @@ -5656,9 +6259,9 @@ "require-dev": { "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5694,7 +6297,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.3.0" + "source": "https://github.com/symfony/property-info/tree/v7.4.5" }, "funding": [ { @@ -5705,25 +6308,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-04-04T13:12:05+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.22", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "b836df93e9ea07d1d3ada58a679ef205d54b64d1" + "reference": "b53a060656bd28060c9fa28e2cab151348fd49b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/b836df93e9ea07d1d3ada58a679ef205d54b64d1", - "reference": "b836df93e9ea07d1d3ada58a679ef205d54b64d1", + "url": "https://api.github.com/repos/symfony/serializer/zipball/b53a060656bd28060c9fa28e2cab151348fd49b5", + "reference": "b53a060656bd28060c9fa28e2cab151348fd49b5", "shasum": "" }, "require": { @@ -5792,7 +6399,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.22" + "source": "https://github.com/symfony/serializer/tree/v6.4.33" }, "funding": [ { @@ -5803,25 +6410,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-05-12T08:02:50+00:00" + "time": "2026-01-26T08:32:52+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -5875,7 +6486,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -5886,44 +6497,47 @@ "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-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.3.0", + "version": "v8.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + "reference": "758b372d6882506821ed666032e43020c4f57194" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194", + "reference": "758b372d6882506821ed666032e43020c4f57194", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5962,7 +6576,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" + "source": "https://github.com/symfony/string/tree/v8.0.4" }, "funding": [ { @@ -5973,32 +6587,216 @@ "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-04-20T20:19:01+00:00" + "time": "2026-01-12T12:37:40+00:00" }, { - "name": "symfony/type-info", - "version": "v7.3.0", + "name": "symfony/translation", + "version": "v6.4.32", "source": { "type": "git", - "url": "https://github.com/symfony/type-info.git", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786" + "url": "https://github.com/symfony/translation.git", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/bc9af22e25796d98078f69c0749ab3a9d3454786", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786", + "url": "https://api.github.com/repos/symfony/translation/zipball/d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T19:15:33+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/type-info", + "version": "v8.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "106a2d3bbf0d4576b2f70e6ca866fa420956ed0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/106a2d3bbf0d4576b2f70e6ca866fa420956ed0d", + "reference": "106a2d3bbf0d4576b2f70e6ca866fa420956ed0d", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "psr/container": "^1.1|^2.0" + }, "conflict": { "phpstan/phpdoc-parser": "<1.30" }, @@ -6041,7 +6839,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.3.0" + "source": "https://github.com/symfony/type-info/tree/v8.0.4" }, "funding": [ { @@ -6052,25 +6850,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-30T12:17:06+00:00" + "time": "2026-01-09T12:15:10+00:00" }, { "name": "symfony/uid", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", + "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", "shasum": "" }, "require": { @@ -6078,7 +6880,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6115,7 +6917,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" + "source": "https://github.com/symfony/uid/tree/v7.4.4" }, "funding": [ { @@ -6126,43 +6928,45 @@ "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-05-24T14:28:13+00:00" + "time": "2026-01-03T23:30:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.21", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5" + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", - "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -6200,7 +7004,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.21" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.4" }, "funding": [ { @@ -6211,37 +7015,41 @@ "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-04-09T07:34:50+00:00" + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.21", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e" + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -6272,7 +7080,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.21" + "source": "https://github.com/symfony/yaml/tree/v7.4.1" }, "funding": [ { @@ -6283,12 +7091,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": "2025-04-04T09:48:44+00:00" + "time": "2025-12-04T18:11:45+00:00" }, { "name": "tecnickcom/tcpdf", @@ -6347,590 +7159,99 @@ "datamatrix", "pdf", "pdf417", - "qrcode" - ], - "support": { - "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ", - "type": "custom" - } - ], - "time": "2025-05-27T18:02:28+00:00" - }, - { - "name": "theiconic/name-parser", - "version": "v1.2.11", - "source": { - "type": "git", - "url": "https://github.com/theiconic/name-parser.git", - "reference": "9a54a713bf5b2e7fd990828147d42de16bf8a253" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theiconic/name-parser/zipball/9a54a713bf5b2e7fd990828147d42de16bf8a253", - "reference": "9a54a713bf5b2e7fd990828147d42de16bf8a253", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "php-mock/php-mock-phpunit": "^2.1", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "TheIconic\\NameParser\\": [ - "src/", - "tests/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "The Iconic", - "email": "engineering@theiconic.com.au" - } - ], - "description": "PHP library for parsing a string containing a full name into its parts", - "support": { - "issues": "https://github.com/theiconic/name-parser/issues", - "source": "https://github.com/theiconic/name-parser/tree/v1.2.11" - }, - "time": "2019-11-14T14:08:48+00:00" - }, - { - "name": "twig/twig", - "version": "v3.15.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02", - "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php81": "^1.29" - }, - "require-dev": { - "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Resources/core.php", - "src/Resources/debug.php", - "src/Resources/escaper.php", - "src/Resources/string_loader.php" - ], - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.15.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2024-11-17T15:59:19+00:00" - }, - { - "name": "voku/anti-xss", - "version": "4.1.42", - "source": { - "type": "git", - "url": "https://github.com/voku/anti-xss.git", - "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/anti-xss/zipball/bca1f8607e55a3c5077483615cd93bd8f11bd675", - "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "voku/portable-utf8": "~6.0.2" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "voku\\helper\\": "src/voku/helper/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "EllisLab Dev Team", - "homepage": "http://ellislab.com/" - }, - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "anti xss-library", - "homepage": "https://github.com/voku/anti-xss", - "keywords": [ - "anti-xss", - "clean", - "security", - "xss" - ], - "support": { - "issues": "https://github.com/voku/anti-xss/issues", - "source": "https://github.com/voku/anti-xss/tree/4.1.42" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/anti-xss", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/anti-xss", - "type": "tidelift" - } - ], - "time": "2023-07-03T14:40:46+00:00" - }, - { - "name": "voku/arrayy", - "version": "7.9.6", - "source": { - "type": "git", - "url": "https://github.com/voku/Arrayy.git", - "reference": "0e20b8c6eef7fc46694a2906e0eae2f9fc11cade" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/Arrayy/zipball/0e20b8c6eef7fc46694a2906e0eae2f9fc11cade", - "reference": "0e20b8c6eef7fc46694a2906e0eae2f9fc11cade", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=7.0.0", - "phpdocumentor/reflection-docblock": "~4.3 || ~5.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Create.php" - ], - "psr-4": { - "Arrayy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/", - "role": "Maintainer" - } - ], - "description": "Array manipulation library for PHP, called Arrayy!", - "keywords": [ - "Arrayy", - "array", - "helpers", - "manipulation", - "methods", - "utility", - "utils" - ], - "support": { - "docs": "https://voku.github.io/Arrayy/", - "issues": "https://github.com/voku/Arrayy/issues", - "source": "https://github.com/voku/Arrayy" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/arrayy", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/arrayy", - "type": "tidelift" - } - ], - "time": "2022-12-27T12:58:32+00:00" - }, - { - "name": "voku/email-check", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/voku/email-check.git", - "reference": "6ea842920bbef6758b8c1e619fd1710e7a1a2cac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/email-check/zipball/6ea842920bbef6758b8c1e619fd1710e7a1a2cac", - "reference": "6ea842920bbef6758b8c1e619fd1710e7a1a2cac", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "symfony/polyfill-intl-idn": "~1.10" - }, - "require-dev": { - "fzaninotto/faker": "~1.7", - "phpunit/phpunit": "~6.0 || ~7.0" - }, - "suggest": { - "ext-intl": "Use Intl for best performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\helper\\": "src/voku/helper/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "email-check (syntax, dns, trash, ...) library", - "homepage": "https://github.com/voku/email-check", - "keywords": [ - "check-email", - "email", - "mail", - "mail-check", - "validate-email", - "validate-email-address", - "validate-mail" - ], - "support": { - "issues": "https://github.com/voku/email-check/issues", - "source": "https://github.com/voku/email-check/tree/3.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/email-check", - "type": "tidelift" - } - ], - "time": "2021-01-27T14:14:33+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, + "qrcode" + ], + "support": { + "issues": "https://github.com/tecnickcom/TCPDF/issues", + "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0" + }, + "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" + "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ", + "type": "custom" } ], - "time": "2024-11-21T01:49:47+00:00" + "time": "2025-05-27T18:02:28+00:00" }, { - "name": "voku/portable-utf8", - "version": "6.0.13", + "name": "thamtech/yii2-ratelimiter-advanced", + "version": "0.5", "source": { "type": "git", - "url": "https://github.com/voku/portable-utf8.git", - "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f" + "url": "https://github.com/thamtech/yii2-ratelimiter-advanced.git", + "reference": "2fde10eaa1ec67e689d06babfc9c68d144d35433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-utf8/zipball/b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", - "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", + "url": "https://api.github.com/repos/thamtech/yii2-ratelimiter-advanced/zipball/2fde10eaa1ec67e689d06babfc9c68d144d35433", + "reference": "2fde10eaa1ec67e689d06babfc9c68d144d35433", "shasum": "" }, "require": { - "php": ">=7.0.0", - "symfony/polyfill-iconv": "~1.0", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.0", - "voku/portable-ascii": "~2.0.0" + "php": ">=5.6.0", + "yiisoft/yii2": ">=2.0.14 <2.1" }, "require-dev": { - "phpstan/phpstan": "1.9.*@dev", - "phpstan/phpstan-strict-rules": "1.4.*@dev", - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0", - "thecodingmachine/phpstan-strict-rules": "1.0.*@dev", - "voku/phpstan-rules": "3.1.*@dev" - }, - "suggest": { - "ext-ctype": "Use Ctype for e.g. hexadecimal digit detection", - "ext-fileinfo": "Use Fileinfo for better binary file detection", - "ext-iconv": "Use iconv for best performance", - "ext-intl": "Use Intl for best performance", - "ext-json": "Use JSON for string detection", - "ext-mbstring": "Use Mbstring for best performance" + "codeception/codeception": "2.0.*", + "codeception/specify": "*", + "codeception/verify": "*", + "flow/jsonpath": "^0.3", + "yiisoft/yii2-codeception": "*", + "yiisoft/yii2-debug": "*", + "yiisoft/yii2-faker": "*" }, - "type": "library", + "type": "yii2-extension", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "voku\\": "src/voku/" + "thamtech\\ratelimiter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "(Apache-2.0 or GPL-2.0)" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Hamid Sarfraz", - "homepage": "http://pageconfig.com/" - }, - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "name": "Tyler Ham", + "email": "tyler@thamtech.com" } ], - "description": "Portable UTF-8 library - performance optimized (unicode) string functions for php.", - "homepage": "https://github.com/voku/portable-utf8", - "keywords": [ - "UTF", - "clean", - "php", - "unicode", - "utf-8", - "utf8" - ], + "description": "An advanced request rate limiter", "support": { - "issues": "https://github.com/voku/portable-utf8/issues", - "source": "https://github.com/voku/portable-utf8/tree/6.0.13" + "issues": "https://github.com/thamtech/yii2-ratelimiter-advanced/issues", + "source": "https://github.com/thamtech/yii2-ratelimiter-advanced/tree/master" }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-utf8", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-utf8", - "type": "tidelift" - } - ], - "time": "2023-03-08T08:35:38+00:00" + "time": "2020-08-05T04:29:29+00:00" }, { - "name": "voku/stop-words", - "version": "2.0.1", + "name": "theiconic/name-parser", + "version": "v1.2.11", "source": { "type": "git", - "url": "https://github.com/voku/stop-words.git", - "reference": "8e63c0af20f800b1600783764e0ce19e53969f71" + "url": "https://github.com/theiconic/name-parser.git", + "reference": "9a54a713bf5b2e7fd990828147d42de16bf8a253" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/stop-words/zipball/8e63c0af20f800b1600783764e0ce19e53969f71", - "reference": "8e63c0af20f800b1600783764e0ce19e53969f71", + "url": "https://api.github.com/repos/theiconic/name-parser/zipball/9a54a713bf5b2e7fd990828147d42de16bf8a253", + "reference": "9a54a713bf5b2e7fd990828147d42de16bf8a253", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~6.0" + "php-coveralls/php-coveralls": "^2.1", + "php-mock/php-mock-phpunit": "^2.1", + "phpunit/phpunit": "^7.0" }, "type": "library", "autoload": { "psr-4": { - "voku\\": "src/voku/" + "TheIconic\\NameParser\\": [ + "src/", + "tests/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -6939,177 +7260,145 @@ ], "authors": [ { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "name": "The Iconic", + "email": "engineering@theiconic.com.au" } ], - "description": "Stop-Words via PHP", - "keywords": [ - "stop words", - "stop-words" - ], + "description": "PHP library for parsing a string containing a full name into its parts", "support": { - "issues": "https://github.com/voku/stop-words/issues", - "source": "https://github.com/voku/stop-words/tree/master" + "issues": "https://github.com/theiconic/name-parser/issues", + "source": "https://github.com/theiconic/name-parser/tree/v1.2.11" }, - "time": "2018-11-23T01:37:27+00:00" + "time": "2019-11-14T14:08:48+00:00" }, { - "name": "voku/stringy", - "version": "6.5.3", + "name": "twig/twig", + "version": "v3.21.1", "source": { "type": "git", - "url": "https://github.com/voku/Stringy.git", - "reference": "c453c88fbff298f042c836ef44306f8703b2d537" + "url": "https://github.com/twigphp/Twig.git", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/Stringy/zipball/c453c88fbff298f042c836ef44306f8703b2d537", - "reference": "c453c88fbff298f042c836ef44306f8703b2d537", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", "shasum": "" }, "require": { - "defuse/php-encryption": "~2.0", - "ext-json": "*", - "php": ">=7.0.0", - "voku/anti-xss": "~4.1", - "voku/arrayy": "~7.8", - "voku/email-check": "~3.1", - "voku/portable-ascii": "~2.0", - "voku/portable-utf8": "~6.0", - "voku/urlify": "~5.0" - }, - "replace": { - "danielstjules/stringy": "~3.0" + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, "type": "library", "autoload": { "files": [ - "src/Create.php" + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" ], "psr-4": { - "Stringy\\": "src/" + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Daniel St. Jules", - "email": "danielst.jules@gmail.com", - "homepage": "http://www.danielstjules.com", - "role": "Maintainer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" }, { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/", - "role": "Fork-Maintainer" + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" } ], - "description": "A string manipulation library with multibyte support", - "homepage": "https://github.com/danielstjules/Stringy", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", "keywords": [ - "UTF", - "helpers", - "manipulation", - "methods", - "multibyte", - "string", - "utf-8", - "utility", - "utils" + "templating" ], "support": { - "issues": "https://github.com/voku/Stringy/issues", - "source": "https://github.com/voku/Stringy" + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" }, "funding": [ { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/stringy", + "url": "https://tidelift.com/funding/github/packagist/twig/twig", "type": "tidelift" } ], - "time": "2022-03-28T14:52:20+00:00" + "time": "2025-05-03T07:21:55+00:00" }, { - "name": "voku/urlify", - "version": "5.0.7", + "name": "voku/portable-ascii", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/voku/urlify.git", - "reference": "014b2074407b5db5968f836c27d8731934b330e4" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/urlify/zipball/014b2074407b5db5968f836c27d8731934b330e4", - "reference": "014b2074407b5db5968f836c27d8731934b330e4", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { - "php": ">=7.0.0", - "voku/portable-ascii": "~2.0", - "voku/portable-utf8": "~6.0", - "voku/stop-words": "~2.0" + "php": ">=7.0.0" }, "require-dev": { "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, "type": "library", "autoload": { "psr-4": { - "voku\\helper\\": "src/voku/helper/" + "voku\\": "src/voku/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ - { - "name": "Johnny Broadway", - "email": "johnny@johnnybroadway.com", - "homepage": "http://www.johnnybroadway.com/" - }, { "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], - "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.", - "homepage": "https://github.com/voku/urlify", + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", "keywords": [ - "encode", - "iconv", - "link", - "slug", - "translit", - "transliterate", - "transliteration", - "url", - "urlify" + "ascii", + "clean", + "php" ], "support": { - "issues": "https://github.com/voku/urlify/issues", - "source": "https://github.com/voku/urlify/tree/5.0.7" + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -7120,56 +7409,49 @@ "url": "https://github.com/voku", "type": "github" }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, { "url": "https://www.patreon.com/voku", "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/voku/urlify", + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", "type": "tidelift" } ], - "time": "2022-01-24T19:08:46+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "web-auth/cose-lib", - "version": "4.4.0", + "version": "4.5.0", "source": { "type": "git", "url": "https://github.com/web-auth/cose-lib.git", - "reference": "2166016e48e0214f4f63320a7758a9386d14c92a" + "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/2166016e48e0214f4f63320a7758a9386d14c92a", - "reference": "2166016e48e0214f4f63320a7758a9386d14c92a", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5adac6fe126994a3ee17ed9950efb4947ab132a9", + "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", "ext-json": "*", "ext-openssl": "*", "php": ">=8.1", "spomky-labs/pki-framework": "^1.0" }, "require-dev": { - "ekino/phpstan-banned-code": "^1.0", - "infection/infection": "^0.29", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.3", - "phpstan/phpstan": "^1.7", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "^10.1|^11.0", - "qossmic/deptrac": "^2.0", - "rector/rector": "^1.0", - "symfony/phpunit-bridge": "^6.4|^7.0", - "symplify/easy-coding-standard": "^12.0" + "spomky-labs/cbor-php": "^3.2.2" }, "suggest": { "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", - "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension" + "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension", + "spomky-labs/cbor-php": "For COSE Signature support" }, "type": "library", "autoload": { @@ -7199,7 +7481,7 @@ ], "support": { "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.4.0" + "source": "https://github.com/web-auth/cose-lib/tree/4.5.0" }, "funding": [ { @@ -7211,7 +7493,7 @@ "type": "patreon" } ], - "time": "2024-07-18T08:47:32+00:00" + "time": "2026-01-03T14:43:18+00:00" }, { "name": "web-auth/webauthn-lib", @@ -7305,33 +7587,33 @@ }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", "shasum": "" }, "require": { "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -7347,6 +7629,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -7357,9 +7643,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/2.1.2" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-01-13T14:02:24+00:00" }, { "name": "webonyx/graphql-php", @@ -7428,29 +7714,29 @@ }, { "name": "yiisoft/yii2", - "version": "2.0.52", + "version": "2.0.54", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "540e7387d934c52e415614aa081fb38d04c72d9a" + "reference": "99daebf2de0b031d129706a5db6ce0802c70bac9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/540e7387d934c52e415614aa081fb38d04c72d9a", - "reference": "540e7387d934c52e415614aa081fb38d04c72d9a", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/99daebf2de0b031d129706a5db6ce0802c70bac9", + "reference": "99daebf2de0b031d129706a5db6ce0802c70bac9", "shasum": "" }, "require": { "bower-asset/inputmask": "^5.0.8 ", "bower-asset/jquery": "3.7.*@stable | 3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", - "bower-asset/punycode": "^1.4", + "bower-asset/punycode": "^2.2", "bower-asset/yii2-pjax": "~2.0.1", "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", "ext-ctype": "*", "ext-mbstring": "*", "ezyang/htmlpurifier": "^4.17", "lib-pcre": "*", - "php": ">=7.3.0", + "php": ">=7.4.0", "yiisoft/yii2-composer": "~2.0.4" }, "bin": [ @@ -7545,7 +7831,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T20:02:28+00:00" + "time": "2026-01-09T22:24:11+00:00" }, { "name": "yiisoft/yii2-composer", @@ -7625,16 +7911,16 @@ }, { "name": "yiisoft/yii2-debug", - "version": "2.1.26", + "version": "2.1.27", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "e4b28a1d295fc977d8399db544336dd5b2764397" + "reference": "44e158914911ef81cd7111fd6d46b918f65fae7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/e4b28a1d295fc977d8399db544336dd5b2764397", - "reference": "e4b28a1d295fc977d8399db544336dd5b2764397", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/44e158914911ef81cd7111fd6d46b918f65fae7c", + "reference": "44e158914911ef81cd7111fd6d46b918f65fae7c", "shasum": "" }, "require": { @@ -7712,20 +7998,20 @@ "type": "tidelift" } ], - "time": "2025-02-13T21:27:29+00:00" + "time": "2025-06-08T13:32:11+00:00" }, { "name": "yiisoft/yii2-queue", - "version": "2.3.7", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-queue.git", - "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b" + "reference": "e0f935e5b868d53347acfb14ec19faaf16085005" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/dbc9d4a7b2a6995cd19c3e334227482ef55e559b", - "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b", + "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/e0f935e5b868d53347acfb14ec19faaf16085005", + "reference": "e0f935e5b868d53347acfb14ec19faaf16085005", "shasum": "" }, "require": { @@ -7737,14 +8023,14 @@ "aws/aws-sdk-php": ">=2.4", "cweagans/composer-patches": "^1.7", "enqueue/amqp-lib": "^0.8||^0.9.10||^0.10.0", - "enqueue/stomp": "^0.8.39||^0.10.0", + "enqueue/stomp": "^0.8.39||0.10.19", "opis/closure": "*", "pda/pheanstalk": "~3.2.1", "php-amqplib/php-amqplib": "^2.8.0||^3.0.0", "phpunit/phpunit": "4.8.34", "yiisoft/yii2-debug": "~2.1.0", "yiisoft/yii2-gii": "~2.2.0", - "yiisoft/yii2-redis": "~2.0.0" + "yiisoft/yii2-redis": "2.0.19" }, "suggest": { "aws/aws-sdk-php": "Need for aws SQS.", @@ -7797,7 +8083,7 @@ "email": "zhuravljov@gmail.com" } ], - "description": "Yii2 Queue Extension which supported DB, Redis, RabbitMQ, Beanstalk, SQS and Gearman", + "description": "Yii2 Queue Extension which supports queues based on DB, Redis, RabbitMQ, Beanstalk, SQS, and Gearman", "keywords": [ "async", "beanstalk", @@ -7829,7 +8115,7 @@ "type": "tidelift" } ], - "time": "2024-04-29T09:40:52+00:00" + "time": "2026-01-08T07:52:05+00:00" }, { "name": "yiisoft/yii2-symfonymailer", @@ -9774,16 +10060,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -9802,7 +10088,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -9826,9 +10112,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "nystudio107/craft-code-editor", @@ -11901,16 +12187,16 @@ }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { @@ -11918,7 +12204,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" + "symfony/string": "^7.2|^8.0" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -11932,16 +12218,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11975,7 +12261,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.4.4" }, "funding": [ { @@ -11986,12 +12272,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": "2025-05-24T10:34:04+00:00" + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/finder", @@ -12057,86 +12347,6 @@ ], "time": "2024-12-30T19:00:26+00:00" }, - { - "name": "symfony/polyfill-php80", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "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\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/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": "2025-01-02T08:10:11+00:00" - }, { "name": "symplify/easy-coding-standard", "version": "10.3.3", diff --git a/src/elements/Product.php b/src/elements/Product.php index c53ec0d2a2..e91dc05b84 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -404,7 +404,10 @@ protected static function defineActions(string $source = null): array if ($canCreate) { // Duplicate - $actions[] = Duplicate::class; + $actions[] = [ + 'type' => Duplicate::class, + 'asDrafts' => true, + ]; } if ($canDelete) { @@ -425,6 +428,14 @@ protected static function defineActions(string $source = null): array $productType->isStructure && $canCreate ) { + if ($productType->maxLevels != 1) { + $actions[] = [ + 'type' => Duplicate::class, + 'asDrafts' => true, + 'deep' => true, + ]; + } + $newProductUrl = 'commerce/products/' . $productType->handle . '/new'; if (Craft::$app->getIsMultiSite()) { @@ -1840,11 +1851,6 @@ function() { [ ['variants'], function() { - // Only validate SKUs on canonical saves (not duplicates/propagations) - if (!$this->getIsCanonical() || $this->duplicateOf || $this->propagating) { - return; - } - foreach ($this->getVariants(true) as $variant) { if (!$variant->sku || PurchasableHelper::isTempSku($variant->sku)) { $this->addError('variants', Craft::t('commerce', 'All variants must have a SKU.')); diff --git a/src/translations/en/commerce.php b/src/translations/en/commerce.php index cb0ec990d8..6dcad33519 100644 --- a/src/translations/en/commerce.php +++ b/src/translations/en/commerce.php @@ -54,6 +54,7 @@ 'All active subscriptions' => 'All active subscriptions', 'All customers' => 'All customers', 'All products' => 'All products', + 'All variants must have a SKU.' => 'All variants must have a SKU.', 'All' => 'All', 'Allow Checkout Without Payment' => 'Allow Checkout Without Payment', 'Allow Empty Cart On Checkout' => 'Allow Empty Cart On Checkout', From 4cef42e481853d5505a30bd3a7a02542930106bb Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 21:06:35 +0800 Subject: [PATCH 16/44] update deps --- composer.lock | 755 ++++++++++++++++++++++++++++---------------------- 1 file changed, 423 insertions(+), 332 deletions(-) diff --git a/composer.lock b/composer.lock index b77768bdd8..31e822c456 100644 --- a/composer.lock +++ b/composer.lock @@ -2073,34 +2073,34 @@ }, { "name": "lcobucci/clock", - "version": "3.5.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058" + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/a3139d9e97d47826f27e6a17bb63f13621f86058", - "reference": "a3139d9e97d47826f27e6a17bb63f13621f86058", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", "shasum": "" }, "require": { - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.31", - "lcobucci/coding-standard": "^11.2.0", + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^2.0.0", - "phpstan/phpstan-deprecation-rules": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0.0", - "phpstan/phpstan-strict-rules": "^2.0.0", - "phpunit/phpunit": "^12.0.0" + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^11.3.6" }, "type": "library", "autoload": { @@ -2121,7 +2121,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.5.0" + "source": "https://github.com/lcobucci/clock/tree/3.3.1" }, "funding": [ { @@ -2133,7 +2133,7 @@ "type": "patreon" } ], - "time": "2025-10-27T09:03:17+00:00" + "time": "2024-09-24T20:45:14+00:00" }, { "name": "league/uri", @@ -2319,31 +2319,31 @@ }, { "name": "maennchen/zipstream-php", - "version": "3.2.1", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5" + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/682f1098a8fddbaf43edac2306a691c7ad508ec5", - "reference": "682f1098a8fddbaf43edac2306a691c7ad508ec5", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", "shasum": "" }, "require": { "ext-mbstring": "*", "ext-zlib": "*", - "php-64bit": "^8.3" + "php-64bit": "^8.2" }, "require-dev": { "brianium/paratest": "^7.7", "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.86", + "friendsofphp/php-cs-fixer": "^3.16", "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "^12.0", + "phpunit/phpunit": "^11.0", "vimeo/psalm": "^6.0" }, "suggest": { @@ -2385,7 +2385,7 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.1" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" }, "funding": [ { @@ -2393,7 +2393,7 @@ "type": "github" } ], - "time": "2025-12-10T09:58:31+00:00" + "time": "2025-01-27T12:07:53+00:00" }, { "name": "markbaker/complex", @@ -4111,16 +4111,16 @@ }, { "name": "sabberworm/php-css-parser", - "version": "v8.8.0", + "version": "v8.9.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740" + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9", "shasum": "" }, "require": { @@ -4128,7 +4128,8 @@ "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { - "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41" + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41", + "rawr/cross-data-providers": "^2.0.0" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" @@ -4170,9 +4171,9 @@ ], "support": { "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", - "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0" + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0" }, - "time": "2025-03-23T17:59:05+00:00" + "time": "2025-07-11T13:20:48+00:00" }, { "name": "samdark/yii2-psr-log-target", @@ -4293,16 +4294,16 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.3", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", "shasum": "" }, "require": { @@ -4317,7 +4318,7 @@ "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -4353,7 +4354,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" }, "funding": [ { @@ -4361,7 +4362,7 @@ "type": "tidelift" } ], - "time": "2025-02-05T13:22:35+00:00" + "time": "2025-08-05T09:57:14+00:00" }, { "name": "spomky-labs/cbor-php", @@ -6510,34 +6511,35 @@ }, { "name": "symfony/string", - "version": "v8.0.4", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "758b372d6882506821ed666032e43020c4f57194" + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194", - "reference": "758b372d6882506821ed666032e43020c4f57194", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { - "php": ">=8.4", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-intl-grapheme": "^1.33", - "symfony/polyfill-intl-normalizer": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.4|^8.0", - "symfony/http-client": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^7.4|^8.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6576,7 +6578,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.4" + "source": "https://github.com/symfony/string/tree/v7.4.4" }, "funding": [ { @@ -6596,7 +6598,7 @@ "type": "tidelift" } ], - "time": "2026-01-12T12:37:40+00:00" + "time": "2026-01-12T10:54:30+00:00" }, { "name": "symfony/translation", @@ -6781,21 +6783,22 @@ }, { "name": "symfony/type-info", - "version": "v8.0.4", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "106a2d3bbf0d4576b2f70e6ca866fa420956ed0d" + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/106a2d3bbf0d4576b2f70e6ca866fa420956ed0d", - "reference": "106a2d3bbf0d4576b2f70e6ca866fa420956ed0d", + "url": "https://api.github.com/repos/symfony/type-info/zipball/f83c725e72b39b2704b9d6fc85070ad6ac7a5889", + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889", "shasum": "" }, "require": { - "php": ">=8.4", - "psr/container": "^1.1|^2.0" + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "phpstan/phpdoc-parser": "<1.30" @@ -6839,7 +6842,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.0.4" + "source": "https://github.com/symfony/type-info/tree/v7.4.4" }, "funding": [ { @@ -6859,7 +6862,7 @@ "type": "tidelift" } ], - "time": "2026-01-09T12:15:10+00:00" + "time": "2026-01-09T12:14:21+00:00" }, { "name": "symfony/uid", @@ -7104,16 +7107,16 @@ }, { "name": "tecnickcom/tcpdf", - "version": "6.10.0", + "version": "6.10.1", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "ca5b6de294512145db96bcbc94e61696599c391d" + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/ca5b6de294512145db96bcbc94e61696599c391d", - "reference": "ca5b6de294512145db96bcbc94e61696599c391d", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/7a2701251e5d52fc3d508fd71704683eb54f5939", + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939", "shasum": "" }, "require": { @@ -7163,7 +7166,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0" + "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.1" }, "funding": [ { @@ -7171,7 +7174,7 @@ "type": "custom" } ], - "time": "2025-05-27T18:02:28+00:00" + "time": "2025-11-21T10:58:21+00:00" }, { "name": "thamtech/yii2-ratelimiter-advanced", @@ -8206,25 +8209,25 @@ "packages-dev": [ { "name": "behat/gherkin", - "version": "v4.14.0", + "version": "v4.16.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4" + "reference": "e26037937dfd48528746764dd870bc5d0836665f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", - "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/e26037937dfd48528746764dd870bc5d0836665f", + "reference": "e26037937dfd48528746764dd870bc5d0836665f", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "php": "8.1.* || 8.2.* || 8.3.* || 8.4.*" + "php": ">=8.1 <8.6" }, "require-dev": { - "cucumber/gherkin-monorepo": "dev-gherkin-v32.1.1", - "friendsofphp/php-cs-fixer": "^3.65", + "cucumber/gherkin-monorepo": "dev-gherkin-v37.0.0", + "friendsofphp/php-cs-fixer": "^3.77", "mikey179/vfsstream": "^1.6", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^2", @@ -8269,27 +8272,41 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.14.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.16.1" }, - "time": "2025-05-23T15:06:40+00:00" + "funding": [ + { + "url": "https://github.com/acoulton", + "type": "github" + }, + { + "url": "https://github.com/carlos-granados", + "type": "github" + }, + { + "url": "https://github.com/stof", + "type": "github" + } + ], + "time": "2025-12-08T16:12:58+00:00" }, { "name": "codeception/codeception", - "version": "5.3.2", + "version": "5.3.4", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "582112d7a603d575e41638df1e96900b10ae91b8" + "reference": "cb4c200ec0a7fe21964f51872bb403701f53f35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/582112d7a603d575e41638df1e96900b10ae91b8", - "reference": "582112d7a603d575e41638df1e96900b10ae91b8", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/cb4c200ec0a7fe21964f51872bb403701f53f35b", + "reference": "cb4c200ec0a7fe21964f51872bb403701f53f35b", "shasum": "" }, "require": { "behat/gherkin": "^4.12", - "codeception/lib-asserts": "^2.2", + "codeception/lib-asserts": "^2.2 | ^3.0.1", "codeception/stub": "^4.1", "ext-curl": "*", "ext-json": "*", @@ -8302,12 +8319,12 @@ "psy/psysh": "^0.11.2 | ^0.12", "sebastian/comparator": "^4.0.5 | ^5.0 | ^6.0 | ^7.0", "sebastian/diff": "^4.0.3 | ^5.0 | ^6.0 | ^7.0", - "symfony/console": ">=5.4.24 <8.0", - "symfony/css-selector": ">=5.4.24 <8.0", - "symfony/event-dispatcher": ">=5.4.24 <8.0", - "symfony/finder": ">=5.4.24 <8.0", - "symfony/var-dumper": ">=5.4.24 <8.0", - "symfony/yaml": ">=5.4.24 <8.0" + "symfony/console": ">=5.4.24 <9.0", + "symfony/css-selector": ">=5.4.24 <9.0", + "symfony/event-dispatcher": ">=5.4.24 <9.0", + "symfony/finder": ">=5.4.24 <9.0", + "symfony/var-dumper": ">=5.4.24 <9.0", + "symfony/yaml": ">=5.4.24 <9.0" }, "conflict": { "codeception/lib-innerbrowser": "<3.1.3", @@ -8332,10 +8349,10 @@ "jetbrains/phpstorm-attributes": "^1.0", "laravel-zero/phar-updater": "^1.4", "php-webdriver/webdriver": "^1.15", - "stecman/symfony-console-completion": "^0.14", - "symfony/dotenv": ">=5.4.24 <8.0", - "symfony/error-handler": ">=5.4.24 <8.0", - "symfony/process": ">=5.4.24 <8.0", + "stecman/symfony-console-completion": "^0.14 || ^0.15", + "symfony/dotenv": ">=5.4.24 <9.0", + "symfony/error-handler": ">=5.4.24 <9.0", + "symfony/process": ">=5.4.24 <9.0", "vlucas/phpdotenv": "^5.1" }, "suggest": { @@ -8353,7 +8370,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.2.x-dev" + "dev-main": "5.3.x-dev" } }, "autoload": { @@ -8379,7 +8396,7 @@ "homepage": "https://codeception.com" } ], - "description": "BDD-style testing framework", + "description": "All-in-one PHP Testing Framework", "homepage": "https://codeception.com/", "keywords": [ "BDD", @@ -8390,7 +8407,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/5.3.2" + "source": "https://github.com/Codeception/Codeception/tree/5.3.4" }, "funding": [ { @@ -8398,26 +8415,26 @@ "type": "open_collective" } ], - "time": "2025-05-26T07:47:39+00:00" + "time": "2026-01-14T11:55:19+00:00" }, { "name": "codeception/lib-asserts", - "version": "2.2.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "06750a60af3ebc66faab4313981accec1be4eefc" + "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/06750a60af3ebc66faab4313981accec1be4eefc", - "reference": "06750a60af3ebc66faab4313981accec1be4eefc", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/8e161f38a71cdf3dc638c5427df21c0f01f12d13", + "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13", "shasum": "" }, "require": { - "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", "ext-dom": "*", - "php": "^7.4 | ^8.0" + "php": "^8.2 || ^8.3 || ^8.4 || ^8.5", + "phpunit/phpunit": "^11.5 || ^12.0" }, "type": "library", "autoload": { @@ -8450,37 +8467,37 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/2.2.0" + "source": "https://github.com/Codeception/lib-asserts/tree/3.1.0" }, - "time": "2025-03-10T20:41:33+00:00" + "time": "2025-12-22T08:25:07+00:00" }, { "name": "codeception/lib-innerbrowser", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/Codeception/lib-innerbrowser.git", - "reference": "74476dd019ec7900b26b7dca91a42fdcb04e549f" + "reference": "ea25ea6745941781861eb4509d134c97685fc833" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/74476dd019ec7900b26b7dca91a42fdcb04e549f", - "reference": "74476dd019ec7900b26b7dca91a42fdcb04e549f", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/ea25ea6745941781861eb4509d134c97685fc833", + "reference": "ea25ea6745941781861eb4509d134c97685fc833", "shasum": "" }, "require": { "codeception/codeception": "^5.0.8", - "codeception/lib-web": "^1.0.1", + "codeception/lib-web": "^1.0.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-mbstring": "*", "php": "^8.1", "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0 || ^7.0", - "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0 || ^7.0" + "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "codeception/util-universalframework": "^1.0" + "codeception/util-universalframework": "^1.0 || ^2.0" }, "type": "library", "autoload": { @@ -8509,30 +8526,30 @@ ], "support": { "issues": "https://github.com/Codeception/lib-innerbrowser/issues", - "source": "https://github.com/Codeception/lib-innerbrowser/tree/4.0.6" + "source": "https://github.com/Codeception/lib-innerbrowser/tree/4.0.8" }, - "time": "2025-02-14T07:02:48+00:00" + "time": "2025-12-15T13:07:50+00:00" }, { "name": "codeception/lib-web", - "version": "1.0.7", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-web.git", - "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93" + "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-web/zipball/1444ccc9b1d6721f3ced8703c8f4a9041b80df93", - "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/bbec12e789c3b810ec8cb86e5f46b5bfd673c441", + "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441", "shasum": "" }, "require": { "ext-mbstring": "*", "guzzlehttp/psr7": "^2.0", - "php": "^8.1", - "phpunit/phpunit": "^9.5 | ^10.0 | ^11.0 | ^12", - "symfony/css-selector": ">=4.4.24 <8.0" + "php": "^8.2", + "phpunit/phpunit": "^11.5 | ^12", + "symfony/css-selector": ">=4.4.24 <9.0" }, "conflict": { "codeception/codeception": "<5.0.0-alpha3" @@ -8562,29 +8579,29 @@ ], "support": { "issues": "https://github.com/Codeception/lib-web/issues", - "source": "https://github.com/Codeception/lib-web/tree/1.0.7" + "source": "https://github.com/Codeception/lib-web/tree/2.0.1" }, - "time": "2025-02-09T12:05:55+00:00" + "time": "2025-11-27T21:09:09+00:00" }, { "name": "codeception/lib-xml", - "version": "1.0.3", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-xml.git", - "reference": "ba49213e60807e3612513f404a5c93aec63f4c72" + "reference": "758a525ed766ad641cc66cd619d96dbb9e887be2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-xml/zipball/ba49213e60807e3612513f404a5c93aec63f4c72", - "reference": "ba49213e60807e3612513f404a5c93aec63f4c72", + "url": "https://api.github.com/repos/Codeception/lib-xml/zipball/758a525ed766ad641cc66cd619d96dbb9e887be2", + "reference": "758a525ed766ad641cc66cd619d96dbb9e887be2", "shasum": "" }, "require": { - "codeception/lib-web": "^1.0.6", + "codeception/lib-web": "^1.0.6 || ^2", "ext-dom": "*", - "php": "^8.0", - "symfony/css-selector": ">=4.4.24 <8.0" + "php": "^8.2", + "symfony/css-selector": ">=4.4.24 <9.0" }, "conflict": { "codeception/codeception": "<5.0.0-alpha3" @@ -8611,27 +8628,27 @@ ], "support": { "issues": "https://github.com/Codeception/lib-xml/issues", - "source": "https://github.com/Codeception/lib-xml/tree/1.0.3" + "source": "https://github.com/Codeception/lib-xml/tree/1.1.1" }, - "time": "2024-02-06T21:00:41+00:00" + "time": "2025-11-28T08:21:33+00:00" }, { "name": "codeception/module-asserts", - "version": "3.2.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/Codeception/module-asserts.git", - "reference": "eb1f7c980423888f3def5116635754ae4a75bd47" + "reference": "3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/eb1f7c980423888f3def5116635754ae4a75bd47", - "reference": "eb1f7c980423888f3def5116635754ae4a75bd47", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad", + "reference": "3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad", "shasum": "" }, "require": { "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^2.2", + "codeception/lib-asserts": "^3.1", "php": "^8.2" }, "conflict": { @@ -8668,9 +8685,9 @@ ], "support": { "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/3.2.0" + "source": "https://github.com/Codeception/module-asserts/tree/3.3.0" }, - "time": "2025-05-02T02:33:11+00:00" + "time": "2025-12-23T21:16:13+00:00" }, { "name": "codeception/module-datafactory", @@ -8720,16 +8737,16 @@ }, { "name": "codeception/module-phpbrowser", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/Codeception/module-phpbrowser.git", - "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc" + "reference": "460e392c77370f7836012b16e06071eb1607876a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/a972411f60cd00d00d5e5e3b35496ba4a23bcffc", - "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/460e392c77370f7836012b16e06071eb1607876a", + "reference": "460e392c77370f7836012b16e06071eb1607876a", "shasum": "" }, "require": { @@ -8737,8 +8754,8 @@ "codeception/lib-innerbrowser": "*@dev", "ext-json": "*", "guzzlehttp/guzzle": "^7.4", - "php": "^8.0", - "symfony/browser-kit": "^5.4 || ^6.0 || ^7.0" + "php": "^8.1", + "symfony/browser-kit": "^5.4 | ^6.0 | ^7.0" }, "conflict": { "codeception/codeception": "<5.0", @@ -8746,8 +8763,10 @@ }, "require-dev": { "aws/aws-sdk-php": "^3.199", - "codeception/module-rest": "^2.0 || *@dev", - "ext-curl": "*" + "codeception/module-rest": "^2.0 | *@dev", + "ext-curl": "*", + "phpstan/phpstan": "^1.10", + "squizlabs/php_codesniffer": "^3.10" }, "suggest": { "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" @@ -8779,22 +8798,22 @@ ], "support": { "issues": "https://github.com/Codeception/module-phpbrowser/issues", - "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.1" + "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.2" }, - "time": "2023-12-08T19:41:28+00:00" + "time": "2025-09-04T10:45:58+00:00" }, { "name": "codeception/module-rest", - "version": "3.4.1", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/Codeception/module-rest.git", - "reference": "5db3a2e62ce6948d1822709c034a22fa1b1f2309" + "reference": "596817fcb5a603f6f55306f67f9eb84943df8998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-rest/zipball/5db3a2e62ce6948d1822709c034a22fa1b1f2309", - "reference": "5db3a2e62ce6948d1822709c034a22fa1b1f2309", + "url": "https://api.github.com/repos/Codeception/module-rest/zipball/596817fcb5a603f6f55306f67f9eb84943df8998", + "reference": "596817fcb5a603f6f55306f67f9eb84943df8998", "shasum": "" }, "require": { @@ -8803,13 +8822,13 @@ "ext-dom": "*", "ext-json": "*", "justinrainbow/json-schema": "^5.2.9 || ^6", - "php": "^8.1", - "softcreatr/jsonpath": "^0.8 || ^0.9 || ^0.10" + "php": "^8.2", + "softcreatr/jsonpath": "^0.8 || ^0.9 || ^0.10 || ^0.11 || ^1.0" }, "require-dev": { "codeception/lib-innerbrowser": "^3.0 | ^4.0", "codeception/stub": "^4.0", - "codeception/util-universalframework": "^1.0", + "codeception/util-universalframework": "^2.0", "ext-libxml": "*", "ext-simplexml": "*" }, @@ -8839,9 +8858,9 @@ ], "support": { "issues": "https://github.com/Codeception/module-rest/issues", - "source": "https://github.com/Codeception/module-rest/tree/3.4.1" + "source": "https://github.com/Codeception/module-rest/tree/3.4.3" }, - "time": "2025-03-25T23:04:38+00:00" + "time": "2025-12-22T14:13:56+00:00" }, { "name": "codeception/module-yii2", @@ -8906,20 +8925,20 @@ }, { "name": "codeception/stub", - "version": "4.1.4", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "6ce453073a0c220b254dd7f4383645615e4071c3" + "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/6ce453073a0c220b254dd7f4383645615e4071c3", - "reference": "6ce453073a0c220b254dd7f4383645615e4071c3", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/0c573cd5c62a828dadadc41bc56f8434860bb7bb", + "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb", "shasum": "" }, "require": { - "php": "^7.4 | ^8.0", + "php": "^8.1", "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12" }, "conflict": { @@ -8941,22 +8960,22 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/4.1.4" + "source": "https://github.com/Codeception/Stub/tree/4.2.1" }, - "time": "2025-02-14T06:56:33+00:00" + "time": "2025-12-05T13:37:14+00:00" }, { "name": "composer/ca-bundle", - "version": "1.5.7", + "version": "1.5.10", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82" + "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", + "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", "shasum": "" }, "require": { @@ -9003,7 +9022,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.7" + "source": "https://github.com/composer/ca-bundle/tree/1.5.10" }, "funding": [ { @@ -9013,30 +9032,26 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-05-26T15:08:54+00:00" + "time": "2025-12-08T15:06:51+00:00" }, { "name": "craftcms/ckeditor", - "version": "4.9.0", + "version": "4.11.0", "source": { "type": "git", "url": "https://github.com/craftcms/ckeditor.git", - "reference": "df2ea2ec6a689b276507c83c38eb982a0287651a" + "reference": "00289e6ce5f9a7c9595c5a51c2c726585aad5964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/ckeditor/zipball/df2ea2ec6a689b276507c83c38eb982a0287651a", - "reference": "df2ea2ec6a689b276507c83c38eb982a0287651a", + "url": "https://api.github.com/repos/craftcms/ckeditor/zipball/00289e6ce5f9a7c9595c5a51c2c726585aad5964", + "reference": "00289e6ce5f9a7c9595c5a51c2c726585aad5964", "shasum": "" }, "require": { - "craftcms/cms": "^5.6.0", + "craftcms/cms": "^5.6.1", "craftcms/html-field": "^3.4.0", "embed/embed": "^4.4", "nystudio107/craft-code-editor": ">=1.0.8 <=1.0.13 || ^1.0.16", @@ -9084,7 +9099,7 @@ "rss": "https://github.com/craftcms/ckeditor/commits/master.atom", "source": "https://github.com/craftcms/ckeditor" }, - "time": "2025-05-23T15:58:04+00:00" + "time": "2025-11-20T01:01:30+00:00" }, { "name": "craftcms/ecs", @@ -9454,24 +9469,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "phpoption/phpoption": "^1.9.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" }, "type": "library", "autoload": { @@ -9500,7 +9515,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" }, "funding": [ { @@ -9512,30 +9527,30 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2025-12-27T19:43:20+00:00" }, { "name": "justinrainbow/json-schema", - "version": "6.4.1", + "version": "6.6.4", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900" + "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/35d262c94959571e8736db1e5c9bc36ab94ae900", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2eeb75d21cf73211335888e7f5e6fd7440723ec7", + "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7", "shasum": "" }, "require": { "ext-json": "*", - "marc-mabe/php-enum": "^4.0", + "marc-mabe/php-enum": "^4.4", "php": "^7.2 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "1.2.0", + "json-schema/json-schema-test-suite": "^23.2", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -9585,9 +9600,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.1" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.4" }, - "time": "2025-04-04T13:08:07+00:00" + "time": "2025-12-19T15:01:32+00:00" }, { "name": "league/factory-muffin", @@ -9823,16 +9838,16 @@ }, { "name": "marc-mabe/php-enum", - "version": "v4.7.1", + "version": "v4.7.2", "source": { "type": "git", "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed" + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { @@ -9890,9 +9905,9 @@ ], "support": { "issues": "https://github.com/marc-mabe/php-enum/issues", - "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1" + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" }, - "time": "2024-11-28T04:54:44+00:00" + "time": "2025-09-14T11:18:39+00:00" }, { "name": "ml/iri", @@ -10000,16 +10015,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.1", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -10048,7 +10063,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -10056,7 +10071,7 @@ "type": "tidelift" } ], - "time": "2025-04-29T12:36:36+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nikic/php-parser", @@ -10118,16 +10133,16 @@ }, { "name": "nystudio107/craft-code-editor", - "version": "1.0.23", + "version": "1.0.29", "source": { "type": "git", "url": "https://github.com/nystudio107/craft-code-editor.git", - "reference": "0a206d73efa8f8d3bd7294ae68b3d70c696b19c5" + "reference": "5b071512ee2ad2b8004f979f88ff3bf722bbcb4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nystudio107/craft-code-editor/zipball/0a206d73efa8f8d3bd7294ae68b3d70c696b19c5", - "reference": "0a206d73efa8f8d3bd7294ae68b3d70c696b19c5", + "url": "https://api.github.com/repos/nystudio107/craft-code-editor/zipball/5b071512ee2ad2b8004f979f88ff3bf722bbcb4d", + "reference": "5b071512ee2ad2b8004f979f88ff3bf722bbcb4d", "shasum": "" }, "require": { @@ -10182,7 +10197,7 @@ "type": "github" } ], - "time": "2025-05-17T20:38:20+00:00" + "time": "2026-01-30T19:10:22+00:00" }, { "name": "oscarotero/html-parser", @@ -10357,16 +10372,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { @@ -10374,7 +10389,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { @@ -10416,7 +10431,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, "funding": [ { @@ -10428,20 +10443,15 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-12-27T19:41:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.27", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3a6e423c076ab39dfedc307e2ac627ef579db162", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -10486,39 +10496,39 @@ "type": "github" } ], - "time": "2025-05-21T20:51:45+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.9", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", "sebastian/code-unit-reverse-lookup": "^4.0.1", "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", + "sebastian/environment": "^7.2.1", "sebastian/lines-of-code": "^3.0.1", "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.2" + "phpunit/phpunit": "^11.5.46" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10556,40 +10566,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2025-02-25T13:26:39+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -10617,15 +10639,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2024-08-27T05:02:59+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", @@ -10813,16 +10847,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.21", + "version": "11.5.50", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289" + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d565e2cdc21a7db9dc6c399c1fc2083b8010f289", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", "shasum": "" }, "require": { @@ -10832,24 +10866,24 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-code-coverage": "^11.0.12", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", + "sebastian/comparator": "^6.3.3", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", + "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -10894,7 +10928,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.50" }, "funding": [ { @@ -10918,20 +10952,20 @@ "type": "tidelift" } ], - "time": "2025-05-21T12:35:00+00:00" + "time": "2026-01-27T05:59:18+00:00" }, { "name": "psy/psysh", - "version": "v0.12.8", + "version": "v0.12.19", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a4f766e5c5b6773d8399711019bb7d90875a50ee", + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee", "shasum": "" }, "require": { @@ -10939,18 +10973,19 @@ "ext-tokenizer": "*", "nikic/php-parser": "^5.0 || ^4.0", "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -10981,12 +11016,11 @@ "authors": [ { "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "email": "justin@justinhileman.info" } ], "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "homepage": "https://psysh.org", "keywords": [ "REPL", "console", @@ -10995,9 +11029,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.19" }, - "time": "2025-03-16T03:05:19+00:00" + "time": "2026-01-30T17:33:13+00:00" }, { "name": "rector/rector", @@ -11230,16 +11264,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.1", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { @@ -11298,15 +11332,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-03-07T06:57:01+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", @@ -11511,16 +11557,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -11534,7 +11580,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -11577,15 +11623,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -11823,23 +11881,23 @@ }, { "name": "sebastian/recursion-context", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -11875,28 +11933,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -11932,15 +12002,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2025-03-18T13:35:50+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -12119,27 +12201,28 @@ }, { "name": "symfony/browser-kit", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "5384291845e74fd7d54f3d925c4a86ce12336593" + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/5384291845e74fd7d54f3d925c4a86ce12336593", - "reference": "5384291845e74fd7d54f3d925c4a86ce12336593", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bed167eadaaba641f51fc842c9227aa5e251309e", + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/dom-crawler": "^6.4|^7.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/dom-crawler": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/css-selector": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -12167,7 +12250,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.3.0" + "source": "https://github.com/symfony/browser-kit/tree/v7.4.4" }, "funding": [ { @@ -12178,12 +12261,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": "2025-03-05T10:15:41+00:00" + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/console", @@ -12285,23 +12372,23 @@ }, { "name": "symfony/finder", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -12329,7 +12416,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.0" + "source": "https://github.com/symfony/finder/tree/v7.4.5" }, "funding": [ { @@ -12340,12 +12427,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-12-30T19:00:26+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symplify/easy-coding-standard", @@ -12404,16 +12495,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -12442,7 +12533,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -12450,30 +12541,30 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.2", + "version": "v5.6.3", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" + "reference": "955e7815d677a3eaa7075231212f2110983adecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", + "graham-campbell/result-type": "^1.1.4", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", @@ -12522,7 +12613,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" }, "funding": [ { @@ -12534,7 +12625,7 @@ "type": "tidelift" } ], - "time": "2025-04-30T23:37:27+00:00" + "time": "2025-12-27T19:49:13+00:00" } ], "aliases": [], @@ -12550,5 +12641,5 @@ "php": "^8.2" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } From 0c2c644db11aeecae09a26158a89dddf1f2ea9ec Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 21:08:25 +0800 Subject: [PATCH 17/44] fix phpstan issues --- src/base/Purchasable.php | 4 +++- src/controllers/InventoryLocationsController.php | 2 +- src/services/Payments.php | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/base/Purchasable.php b/src/base/Purchasable.php index d62d983484..7b14a0d0e1 100644 --- a/src/base/Purchasable.php +++ b/src/base/Purchasable.php @@ -938,7 +938,9 @@ protected function defineRules(): array 'targetClass' => PurchasableRecord::class, 'caseInsensitive' => true, 'filter' => function(ActiveQuery $query) { - $targetRecordClassTableName = $query->modelClass::tableName(); + /** @var class-string<\yii\db\ActiveRecord> $modelClass */ + $modelClass = $query->modelClass; + $targetRecordClassTableName = $modelClass::tableName(); $elementsTable = CraftTable::ELEMENTS; $query->leftJoin(['elements' => $elementsTable], "[[elements.id]] = {$targetRecordClassTableName}.id"); $query->andWhere(['elements.revisionId' => null, 'elements.draftId' => null]); diff --git a/src/controllers/InventoryLocationsController.php b/src/controllers/InventoryLocationsController.php index 98e1b7db82..739877d323 100644 --- a/src/controllers/InventoryLocationsController.php +++ b/src/controllers/InventoryLocationsController.php @@ -133,7 +133,7 @@ public function actionEdit(?int $inventoryLocationId = null, ?InventoryLocation // Remove the title/label field from the address field layout foreach ($form->tabs as &$tab) { $tab->elements = array_filter($tab->elements, function($element) { - if (isset($element[0]) && $element[0] instanceof LabelField && $element[0]->attribute === 'title') { + if (is_array($element) && $element[0] instanceof LabelField && $element[0]->attribute === 'title') { return false; } diff --git a/src/services/Payments.php b/src/services/Payments.php index ef88aee4b7..111304616c 100644 --- a/src/services/Payments.php +++ b/src/services/Payments.php @@ -615,7 +615,7 @@ private function _refund(Transaction $parent, float $amount = null, string $note private function _saveTransaction(Transaction $child): void { if (!Plugin::getInstance()->getTransactions()->saveTransaction($child)) { - throw new TransactionException('Error saving transaction: ' . implode(', ', $child->errors)); + throw new TransactionException('Error saving transaction: ' . implode(', ', $child->getFirstErrors())); } } From 0423aaf3a3a014f1f2678269058d5133b3b6d288 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 21:12:01 +0800 Subject: [PATCH 18/44] remove ignore as it isnt needed anymore --- phpstan.neon | 2 -- 1 file changed, 2 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 2c45fd1f53..44554e4feb 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -5,5 +5,3 @@ parameters: level: 5 paths: - src - ignoreErrors: - - '#Call to an undefined method yii\\web\\UrlManager::setRouteParams\(\)#' From 54bdd7234eef90046e87aa48202cf3f4697ba2c2 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 4 Feb 2026 21:13:06 +0800 Subject: [PATCH 19/44] No longer needed --- phpstan.neon | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 2c45fd1f53..39e7ab9091 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,4 @@ includes: parameters: level: 5 paths: - - src - ignoreErrors: - - '#Call to an undefined method yii\\web\\UrlManager::setRouteParams\(\)#' + - src \ No newline at end of file From 5ad6a2c5356d5fa67de015b62c1db236f8c23b4e Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 15:35:08 +0800 Subject: [PATCH 20/44] WIP fix --- src/services/ShippingRuleCategories.php | 28 +++++ src/services/ShippingRules.php | 27 +++++ tests/unit/services/ShippingRulesTest.php | 135 ++++++++++++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 tests/unit/services/ShippingRulesTest.php diff --git a/src/services/ShippingRuleCategories.php b/src/services/ShippingRuleCategories.php index ac59f6bac7..26a1510232 100644 --- a/src/services/ShippingRuleCategories.php +++ b/src/services/ShippingRuleCategories.php @@ -46,6 +46,34 @@ public function getShippingRuleCategoriesByRuleId(int $ruleId): array return $rules; } + /** + * Returns an array of shipping rule categories indexed by rule ID. + * + * @param int[] $ruleIds + * @return array + * @since 5.6.0 + */ + public function getShippingRuleCategoriesByRuleIds(array $ruleIds): array + { + if (empty($ruleIds)) { + return []; + } + + $categoriesByRuleId = []; + + $rows = $this->_createShippingRuleCategoriesQuery() + ->where(['shippingRuleId' => $ruleIds]) + ->all(); + + foreach ($rows as $row) { + $ruleId = $row['shippingRuleId']; + $categoryId = $row['shippingCategoryId']; + $categoriesByRuleId[$ruleId][$categoryId] = new ShippingRuleCategory($row); + } + + return $categoriesByRuleId; + } + /** * Save a shipping rule category. * diff --git a/src/services/ShippingRules.php b/src/services/ShippingRules.php index 81484b09a3..ced0541cd3 100644 --- a/src/services/ShippingRules.php +++ b/src/services/ShippingRules.php @@ -62,6 +62,9 @@ public function getAllShippingRules(): Collection $this->_allShippingRules = collect($allShippingRules); + // Eager load shipping rule categories + $this->_eagerLoadShippingRuleCategories($this->_allShippingRules); + return $this->_allShippingRules; } @@ -239,4 +242,28 @@ private function _createShippingRulesQuery(): Query return $query; } + + /** + * Eager loads shipping rule categories for a collection of shipping rules. + * + * @param Collection $shippingRules + */ + private function _eagerLoadShippingRuleCategories(Collection $shippingRules): void + { + $ruleIds = $shippingRules->pluck('id')->filter()->all(); + + if (empty($ruleIds)) { + return; + } + + $categoriesByRuleId = Plugin::getInstance() + ->getShippingRuleCategories() + ->getShippingRuleCategoriesByRuleIds($ruleIds); + + foreach ($shippingRules as $rule) { + if ($rule->id !== null) { + $rule->setShippingRuleCategories($categoriesByRuleId[$rule->id] ?? []); + } + } + } } diff --git a/tests/unit/services/ShippingRulesTest.php b/tests/unit/services/ShippingRulesTest.php new file mode 100644 index 0000000000..197f3ba5ac --- /dev/null +++ b/tests/unit/services/ShippingRulesTest.php @@ -0,0 +1,135 @@ + + */ +class ShippingRulesTest extends Unit +{ + /** + * @var UnitTester + */ + protected $tester; + + /** + * @var ShippingRules + */ + protected ShippingRules $shippingRules; + + /** + * @var ShippingRuleCategories + */ + protected ShippingRuleCategories $shippingRuleCategories; + + /** + * @return array + */ + public function _fixtures(): array + { + return [ + 'shipping' => [ + 'class' => ShippingFixture::class, + ], + ]; + } + + public function _before(): void + { + parent::_before(); + + $this->shippingRules = Plugin::getInstance()->getShippingRules(); + $this->shippingRuleCategories = Plugin::getInstance()->getShippingRuleCategories(); + } + + public function testGetShippingRuleCategoriesByRuleIds(): void + { + $allRules = $this->shippingRules->getAllShippingRules(); + $ruleIds = $allRules->pluck('id')->filter()->all(); + + // Skip if no rules exist + if (empty($ruleIds)) { + $this->markTestSkipped('No shipping rules exist to test'); + } + + $categoriesByRuleId = $this->shippingRuleCategories->getShippingRuleCategoriesByRuleIds($ruleIds); + + // Result should be an array indexed by rule ID + $this->assertIsArray($categoriesByRuleId); + + // Each rule that has categories should have them indexed by category ID + foreach ($categoriesByRuleId as $ruleId => $categories) { + $this->assertContains($ruleId, $ruleIds, 'Rule ID in result should be one of the requested IDs'); + $this->assertIsArray($categories); + } + } + + public function testGetShippingRuleCategoriesByRuleIdsWithEmptyArray(): void + { + $result = $this->shippingRuleCategories->getShippingRuleCategoriesByRuleIds([]); + + $this->assertIsArray($result); + $this->assertEmpty($result); + } + + public function testEagerLoadingPopulatesShippingRuleCategories(): void + { + // Get all shipping rules - this should eager load categories + $allRules = $this->shippingRules->getAllShippingRules(); + + // Skip if no rules exist + if ($allRules->isEmpty()) { + $this->markTestSkipped('No shipping rules exist to test'); + } + + // Each rule should have its categories already loaded (not null) + // We verify this by checking that getShippingRuleCategories returns + // without triggering additional queries + foreach ($allRules as $rule) { + $categories = $rule->getShippingRuleCategories(); + $this->assertIsArray($categories); + } + } + + public function testBulkFetchMatchesSingleFetch(): void + { + $allRules = $this->shippingRules->getAllShippingRules(); + + // Skip if no rules exist + if ($allRules->isEmpty()) { + $this->markTestSkipped('No shipping rules exist to test'); + } + + $ruleIds = $allRules->pluck('id')->filter()->all(); + + // Fetch all categories in bulk + $bulkCategories = $this->shippingRuleCategories->getShippingRuleCategoriesByRuleIds($ruleIds); + + // Fetch categories one by one and compare + foreach ($ruleIds as $ruleId) { + $singleCategories = $this->shippingRuleCategories->getShippingRuleCategoriesByRuleId($ruleId); + $bulkForRule = $bulkCategories[$ruleId] ?? []; + + // Both should have the same category IDs + $this->assertEquals( + array_keys($singleCategories), + array_keys($bulkForRule), + "Categories for rule $ruleId should match between bulk and single fetch" + ); + } + } +} From 26cb10ad32e9987f5d3718bfb06f77422eb361fb Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 15:39:34 +0800 Subject: [PATCH 21/44] Release note --- CHANGELOG-WIP.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 1e8ae192fa..c29624b0e8 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1 +1,4 @@ -# WIP Release notes for Commerce 5.6 \ No newline at end of file +# WIP Release notes for Commerce 5.6 + +- Shipping rule categories are now eager loaded on shipping rules automatically. +- Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. \ No newline at end of file From da3c123600a6ca9aceefbdd185d2280edf1444cb Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 15:42:09 +0800 Subject: [PATCH 22/44] Release note link --- CHANGELOG-WIP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index c29624b0e8..2dc3a68d9f 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1,4 +1,4 @@ # WIP Release notes for Commerce 5.6 -- Shipping rule categories are now eager loaded on shipping rules automatically. +- Shipping rule categories are now eager loaded on shipping rules automatically. ([#4220](https://github.com/craftcms/commerce/issues/4220)) - Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. \ No newline at end of file From fdd6cb91b9cc1a200d5598a079a9625886d71cde Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 15:44:12 +0800 Subject: [PATCH 23/44] Working nested element manager See 218e413ef3671efb80113f2725ae1ddfafcfb42d --- src/elements/Product.php | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/elements/Product.php b/src/elements/Product.php index a2495b5126..1dcab0e9ab 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -1204,18 +1204,6 @@ public function getVariants(bool $includeDisabled = false): VariantCollection return $this->_variants->filter(fn(Variant $variant) => $includeDisabled || ($variant->getStatus() === self::STATUS_ENABLED)); } - /** - * @return VariantCollection - * @throws InvalidConfigException - * @internal Do not use. Temporary method until we get a nested element manager provider in core. - * - * TODO: Remove this once we have a nested element manager provider interface in core. - */ - public function getAllVariants(): VariantCollection - { - return $this->getVariants(true); - } - /** * @inheritdoc */ @@ -1351,9 +1339,10 @@ public function getVariantManager(): NestedElementManager /** @phpstan-ignore-next-line */ fn(Product $product) => self::createVariantQuery($product), [ - 'attribute' => 'allVariants', // TODO: can change this back to 'variants' once we have a nested element manager provider in core. + 'attribute' => 'allVariants', 'propagationMethod' => $this->getType()->propagationMethod, - 'valueSetter' => fn($variants) => $this->setVariants($variants), // TODO: can change this back to 'variants' once we have a nested element manager provider in core. + 'valueSetter' => fn($variants) => $this->setVariants($variants), + 'valueGetter' => fn() => $this->getVariants(true), ], ); } From cb40e10831af668b122b4bf7cb1e51eab5918bef Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 16:43:59 +0800 Subject: [PATCH 24/44] phpstan fixes --- src/base/Purchasable.php | 4 +++- src/controllers/InventoryLocationsController.php | 2 +- src/services/Payments.php | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/base/Purchasable.php b/src/base/Purchasable.php index d62d983484..7b14a0d0e1 100644 --- a/src/base/Purchasable.php +++ b/src/base/Purchasable.php @@ -938,7 +938,9 @@ protected function defineRules(): array 'targetClass' => PurchasableRecord::class, 'caseInsensitive' => true, 'filter' => function(ActiveQuery $query) { - $targetRecordClassTableName = $query->modelClass::tableName(); + /** @var class-string<\yii\db\ActiveRecord> $modelClass */ + $modelClass = $query->modelClass; + $targetRecordClassTableName = $modelClass::tableName(); $elementsTable = CraftTable::ELEMENTS; $query->leftJoin(['elements' => $elementsTable], "[[elements.id]] = {$targetRecordClassTableName}.id"); $query->andWhere(['elements.revisionId' => null, 'elements.draftId' => null]); diff --git a/src/controllers/InventoryLocationsController.php b/src/controllers/InventoryLocationsController.php index 98e1b7db82..739877d323 100644 --- a/src/controllers/InventoryLocationsController.php +++ b/src/controllers/InventoryLocationsController.php @@ -133,7 +133,7 @@ public function actionEdit(?int $inventoryLocationId = null, ?InventoryLocation // Remove the title/label field from the address field layout foreach ($form->tabs as &$tab) { $tab->elements = array_filter($tab->elements, function($element) { - if (isset($element[0]) && $element[0] instanceof LabelField && $element[0]->attribute === 'title') { + if (is_array($element) && $element[0] instanceof LabelField && $element[0]->attribute === 'title') { return false; } diff --git a/src/services/Payments.php b/src/services/Payments.php index ef88aee4b7..111304616c 100644 --- a/src/services/Payments.php +++ b/src/services/Payments.php @@ -615,7 +615,7 @@ private function _refund(Transaction $parent, float $amount = null, string $note private function _saveTransaction(Transaction $child): void { if (!Plugin::getInstance()->getTransactions()->saveTransaction($child)) { - throw new TransactionException('Error saving transaction: ' . implode(', ', $child->errors)); + throw new TransactionException('Error saving transaction: ' . implode(', ', $child->getFirstErrors())); } } From b0f7b3b6eb48f122f5696fbb8741ca7808697729 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 16:47:06 +0800 Subject: [PATCH 25/44] when pasing the settings, default on null --- src/models/Store.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/models/Store.php b/src/models/Store.php index 1f1165a0fb..ce0d63a60f 100644 --- a/src/models/Store.php +++ b/src/models/Store.php @@ -393,7 +393,7 @@ public function setAutoSetNewCartAddresses(bool|string $autoSetNewCartAddresses) */ public function getAutoSetNewCartAddresses(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_autoSetNewCartAddresses) : $this->_autoSetNewCartAddresses; + return $parse ? (App::parseBooleanEnv($this->_autoSetNewCartAddresses) ?? $this->_autoSetNewCartAddresses) : $this->_autoSetNewCartAddresses; } /** @@ -413,7 +413,7 @@ public function setAutoSetCartShippingMethodOption(bool|string $autoSetCartShipp */ public function getAutoSetCartShippingMethodOption(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_autoSetCartShippingMethodOption) : $this->_autoSetCartShippingMethodOption; + return $parse ? (App::parseBooleanEnv($this->_autoSetCartShippingMethodOption) ?? $this->_autoSetCartShippingMethodOption) : $this->_autoSetCartShippingMethodOption; } /** @@ -433,7 +433,7 @@ public function setAutoSetPaymentSource(bool|string $autoSetPaymentSource): void */ public function getAutoSetPaymentSource(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_autoSetPaymentSource) : $this->_autoSetPaymentSource; + return $parse ? (App::parseBooleanEnv($this->_autoSetPaymentSource) ?? $this->_autoSetPaymentSource) : $this->_autoSetPaymentSource; } /** @@ -453,7 +453,7 @@ public function setAllowEmptyCartOnCheckout(bool|string $allowEmptyCartOnCheckou */ public function getAllowEmptyCartOnCheckout(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_allowEmptyCartOnCheckout) : $this->_allowEmptyCartOnCheckout; + return $parse ? (App::parseBooleanEnv($this->_allowEmptyCartOnCheckout) ?? $this->_allowEmptyCartOnCheckout) : $this->_allowEmptyCartOnCheckout; } /** @@ -473,7 +473,7 @@ public function setAllowCheckoutWithoutPayment(bool|string $allowCheckoutWithout */ public function getAllowCheckoutWithoutPayment(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_allowCheckoutWithoutPayment) : $this->_allowCheckoutWithoutPayment; + return $parse ? (App::parseBooleanEnv($this->_allowCheckoutWithoutPayment) ?? $this->_allowCheckoutWithoutPayment) : $this->_allowCheckoutWithoutPayment; } /** @@ -495,7 +495,7 @@ public function setAllowPartialPaymentOnCheckout(bool|string $allowPartialPaymen */ public function getAllowPartialPaymentOnCheckout(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_allowPartialPaymentOnCheckout) : $this->_allowPartialPaymentOnCheckout; + return $parse ? (App::parseBooleanEnv($this->_allowPartialPaymentOnCheckout) ?? $this->_allowPartialPaymentOnCheckout) : $this->_allowPartialPaymentOnCheckout; } /** @@ -513,7 +513,7 @@ public function setRequireShippingAddressAtCheckout(bool|string $requireShipping */ public function getRequireShippingAddressAtCheckout(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_requireShippingAddressAtCheckout) : $this->_requireShippingAddressAtCheckout; + return $parse ? (App::parseBooleanEnv($this->_requireShippingAddressAtCheckout) ?? $this->_requireShippingAddressAtCheckout) : $this->_requireShippingAddressAtCheckout; } /** @@ -533,7 +533,7 @@ public function setRequireBillingAddressAtCheckout(bool|string $requireBillingAd */ public function getRequireBillingAddressAtCheckout(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_requireBillingAddressAtCheckout) : $this->_requireBillingAddressAtCheckout; + return $parse ? (App::parseBooleanEnv($this->_requireBillingAddressAtCheckout) ?? $this->_requireBillingAddressAtCheckout) : $this->_requireBillingAddressAtCheckout; } /** @@ -553,7 +553,7 @@ public function setRequireShippingMethodSelectionAtCheckout(bool|string $require */ public function getRequireShippingMethodSelectionAtCheckout(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_requireShippingMethodSelectionAtCheckout) : $this->_requireShippingMethodSelectionAtCheckout; + return $parse ? (App::parseBooleanEnv($this->_requireShippingMethodSelectionAtCheckout) ?? $this->_requireShippingMethodSelectionAtCheckout) : $this->_requireShippingMethodSelectionAtCheckout; } /** @@ -573,7 +573,7 @@ public function setUseBillingAddressForTax(bool|string $useBillingAddressForTax) */ public function getUseBillingAddressForTax(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_useBillingAddressForTax) : $this->_useBillingAddressForTax; + return $parse ? (App::parseBooleanEnv($this->_useBillingAddressForTax) ?? $this->_useBillingAddressForTax) : $this->_useBillingAddressForTax; } /** @@ -599,7 +599,7 @@ public function setValidateOrganizationTaxIdAsVatId(bool|string $validateOrganiz */ public function getValidateOrganizationTaxIdAsVatId(bool $parse = true): bool|string { - return $parse ? App::parseBooleanEnv($this->_validateOrganizationTaxIdAsVatId) : $this->_validateOrganizationTaxIdAsVatId; + return $parse ? (App::parseBooleanEnv($this->_validateOrganizationTaxIdAsVatId) ?? $this->_validateOrganizationTaxIdAsVatId) : $this->_validateOrganizationTaxIdAsVatId; } /** From 6eee0996c1acf5c1abe5b398062d831d24d05dc0 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 5 Feb 2026 16:54:01 +0800 Subject: [PATCH 26/44] Revert "No longer needed" This reverts commit 54bdd7234eef90046e87aa48202cf3f4697ba2c2. --- phpstan.neon | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpstan.neon b/phpstan.neon index 39e7ab9091..2c45fd1f53 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,4 +4,6 @@ includes: parameters: level: 5 paths: - - src \ No newline at end of file + - src + ignoreErrors: + - '#Call to an undefined method yii\\web\\UrlManager::setRouteParams\(\)#' From 7f55b0aca83905ca818821390ac6cff06ea2719c Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Fri, 6 Feb 2026 16:51:49 +0800 Subject: [PATCH 27/44] Require Craft 5.9 --- composer.json | 2 +- composer.lock | 3698 ++++++++++++++++++++++++++----------------------- phpstan.neon | 4 +- 3 files changed, 2002 insertions(+), 1702 deletions(-) diff --git a/composer.json b/composer.json index 424ae5b760..58d3c12e6d 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "prefer-stable": true, "require": { "php": "^8.2", - "craftcms/cms": "^5.6.0", + "craftcms/cms": "^5.9.0", "dompdf/dompdf": "^2.0.2", "ibericode/vat": "^1.2.2", "iio/libmergepdf": "^4.0", diff --git a/composer.lock b/composer.lock index fc02233879..6c9e38fe2d 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": "ff78ccead3f15c9a900dafb12295cbee", + "content-hash": "5722c0136166cfedca244fa3fc58d187", "packages": [ { "name": "bacon/bacon-qr-code", @@ -62,25 +62,25 @@ }, { "name": "brick/math", - "version": "0.12.3", + "version": "0.14.6", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", - "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "url": "https://api.github.com/repos/brick/math/zipball/32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", + "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -110,7 +110,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.3" + "source": "https://github.com/brick/math/tree/0.14.6" }, "funding": [ { @@ -118,7 +118,76 @@ "type": "github" } ], - "time": "2025-02-28T13:11:00+00:00" + "time": "2026-02-05T07:59:58+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" }, { "name": "cebe/markdown", @@ -186,16 +255,16 @@ }, { "name": "commerceguys/addressing", - "version": "v2.2.4", + "version": "v2.2.5", "source": { "type": "git", "url": "https://github.com/commerceguys/addressing.git", - "reference": "ea826dbe5b3fe76960073a2167d5cf996c811cda" + "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/addressing/zipball/ea826dbe5b3fe76960073a2167d5cf996c811cda", - "reference": "ea826dbe5b3fe76960073a2167d5cf996c811cda", + "url": "https://api.github.com/repos/commerceguys/addressing/zipball/15b789e5e6ededaf803d23c56cdc300a94522a7c", + "reference": "15b789e5e6ededaf803d23c56cdc300a94522a7c", "shasum": "" }, "require": { @@ -207,7 +276,7 @@ "mikey179/vfsstream": "^1.6.11", "phpunit/phpunit": "^9.6", "squizlabs/php_codesniffer": "^3.7", - "symfony/validator": "^5.4 || ^6.3 || ^7.0" + "symfony/validator": "^5.4 || ^6.3 || ^7.0 || ^8.0" }, "suggest": { "symfony/validator": "to validate addresses" @@ -244,22 +313,101 @@ ], "support": { "issues": "https://github.com/commerceguys/addressing/issues", - "source": "https://github.com/commerceguys/addressing/tree/v2.2.4" + "source": "https://github.com/commerceguys/addressing/tree/v2.2.5" + }, + "time": "2026-01-05T13:00:32+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" }, - "time": "2025-01-13T16:03:24+00:00" + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -311,7 +459,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -321,26 +469,22 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "craftcms/cms", - "version": "5.7.8", + "version": "5.9.6", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", - "reference": "3fea28125abcf67e0f556da9f1ee8093d58e3641" + "reference": "558372701d7870da4a3cda88592a21d962de0cb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms/zipball/3fea28125abcf67e0f556da9f1ee8093d58e3641", - "reference": "3fea28125abcf67e0f556da9f1ee8093d58e3641", + "url": "https://api.github.com/repos/craftcms/cms/zipball/558372701d7870da4a3cda88592a21d962de0cb1", + "reference": "558372701d7870da4a3cda88592a21d962de0cb1", "shasum": "" }, "require": { @@ -351,7 +495,7 @@ "craftcms/server-check": "~5.0.1", "creocoder/yii2-nested-sets": "~0.9.0", "elvanto/litemoji": "~4.3.0", - "enshrined/svg-sanitize": "~0.19.0", + "enshrined/svg-sanitize": "~0.22.0", "ext-bcmath": "*", "ext-curl": "*", "ext-dom": "*", @@ -364,12 +508,14 @@ "ext-zip": "*", "guzzlehttp/guzzle": "^7.2.0", "illuminate/collections": "^v10.42.0", + "illuminate/support": "^10.49", "league/uri": "^7.0", "mikehaertl/php-shellcommand": "^1.6.3", "moneyphp/money": "^4.0", "monolog/monolog": "^3.0", "php": "^8.2", "phpdocumentor/reflection-docblock": "^5.3", + "phpoffice/phpspreadsheet": "^5.3", "pixelandtonic/imagine": "~1.3.3.1", "pragmarx/google2fa": "^8.0", "pragmarx/recovery": "^0.2.1", @@ -382,22 +528,23 @@ "symfony/property-access": "^7.0", "symfony/property-info": "^7.0", "symfony/serializer": "^6.4", - "symfony/var-dumper": "^5.0|^6.0", - "symfony/yaml": "^5.2.3|^6.0", + "symfony/var-dumper": "^5.0|^6.0|^7.0", + "symfony/yaml": "^5.2.3|^6.0|^7.0", + "thamtech/yii2-ratelimiter-advanced": "^0.5.0", "theiconic/name-parser": "^1.2", - "twig/twig": "~3.15.0", - "voku/stringy": "^6.4.0", + "twig/twig": "~3.21.1", + "voku/portable-ascii": "^2.0", "web-auth/webauthn-lib": "~4.9.0", "webonyx/graphql-php": "~14.11.10", - "yiisoft/yii2": "~2.0.52.0", - "yiisoft/yii2-debug": "~2.1.26.0", + "yiisoft/yii2": "~2.0.54.0", + "yiisoft/yii2-debug": "~2.1.27.0", "yiisoft/yii2-queue": "~2.3.2", "yiisoft/yii2-symfonymailer": "^4.0.0" }, "provide": { "bower-asset/inputmask": "5.0.9", "bower-asset/jquery": "3.6.1", - "bower-asset/punycode": "^1.4", + "bower-asset/punycode": "^2.2", "bower-asset/yii2-pjax": "~2.0.1", "yii2tech/ar-softdelete": "1.0.4" }, @@ -412,8 +559,8 @@ "craftcms/ecs": "dev-main", "fakerphp/faker": "^1.19.0", "league/factory-muffin": "^3.3.0", - "phpstan/phpstan": "^1.10.56", - "rector/rector": "^1.2", + "phpstan/phpstan": "^2.1", + "rector/rector": "^2.0", "vlucas/phpdotenv": "^5.4.1", "yiisoft/yii2-redis": "^2.0" }, @@ -454,7 +601,7 @@ "rss": "https://github.com/craftcms/cms/releases.atom", "source": "https://github.com/craftcms/cms" }, - "time": "2025-05-28T18:48:09+00:00" + "time": "2026-02-03T16:48:37+00:00" }, { "name": "craftcms/plugin-installer", @@ -511,16 +658,16 @@ }, { "name": "craftcms/server-check", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/craftcms/server-check.git", - "reference": "08082638f8caff8ab86a223898e8ea167b3f5879" + "reference": "3b1f239c1cc781710978b0baa3e3bc99410d1973" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/server-check/zipball/08082638f8caff8ab86a223898e8ea167b3f5879", - "reference": "08082638f8caff8ab86a223898e8ea167b3f5879", + "url": "https://api.github.com/repos/craftcms/server-check/zipball/3b1f239c1cc781710978b0baa3e3bc99410d1973", + "reference": "3b1f239c1cc781710978b0baa3e3bc99410d1973", "shasum": "" }, "type": "library", @@ -549,7 +696,7 @@ "rss": "https://github.com/craftcms/server-check/releases.atom", "source": "https://github.com/craftcms/server-check" }, - "time": "2025-02-11T20:26:29+00:00" + "time": "2025-07-23T14:22:43+00:00" }, { "name": "creocoder/yii2-nested-sets", @@ -597,16 +744,16 @@ }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -641,89 +788,22 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" - }, - "time": "2024-08-09T14:30:48+00:00" - }, - { - "name": "defuse/php-encryption", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/defuse/php-encryption.git", - "reference": "f53396c2d34225064647a05ca76c1da9d99e5828" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828", - "reference": "f53396c2d34225064647a05ca76c1da9d99e5828", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "paragonie/random_compat": ">= 2", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^5|^6|^7|^8|^9|^10", - "yoast/phpunit-polyfills": "^2.0.0" - }, - "bin": [ - "bin/generate-defuse-key" - ], - "type": "library", - "autoload": { - "psr-4": { - "Defuse\\Crypto\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Hornby", - "email": "taylor@defuse.ca", - "homepage": "https://defuse.ca/" - }, - { - "name": "Scott Arciszewski", - "email": "info@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "Secure PHP Encryption Library", - "keywords": [ - "aes", - "authenticated encryption", - "cipher", - "crypto", - "cryptography", - "encrypt", - "encryption", - "openssl", - "security", - "symmetric key cryptography" - ], - "support": { - "issues": "https://github.com/defuse/php-encryption/issues", - "source": "https://github.com/defuse/php-encryption/tree/v2.4.0" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2023-06-19T06:10:36+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "doctrine/collections", - "version": "2.3.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", "shasum": "" }, "require": { @@ -732,11 +812,11 @@ "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5" + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { @@ -780,7 +860,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.3.0" + "source": "https://github.com/doctrine/collections/tree/2.6.0" }, "funding": [ { @@ -796,7 +876,7 @@ "type": "tidelift" } ], - "time": "2025-03-22T10:17:19+00:00" + "time": "2026-01-15T10:01:58+00:00" }, { "name": "doctrine/deprecations", @@ -846,6 +926,96 @@ }, "time": "2025-04-07T20:06:18+00:00" }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "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": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, { "name": "doctrine/lexer", "version": "3.0.1", @@ -1097,25 +1267,25 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.19.0", + "version": "0.22.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e" + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", - "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/0afa95ea74be155a7bcd6c6fb60c276c39984500", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" + "phpunit/phpunit": "^6.5 || ^8.5" }, "type": "library", "autoload": { @@ -1136,26 +1306,26 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.19.0" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.22.0" }, - "time": "2024-06-18T10:27:15+00:00" + "time": "2025-08-12T10:13:48+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1197,28 +1367,28 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.9.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1309,7 +1479,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1325,20 +1495,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:37:11+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1346,7 +1516,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1392,7 +1562,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1408,20 +1578,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:27:01+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -1437,7 +1607,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1508,7 +1678,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -1524,7 +1694,7 @@ "type": "tidelift" } ], - "time": "2025-03-27T12:30:47+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "ibericode/vat", @@ -1637,16 +1807,16 @@ }, { "name": "illuminate/collections", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8" + "reference": "6ae9c74fa92d4e1824d1b346cd435e8eacdc3232" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/48de3d6bc6aa779112ddcb608a3a96fc975d89d8", - "reference": "48de3d6bc6aa779112ddcb608a3a96fc975d89d8", + "url": "https://api.github.com/repos/illuminate/collections/zipball/6ae9c74fa92d4e1824d1b346cd435e8eacdc3232", + "reference": "6ae9c74fa92d4e1824d1b346cd435e8eacdc3232", "shasum": "" }, "require": { @@ -1688,20 +1858,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-09-08T19:05:53+00:00" }, { "name": "illuminate/conditionable", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5" + "reference": "47c700320b7a419f0d188d111f3bbed978fcbd3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", - "reference": "3ee34ac306fafc2a6f19cd7cd68c9af389e432a5", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/47c700320b7a419f0d188d111f3bbed978fcbd3f", + "reference": "47c700320b7a419f0d188d111f3bbed978fcbd3f", "shasum": "" }, "require": { @@ -1734,20 +1904,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-03-24T11:47:24+00:00" }, { "name": "illuminate/contracts", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74" + "reference": "2393ef579e020d88e24283913c815c3e2c143323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/f90663a69f926105a70b78060a31f3c64e2d1c74", - "reference": "f90663a69f926105a70b78060a31f3c64e2d1c74", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/2393ef579e020d88e24283913c815c3e2c143323", + "reference": "2393ef579e020d88e24283913c815c3e2c143323", "shasum": "" }, "require": { @@ -1782,11 +1952,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-21T14:02:44+00:00" + "time": "2025-03-24T11:47:24+00:00" }, { "name": "illuminate/macroable", - "version": "v10.48.28", + "version": "v10.49.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -1831,43 +2001,114 @@ "time": "2023-06-05T12:46:42+00:00" }, { - "name": "lcobucci/clock", - "version": "3.3.1", + "name": "illuminate/support", + "version": "v10.49.0", "source": { "type": "git", - "url": "https://github.com/lcobucci/clock.git", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" + "url": "https://github.com/illuminate/support.git", + "reference": "28b505e671dbe119e4e32a75c78f87189d046e39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", - "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "url": "https://api.github.com/repos/illuminate/support/zipball/28b505e671dbe119e4e32a75c78f87189d046e39", + "reference": "28b505e671dbe119e4e32a75c78f87189d046e39", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/clock": "^1.0" + "doctrine/inflector": "^2.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "nesbot/carbon": "^2.67", + "php": "^8.1", + "voku/portable-ascii": "^2.0" }, - "provide": { - "psr/clock-implementation": "1.0" + "conflict": { + "tightenco/collect": "<5.5.33" }, - "require-dev": { - "infection/infection": "^0.29", - "lcobucci/coding-standard": "^11.1.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.10.25", - "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-phpunit": "^1.3.13", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^11.3.6" + "suggest": { + "illuminate/filesystem": "Required to use the composer class (^10.0).", + "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.6).", + "ramsey/uuid": "Required to use Str::uuid() (^4.7).", + "symfony/process": "Required to use the composer class (^6.2).", + "symfony/uid": "Required to use Str::ulid() (^6.2).", + "symfony/var-dumper": "Required to use the dd function (^6.2).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, "type": "library", - "autoload": { - "psr-4": { - "Lcobucci\\Clock\\": "src" + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Support package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2025-09-08T19:05:53+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^11.3.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -1896,33 +2137,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.8", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1950,6 +2196,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -1962,9 +2209,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -1974,7 +2223,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.8.0" }, "funding": [ { @@ -1982,26 +2231,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2026-01-14T17:24:56+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -2009,6 +2257,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -2033,7 +2282,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -2058,7 +2307,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" }, "funding": [ { @@ -2066,20 +2315,205 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2026-01-15T06:54:53+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.2" + }, + "require-dev": { + "brianium/paratest": "^7.7", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^11.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2025-01-27T12:07:53+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -2131,9 +2565,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "mikehaertl/php-shellcommand", @@ -2183,23 +2617,23 @@ }, { "name": "moneyphp/money", - "version": "v4.7.0", + "version": "v4.8.0", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa" + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/af048f0206d3b39b8fad9de6a230cedf765365fa", - "reference": "af048f0206d3b39b8fad9de6a230cedf765365fa", + "url": "https://api.github.com/repos/moneyphp/money/zipball/b358727ea5a5cd2d7475e59c31dfc352440ae7ec", + "reference": "b358727ea5a5cd2d7475e59c31dfc352440ae7ec", "shasum": "" }, "require": { "ext-bcmath": "*", "ext-filter": "*", "ext-json": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cache/taggable-cache": "^1.1.0", @@ -2267,22 +2701,22 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.7.0" + "source": "https://github.com/moneyphp/money/tree/v4.8.0" }, - "time": "2025-04-03T08:26:36+00:00" + "time": "2025-10-23T07:55:09+00:00" }, { "name": "monolog/monolog", - "version": "3.9.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { @@ -2300,7 +2734,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.8", "phpstan/phpstan": "^2", @@ -2360,7 +2794,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -2372,28 +2806,137 @@ "type": "tidelift" } ], - "time": "2025-03-24T10:02:05+00:00" + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.73.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-01-08T20:10:23+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "type": "library", "autoload": { @@ -2439,84 +2982,34 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2024-05-08T12:36:18+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "phenx/php-font-lib", + "version": "0.5.6", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "a1681e9793040740a405ac5b189275059e2a9863" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863", + "reference": "a1681e9793040740a405ac5b189275059e2a9863", "shasum": "" }, "require": { - "php": ">= 7" + "ext-mbstring": "*" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" }, "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "phenx/php-font-lib", - "version": "0.5.6", - "source": { - "type": "git", - "url": "https://github.com/dompdf/php-font-lib.git", - "reference": "a1681e9793040740a405ac5b189275059e2a9863" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863", - "reference": "a1681e9793040740a405ac5b189275059e2a9863", - "shasum": "" - }, - "require": { - "ext-mbstring": "*" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "FontLib\\": "src/FontLib" - } - }, + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ "LGPL-2.1-or-later" @@ -2636,16 +3129,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { @@ -2655,7 +3148,7 @@ "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -2694,22 +3187,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -2752,22 +3245,131 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" + }, + "time": "2025-11-21T15:09:14+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "5.4.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "48f2fe37d64c2dece0ef71fb2ac55497566782af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/48f2fe37d64c2dece0ef71fb2ac55497566782af", + "reference": "48f2fe37d64c2dece0ef71fb2ac55497566782af", + "shasum": "" + }, + "require": { + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.1", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0 || ^3.0", + "ext-intl": "*", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.5", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1 || ^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0 || ^2.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions, required for NumberFormat Wizard and StringHelper::setLocale()", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + }, + { + "name": "Owen Leibman" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.4.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2026-01-11T04:52:00+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -2799,9 +3401,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "pixelandtonic/imagine", @@ -3509,16 +4111,16 @@ }, { "name": "sabberworm/php-css-parser", - "version": "v8.8.0", + "version": "v8.9.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740" + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740", - "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9", "shasum": "" }, "require": { @@ -3526,7 +4128,8 @@ "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { - "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41" + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41", + "rawr/cross-data-providers": "^2.0.0" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" @@ -3568,9 +4171,9 @@ ], "support": { "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", - "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0" + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0" }, - "time": "2025-03-23T17:59:05+00:00" + "time": "2025-07-11T13:20:48+00:00" }, { "name": "samdark/yii2-psr-log-target", @@ -3691,16 +4294,16 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.3", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", "shasum": "" }, "require": { @@ -3715,7 +4318,7 @@ "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -3751,7 +4354,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" }, "funding": [ { @@ -3759,44 +4362,32 @@ "type": "tidelift" } ], - "time": "2025-02-05T13:22:35+00:00" + "time": "2025-08-05T09:57:14+00:00" }, { "name": "spomky-labs/cbor-php", - "version": "3.1.0", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4" + "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", - "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/2a5fb86aacfe1004611370ead6caa2bfc88435d0", + "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", "ext-mbstring": "*", "php": ">=8.0" }, "require-dev": { - "ekino/phpstan-banned-code": "^1.0", "ext-json": "*", - "infection/infection": "^0.29", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-beberlei-assert": "^1.0", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^10.1|^11.0", - "qossmic/deptrac": "^2.0", - "rector/rector": "^1.0", "roave/security-advisories": "dev-latest", - "symfony/var-dumper": "^6.0|^7.0", - "symplify/easy-coding-standard": "^12.0" + "symfony/error-handler": "^6.4|^7.1|^8.0", + "symfony/var-dumper": "^6.4|^7.1|^8.0" }, "suggest": { "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", @@ -3830,7 +4421,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.1.0" + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.2" }, "funding": [ { @@ -3842,24 +4433,24 @@ "type": "patreon" } ], - "time": "2024-07-18T08:37:03+00:00" + "time": "2025-11-13T13:00:34+00:00" }, { "name": "spomky-labs/pki-framework", - "version": "1.2.3", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31" + "reference": "f0e9a548df4e3942886adc9b7830581a46334631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/5ff1dcc21e961b60149a80e77f744fc047800b31", - "reference": "5ff1dcc21e961b60149a80e77f744fc047800b31", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/f0e9a548df4e3942886adc9b7830581a46334631", + "reference": "f0e9a548df4e3942886adc9b7830581a46334631", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13", + "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14", "ext-mbstring": "*", "php": ">=8.1" }, @@ -3867,7 +4458,7 @@ "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", "ext-gmp": "*", "ext-openssl": "*", - "infection/infection": "^0.28|^0.29", + "infection/infection": "^0.28|^0.29|^0.31", "php-parallel-lint/php-parallel-lint": "^1.3", "phpstan/extension-installer": "^1.3|^2.0", "phpstan/phpstan": "^1.8|^2.0", @@ -3877,8 +4468,8 @@ "phpunit/phpunit": "^10.1|^11.0|^12.0", "rector/rector": "^1.0|^2.0", "roave/security-advisories": "dev-latest", - "symfony/string": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", "symplify/easy-coding-standard": "^12.0" }, "suggest": { @@ -3939,7 +4530,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.3" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.1" }, "funding": [ { @@ -3951,20 +4542,20 @@ "type": "patreon" } ], - "time": "2025-04-25T15:57:13+00:00" + "time": "2025-12-20T12:57:40+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", "shasum": "" }, "require": { @@ -4000,7 +4591,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" }, "funding": [ { @@ -4011,12 +4602,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-09-25T14:21:43+00:00" + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4087,26 +4682,27 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166" + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/0fabbc3d6a9c473b716a93fc8e7a537adb396166", - "reference": "0fabbc3d6a9c473b716a93fc8e7a537adb396166", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/71fd6a82fc357c8b5de22f78b228acfc43dee965", + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965", "shasum": "" }, "require": { "masterminds/html5": "^2.6", "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^6.4|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4134,7 +4730,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.3.0" + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.4" }, "funding": [ { @@ -4145,25 +4741,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-05T10:15:41+00:00" + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", "shasum": "" }, "require": { @@ -4180,13 +4780,14 @@ }, "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": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4214,7 +4815,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.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" }, "funding": [ { @@ -4225,12 +4826,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": "2025-04-22T09:11:45+00:00" + "time": "2026-01-05T11:45:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4310,16 +4915,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789", + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789", "shasum": "" }, "require": { @@ -4356,7 +4961,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v6.4.30" }, "funding": [ { @@ -4367,25 +4972,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-10-25T15:07:50+00:00" + "time": "2025-11-26T14:43:45+00:00" }, { "name": "symfony/http-client", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9" + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/57e4fb86314015a695a750ace358d07a7e37b8a9", - "reference": "57e4fb86314015a695a750ace358d07a7e37b8a9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/84bb634857a893cc146cceb467e31b3f02c5fe9f", + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f", "shasum": "" }, "require": { @@ -4393,10 +5002,12 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "amphp/amp": "<2.5", + "amphp/socket": "<1.1", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -4409,18 +5020,18 @@ "require-dev": { "amphp/http-client": "^4.2.1|^5.0", "amphp/http-tunnel": "^1.0|^2.0", - "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", "symfony/amphp-http-client-meta": "^1.0|^2.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4451,7 +5062,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.3.0" + "source": "https://github.com/symfony/http-client/tree/v7.4.5" }, "funding": [ { @@ -4462,12 +5073,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": "2025-05-02T08:23:16+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/http-client-contracts", @@ -4549,16 +5164,16 @@ }, { "name": "symfony/mailer", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", "shasum": "" }, "require": { @@ -4566,8 +5181,8 @@ "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -4578,10 +5193,10 @@ "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4609,7 +5224,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.0" + "source": "https://github.com/symfony/mailer/tree/v7.4.4" }, "funding": [ { @@ -4620,48 +5235,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-04-04T09:51:09+00:00" + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/mime", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", + "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", "symfony/mailer": "<6.4", "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "phpdocumentor/reflection-docblock": "^5.2", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" }, "type": "library", "autoload": { @@ -4693,7 +5313,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.0" + "source": "https://github.com/symfony/mime/tree/v7.4.5" }, "funding": [ { @@ -4704,16 +5324,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": "2025-02-19T08:51:26+00:00" + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4772,7 +5396,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -4784,83 +5408,7 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/5f3b930437ae03ae5dff61269024d8ea1b3774aa", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/nicolas-grekas", "type": "github" }, { @@ -4868,20 +5416,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T14:58:18+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -4930,7 +5478,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -4941,16 +5489,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-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -5013,7 +5565,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -5024,6 +5576,10 @@ "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" @@ -5033,7 +5589,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5094,7 +5650,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -5105,6 +5661,10 @@ "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" @@ -5114,7 +5674,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -5175,7 +5735,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -5186,6 +5746,10 @@ "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" @@ -5194,34 +5758,49 @@ "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "name": "symfony/polyfill-php80", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { "php": ">=7.2" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { "url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -5231,7 +5810,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5240,7 +5819,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -5251,25 +5830,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-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.32.0", + "name": "symfony/polyfill-php83", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -5287,7 +5870,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -5307,7 +5890,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5316,7 +5899,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { @@ -5327,25 +5910,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-09T11:45:10+00:00" + "time": "2025-07-08T02:45:35+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "000df7860439609837bbe28670b0be15783b7fbf" + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf", - "reference": "000df7860439609837bbe28670b0be15783b7fbf", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { @@ -5392,7 +5979,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -5403,16 +5990,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": "2025-02-20T12:04:08+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -5471,7 +6062,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" }, "funding": [ { @@ -5482,6 +6073,10 @@ "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" @@ -5491,16 +6086,16 @@ }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "608476f4604102976d687c483ac63a79ba18cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", "shasum": "" }, "require": { @@ -5532,7 +6127,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.4.5" }, "funding": [ { @@ -5543,33 +6138,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/property-access", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b" + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/3bcf43665d6aff90547b005348e1e351f4e2174b", - "reference": "3bcf43665d6aff90547b005348e1e351f4e2174b", + "url": "https://api.github.com/repos/symfony/property-access/zipball/fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/property-info": "^6.4|^7.0" + "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" }, "type": "library", "autoload": { @@ -5608,7 +6208,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.3.0" + "source": "https://github.com/symfony/property-access/tree/v7.4.4" }, "funding": [ { @@ -5619,35 +6219,39 @@ "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-05-10T11:59:09+00:00" + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/property-info", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "200d230d8553610ada73ac557501dc4609aad31f" + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/200d230d8553610ada73ac557501dc4609aad31f", - "reference": "200d230d8553610ada73ac557501dc4609aad31f", + "url": "https://api.github.com/repos/symfony/property-info/zipball/1c9d326bd69602561e2ea467a16c09b5972eee21", + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0", - "symfony/type-info": "~7.1.9|^7.2.2" + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/type-info": "~7.3.10|^7.4.4|^8.0.4" }, "conflict": { - "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/reflection-docblock": "<5.2|>=6", "phpdocumentor/type-resolver": "<1.5.1", "symfony/cache": "<6.4", "symfony/dependency-injection": "<6.4", @@ -5656,9 +6260,9 @@ "require-dev": { "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5694,7 +6298,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.3.0" + "source": "https://github.com/symfony/property-info/tree/v7.4.5" }, "funding": [ { @@ -5705,25 +6309,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-04-04T13:12:05+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.22", + "version": "v6.4.33", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "b836df93e9ea07d1d3ada58a679ef205d54b64d1" + "reference": "b53a060656bd28060c9fa28e2cab151348fd49b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/b836df93e9ea07d1d3ada58a679ef205d54b64d1", - "reference": "b836df93e9ea07d1d3ada58a679ef205d54b64d1", + "url": "https://api.github.com/repos/symfony/serializer/zipball/b53a060656bd28060c9fa28e2cab151348fd49b5", + "reference": "b53a060656bd28060c9fa28e2cab151348fd49b5", "shasum": "" }, "require": { @@ -5792,7 +6400,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.22" + "source": "https://github.com/symfony/serializer/tree/v6.4.33" }, "funding": [ { @@ -5803,25 +6411,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-05-12T08:02:50+00:00" + "time": "2026-01-26T08:32:52+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -5875,7 +6487,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -5886,31 +6498,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": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -5918,12 +6535,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/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5962,7 +6578,188 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" + "source": "https://github.com/symfony/string/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T10:54:30+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T19:15:33+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -5973,25 +6770,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-04-20T20:19:01+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/type-info", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786" + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/bc9af22e25796d98078f69c0749ab3a9d3454786", - "reference": "bc9af22e25796d98078f69c0749ab3a9d3454786", + "url": "https://api.github.com/repos/symfony/type-info/zipball/f83c725e72b39b2704b9d6fc85070ad6ac7a5889", + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889", "shasum": "" }, "require": { @@ -6041,7 +6842,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.3.0" + "source": "https://github.com/symfony/type-info/tree/v7.4.4" }, "funding": [ { @@ -6052,25 +6853,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-30T12:17:06+00:00" + "time": "2026-01-09T12:14:21+00:00" }, { "name": "symfony/uid", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3" + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3", - "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3", + "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", "shasum": "" }, "require": { @@ -6078,7 +6883,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6115,7 +6920,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.0" + "source": "https://github.com/symfony/uid/tree/v7.4.4" }, "funding": [ { @@ -6126,43 +6931,45 @@ "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-05-24T14:28:13+00:00" + "time": "2026-01-03T23:30:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.21", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5" + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", - "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -6200,7 +7007,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.21" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.4" }, "funding": [ { @@ -6211,37 +7018,41 @@ "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-04-09T07:34:50+00:00" + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.21", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e" + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e", - "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -6272,7 +7083,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.21" + "source": "https://github.com/symfony/yaml/tree/v7.4.1" }, "funding": [ { @@ -6283,25 +7094,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-04-04T09:48:44+00:00" + "time": "2025-12-04T18:11:45+00:00" }, { "name": "tecnickcom/tcpdf", - "version": "6.10.0", + "version": "6.10.1", "source": { "type": "git", "url": "https://github.com/tecnickcom/TCPDF.git", - "reference": "ca5b6de294512145db96bcbc94e61696599c391d" + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/ca5b6de294512145db96bcbc94e61696599c391d", - "reference": "ca5b6de294512145db96bcbc94e61696599c391d", + "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/7a2701251e5d52fc3d508fd71704683eb54f5939", + "reference": "7a2701251e5d52fc3d508fd71704683eb54f5939", "shasum": "" }, "require": { @@ -6351,7 +7166,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0" + "source": "https://github.com/tecnickcom/TCPDF/tree/6.10.1" }, "funding": [ { @@ -6359,7 +7174,57 @@ "type": "custom" } ], - "time": "2025-05-27T18:02:28+00:00" + "time": "2025-11-21T10:58:21+00:00" + }, + { + "name": "thamtech/yii2-ratelimiter-advanced", + "version": "0.5", + "source": { + "type": "git", + "url": "https://github.com/thamtech/yii2-ratelimiter-advanced.git", + "reference": "2fde10eaa1ec67e689d06babfc9c68d144d35433" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thamtech/yii2-ratelimiter-advanced/zipball/2fde10eaa1ec67e689d06babfc9c68d144d35433", + "reference": "2fde10eaa1ec67e689d06babfc9c68d144d35433", + "shasum": "" + }, + "require": { + "php": ">=5.6.0", + "yiisoft/yii2": ">=2.0.14 <2.1" + }, + "require-dev": { + "codeception/codeception": "2.0.*", + "codeception/specify": "*", + "codeception/verify": "*", + "flow/jsonpath": "^0.3", + "yiisoft/yii2-codeception": "*", + "yiisoft/yii2-debug": "*", + "yiisoft/yii2-faker": "*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "thamtech\\ratelimiter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tyler Ham", + "email": "tyler@thamtech.com" + } + ], + "description": "An advanced request rate limiter", + "support": { + "issues": "https://github.com/thamtech/yii2-ratelimiter-advanced/issues", + "source": "https://github.com/thamtech/yii2-ratelimiter-advanced/tree/master" + }, + "time": "2020-08-05T04:29:29+00:00" }, { "name": "theiconic/name-parser", @@ -6411,26 +7276,26 @@ }, { "name": "twig/twig", - "version": "v3.15.0", + "version": "v3.21.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02" + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02", - "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php81": "^1.29" + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { + "phpstan/phpstan": "^2.0", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -6470,646 +7335,73 @@ "description": "Twig, the flexible, fast, and secure template language for PHP", "homepage": "https://twig.symfony.com", "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.15.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2024-11-17T15:59:19+00:00" - }, - { - "name": "voku/anti-xss", - "version": "4.1.42", - "source": { - "type": "git", - "url": "https://github.com/voku/anti-xss.git", - "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/anti-xss/zipball/bca1f8607e55a3c5077483615cd93bd8f11bd675", - "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "voku/portable-utf8": "~6.0.2" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "voku\\helper\\": "src/voku/helper/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "EllisLab Dev Team", - "homepage": "http://ellislab.com/" - }, - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "anti xss-library", - "homepage": "https://github.com/voku/anti-xss", - "keywords": [ - "anti-xss", - "clean", - "security", - "xss" - ], - "support": { - "issues": "https://github.com/voku/anti-xss/issues", - "source": "https://github.com/voku/anti-xss/tree/4.1.42" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/anti-xss", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/anti-xss", - "type": "tidelift" - } - ], - "time": "2023-07-03T14:40:46+00:00" - }, - { - "name": "voku/arrayy", - "version": "7.9.6", - "source": { - "type": "git", - "url": "https://github.com/voku/Arrayy.git", - "reference": "0e20b8c6eef7fc46694a2906e0eae2f9fc11cade" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/Arrayy/zipball/0e20b8c6eef7fc46694a2906e0eae2f9fc11cade", - "reference": "0e20b8c6eef7fc46694a2906e0eae2f9fc11cade", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=7.0.0", - "phpdocumentor/reflection-docblock": "~4.3 || ~5.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Create.php" - ], - "psr-4": { - "Arrayy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/", - "role": "Maintainer" - } - ], - "description": "Array manipulation library for PHP, called Arrayy!", - "keywords": [ - "Arrayy", - "array", - "helpers", - "manipulation", - "methods", - "utility", - "utils" - ], - "support": { - "docs": "https://voku.github.io/Arrayy/", - "issues": "https://github.com/voku/Arrayy/issues", - "source": "https://github.com/voku/Arrayy" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/arrayy", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/arrayy", - "type": "tidelift" - } - ], - "time": "2022-12-27T12:58:32+00:00" - }, - { - "name": "voku/email-check", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/voku/email-check.git", - "reference": "6ea842920bbef6758b8c1e619fd1710e7a1a2cac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/email-check/zipball/6ea842920bbef6758b8c1e619fd1710e7a1a2cac", - "reference": "6ea842920bbef6758b8c1e619fd1710e7a1a2cac", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "symfony/polyfill-intl-idn": "~1.10" - }, - "require-dev": { - "fzaninotto/faker": "~1.7", - "phpunit/phpunit": "~6.0 || ~7.0" - }, - "suggest": { - "ext-intl": "Use Intl for best performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\helper\\": "src/voku/helper/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "email-check (syntax, dns, trash, ...) library", - "homepage": "https://github.com/voku/email-check", - "keywords": [ - "check-email", - "email", - "mail", - "mail-check", - "validate-email", - "validate-email-address", - "validate-mail" - ], - "support": { - "issues": "https://github.com/voku/email-check/issues", - "source": "https://github.com/voku/email-check/tree/3.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/email-check", - "type": "tidelift" - } - ], - "time": "2021-01-27T14:14:33+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "voku/portable-utf8", - "version": "6.0.13", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-utf8.git", - "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-utf8/zipball/b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", - "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "symfony/polyfill-iconv": "~1.0", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.0", - "voku/portable-ascii": "~2.0.0" - }, - "require-dev": { - "phpstan/phpstan": "1.9.*@dev", - "phpstan/phpstan-strict-rules": "1.4.*@dev", - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0", - "thecodingmachine/phpstan-strict-rules": "1.0.*@dev", - "voku/phpstan-rules": "3.1.*@dev" - }, - "suggest": { - "ext-ctype": "Use Ctype for e.g. hexadecimal digit detection", - "ext-fileinfo": "Use Fileinfo for better binary file detection", - "ext-iconv": "Use iconv for best performance", - "ext-intl": "Use Intl for best performance", - "ext-json": "Use JSON for string detection", - "ext-mbstring": "Use Mbstring for best performance" - }, - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "(Apache-2.0 or GPL-2.0)" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Hamid Sarfraz", - "homepage": "http://pageconfig.com/" - }, - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable UTF-8 library - performance optimized (unicode) string functions for php.", - "homepage": "https://github.com/voku/portable-utf8", - "keywords": [ - "UTF", - "clean", - "php", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "issues": "https://github.com/voku/portable-utf8/issues", - "source": "https://github.com/voku/portable-utf8/tree/6.0.13" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-utf8", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-utf8", - "type": "tidelift" - } - ], - "time": "2023-03-08T08:35:38+00:00" - }, - { - "name": "voku/stop-words", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/stop-words.git", - "reference": "8e63c0af20f800b1600783764e0ce19e53969f71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/stop-words/zipball/8e63c0af20f800b1600783764e0ce19e53969f71", - "reference": "8e63c0af20f800b1600783764e0ce19e53969f71", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Stop-Words via PHP", - "keywords": [ - "stop words", - "stop-words" - ], - "support": { - "issues": "https://github.com/voku/stop-words/issues", - "source": "https://github.com/voku/stop-words/tree/master" - }, - "time": "2018-11-23T01:37:27+00:00" - }, - { - "name": "voku/stringy", - "version": "6.5.3", - "source": { - "type": "git", - "url": "https://github.com/voku/Stringy.git", - "reference": "c453c88fbff298f042c836ef44306f8703b2d537" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/Stringy/zipball/c453c88fbff298f042c836ef44306f8703b2d537", - "reference": "c453c88fbff298f042c836ef44306f8703b2d537", - "shasum": "" - }, - "require": { - "defuse/php-encryption": "~2.0", - "ext-json": "*", - "php": ">=7.0.0", - "voku/anti-xss": "~4.1", - "voku/arrayy": "~7.8", - "voku/email-check": "~3.1", - "voku/portable-ascii": "~2.0", - "voku/portable-utf8": "~6.0", - "voku/urlify": "~5.0" - }, - "replace": { - "danielstjules/stringy": "~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Create.php" - ], - "psr-4": { - "Stringy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel St. Jules", - "email": "danielst.jules@gmail.com", - "homepage": "http://www.danielstjules.com", - "role": "Maintainer" - }, - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/", - "role": "Fork-Maintainer" - } - ], - "description": "A string manipulation library with multibyte support", - "homepage": "https://github.com/danielstjules/Stringy", - "keywords": [ - "UTF", - "helpers", - "manipulation", - "methods", - "multibyte", - "string", - "utf-8", - "utility", - "utils" + "templating" ], "support": { - "issues": "https://github.com/voku/Stringy/issues", - "source": "https://github.com/voku/Stringy" + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" }, "funding": [ { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/stringy", + "url": "https://tidelift.com/funding/github/packagist/twig/twig", "type": "tidelift" } ], - "time": "2022-03-28T14:52:20+00:00" + "time": "2025-05-03T07:21:55+00:00" }, { - "name": "voku/urlify", - "version": "5.0.7", + "name": "voku/portable-ascii", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/voku/urlify.git", - "reference": "014b2074407b5db5968f836c27d8731934b330e4" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/urlify/zipball/014b2074407b5db5968f836c27d8731934b330e4", - "reference": "014b2074407b5db5968f836c27d8731934b330e4", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { - "php": ">=7.0.0", - "voku/portable-ascii": "~2.0", - "voku/portable-utf8": "~6.0", - "voku/stop-words": "~2.0" + "php": ">=7.0.0" }, "require-dev": { "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, "type": "library", "autoload": { "psr-4": { - "voku\\helper\\": "src/voku/helper/" + "voku\\": "src/voku/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ - { - "name": "Johnny Broadway", - "email": "johnny@johnnybroadway.com", - "homepage": "http://www.johnnybroadway.com/" - }, { "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], - "description": "PHP port of URLify.js from the Django project. Transliterates non-ascii characters for use in URLs.", - "homepage": "https://github.com/voku/urlify", + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", "keywords": [ - "encode", - "iconv", - "link", - "slug", - "translit", - "transliterate", - "transliteration", - "url", - "urlify" + "ascii", + "clean", + "php" ], "support": { - "issues": "https://github.com/voku/urlify/issues", - "source": "https://github.com/voku/urlify/tree/5.0.7" + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -7120,56 +7412,49 @@ "url": "https://github.com/voku", "type": "github" }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, { "url": "https://www.patreon.com/voku", "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/voku/urlify", + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", "type": "tidelift" } ], - "time": "2022-01-24T19:08:46+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "web-auth/cose-lib", - "version": "4.4.0", + "version": "4.5.0", "source": { "type": "git", "url": "https://github.com/web-auth/cose-lib.git", - "reference": "2166016e48e0214f4f63320a7758a9386d14c92a" + "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/2166016e48e0214f4f63320a7758a9386d14c92a", - "reference": "2166016e48e0214f4f63320a7758a9386d14c92a", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5adac6fe126994a3ee17ed9950efb4947ab132a9", + "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", "ext-json": "*", "ext-openssl": "*", "php": ">=8.1", "spomky-labs/pki-framework": "^1.0" }, "require-dev": { - "ekino/phpstan-banned-code": "^1.0", - "infection/infection": "^0.29", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.3", - "phpstan/phpstan": "^1.7", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "^10.1|^11.0", - "qossmic/deptrac": "^2.0", - "rector/rector": "^1.0", - "symfony/phpunit-bridge": "^6.4|^7.0", - "symplify/easy-coding-standard": "^12.0" + "spomky-labs/cbor-php": "^3.2.2" }, "suggest": { "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", - "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension" + "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension", + "spomky-labs/cbor-php": "For COSE Signature support" }, "type": "library", "autoload": { @@ -7199,7 +7484,7 @@ ], "support": { "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.4.0" + "source": "https://github.com/web-auth/cose-lib/tree/4.5.0" }, "funding": [ { @@ -7211,20 +7496,20 @@ "type": "patreon" } ], - "time": "2024-07-18T08:47:32+00:00" + "time": "2026-01-03T14:43:18+00:00" }, { "name": "web-auth/webauthn-lib", - "version": "4.9.2", + "version": "4.9.3", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "008b25171c27cf4813420d0de31cc059bcc71f1a" + "reference": "129fbaccd22163429a39bf85e320fb9eddad035c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/008b25171c27cf4813420d0de31cc059bcc71f1a", - "reference": "008b25171c27cf4813420d0de31cc059bcc71f1a", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/129fbaccd22163429a39bf85e320fb9eddad035c", + "reference": "129fbaccd22163429a39bf85e320fb9eddad035c", "shasum": "" }, "require": { @@ -7289,7 +7574,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/4.9.2" + "source": "https://github.com/web-auth/webauthn-lib/tree/4.9.3" }, "funding": [ { @@ -7301,37 +7586,37 @@ "type": "patreon" } ], - "time": "2025-01-04T09:47:58+00:00" + "time": "2026-02-05T12:48:16+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", "shasum": "" }, "require": { "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -7347,6 +7632,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -7357,9 +7646,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/2.1.2" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-01-13T14:02:24+00:00" }, { "name": "webonyx/graphql-php", @@ -7428,29 +7717,29 @@ }, { "name": "yiisoft/yii2", - "version": "2.0.52", + "version": "2.0.54", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "540e7387d934c52e415614aa081fb38d04c72d9a" + "reference": "99daebf2de0b031d129706a5db6ce0802c70bac9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/540e7387d934c52e415614aa081fb38d04c72d9a", - "reference": "540e7387d934c52e415614aa081fb38d04c72d9a", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/99daebf2de0b031d129706a5db6ce0802c70bac9", + "reference": "99daebf2de0b031d129706a5db6ce0802c70bac9", "shasum": "" }, "require": { "bower-asset/inputmask": "^5.0.8 ", "bower-asset/jquery": "3.7.*@stable | 3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", - "bower-asset/punycode": "^1.4", + "bower-asset/punycode": "^2.2", "bower-asset/yii2-pjax": "~2.0.1", "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", "ext-ctype": "*", "ext-mbstring": "*", "ezyang/htmlpurifier": "^4.17", "lib-pcre": "*", - "php": ">=7.3.0", + "php": ">=7.4.0", "yiisoft/yii2-composer": "~2.0.4" }, "bin": [ @@ -7545,7 +7834,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T20:02:28+00:00" + "time": "2026-01-09T22:24:11+00:00" }, { "name": "yiisoft/yii2-composer", @@ -7625,16 +7914,16 @@ }, { "name": "yiisoft/yii2-debug", - "version": "2.1.26", + "version": "2.1.27", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "e4b28a1d295fc977d8399db544336dd5b2764397" + "reference": "44e158914911ef81cd7111fd6d46b918f65fae7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/e4b28a1d295fc977d8399db544336dd5b2764397", - "reference": "e4b28a1d295fc977d8399db544336dd5b2764397", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/44e158914911ef81cd7111fd6d46b918f65fae7c", + "reference": "44e158914911ef81cd7111fd6d46b918f65fae7c", "shasum": "" }, "require": { @@ -7712,20 +8001,20 @@ "type": "tidelift" } ], - "time": "2025-02-13T21:27:29+00:00" + "time": "2025-06-08T13:32:11+00:00" }, { "name": "yiisoft/yii2-queue", - "version": "2.3.7", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-queue.git", - "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b" + "reference": "e0f935e5b868d53347acfb14ec19faaf16085005" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/dbc9d4a7b2a6995cd19c3e334227482ef55e559b", - "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b", + "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/e0f935e5b868d53347acfb14ec19faaf16085005", + "reference": "e0f935e5b868d53347acfb14ec19faaf16085005", "shasum": "" }, "require": { @@ -7737,14 +8026,14 @@ "aws/aws-sdk-php": ">=2.4", "cweagans/composer-patches": "^1.7", "enqueue/amqp-lib": "^0.8||^0.9.10||^0.10.0", - "enqueue/stomp": "^0.8.39||^0.10.0", + "enqueue/stomp": "^0.8.39||0.10.19", "opis/closure": "*", "pda/pheanstalk": "~3.2.1", "php-amqplib/php-amqplib": "^2.8.0||^3.0.0", "phpunit/phpunit": "4.8.34", "yiisoft/yii2-debug": "~2.1.0", "yiisoft/yii2-gii": "~2.2.0", - "yiisoft/yii2-redis": "~2.0.0" + "yiisoft/yii2-redis": "2.0.19" }, "suggest": { "aws/aws-sdk-php": "Need for aws SQS.", @@ -7797,7 +8086,7 @@ "email": "zhuravljov@gmail.com" } ], - "description": "Yii2 Queue Extension which supported DB, Redis, RabbitMQ, Beanstalk, SQS and Gearman", + "description": "Yii2 Queue Extension which supports queues based on DB, Redis, RabbitMQ, Beanstalk, SQS, and Gearman", "keywords": [ "async", "beanstalk", @@ -7829,7 +8118,7 @@ "type": "tidelift" } ], - "time": "2024-04-29T09:40:52+00:00" + "time": "2026-01-08T07:52:05+00:00" }, { "name": "yiisoft/yii2-symfonymailer", @@ -7920,25 +8209,25 @@ "packages-dev": [ { "name": "behat/gherkin", - "version": "v4.14.0", + "version": "v4.16.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4" + "reference": "e26037937dfd48528746764dd870bc5d0836665f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", - "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/e26037937dfd48528746764dd870bc5d0836665f", + "reference": "e26037937dfd48528746764dd870bc5d0836665f", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "php": "8.1.* || 8.2.* || 8.3.* || 8.4.*" + "php": ">=8.1 <8.6" }, "require-dev": { - "cucumber/gherkin-monorepo": "dev-gherkin-v32.1.1", - "friendsofphp/php-cs-fixer": "^3.65", + "cucumber/gherkin-monorepo": "dev-gherkin-v37.0.0", + "friendsofphp/php-cs-fixer": "^3.77", "mikey179/vfsstream": "^1.6", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^2", @@ -7983,27 +8272,41 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.14.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.16.1" }, - "time": "2025-05-23T15:06:40+00:00" + "funding": [ + { + "url": "https://github.com/acoulton", + "type": "github" + }, + { + "url": "https://github.com/carlos-granados", + "type": "github" + }, + { + "url": "https://github.com/stof", + "type": "github" + } + ], + "time": "2025-12-08T16:12:58+00:00" }, { "name": "codeception/codeception", - "version": "5.3.2", + "version": "5.3.4", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "582112d7a603d575e41638df1e96900b10ae91b8" + "reference": "cb4c200ec0a7fe21964f51872bb403701f53f35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/582112d7a603d575e41638df1e96900b10ae91b8", - "reference": "582112d7a603d575e41638df1e96900b10ae91b8", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/cb4c200ec0a7fe21964f51872bb403701f53f35b", + "reference": "cb4c200ec0a7fe21964f51872bb403701f53f35b", "shasum": "" }, "require": { "behat/gherkin": "^4.12", - "codeception/lib-asserts": "^2.2", + "codeception/lib-asserts": "^2.2 | ^3.0.1", "codeception/stub": "^4.1", "ext-curl": "*", "ext-json": "*", @@ -8016,12 +8319,12 @@ "psy/psysh": "^0.11.2 | ^0.12", "sebastian/comparator": "^4.0.5 | ^5.0 | ^6.0 | ^7.0", "sebastian/diff": "^4.0.3 | ^5.0 | ^6.0 | ^7.0", - "symfony/console": ">=5.4.24 <8.0", - "symfony/css-selector": ">=5.4.24 <8.0", - "symfony/event-dispatcher": ">=5.4.24 <8.0", - "symfony/finder": ">=5.4.24 <8.0", - "symfony/var-dumper": ">=5.4.24 <8.0", - "symfony/yaml": ">=5.4.24 <8.0" + "symfony/console": ">=5.4.24 <9.0", + "symfony/css-selector": ">=5.4.24 <9.0", + "symfony/event-dispatcher": ">=5.4.24 <9.0", + "symfony/finder": ">=5.4.24 <9.0", + "symfony/var-dumper": ">=5.4.24 <9.0", + "symfony/yaml": ">=5.4.24 <9.0" }, "conflict": { "codeception/lib-innerbrowser": "<3.1.3", @@ -8046,10 +8349,10 @@ "jetbrains/phpstorm-attributes": "^1.0", "laravel-zero/phar-updater": "^1.4", "php-webdriver/webdriver": "^1.15", - "stecman/symfony-console-completion": "^0.14", - "symfony/dotenv": ">=5.4.24 <8.0", - "symfony/error-handler": ">=5.4.24 <8.0", - "symfony/process": ">=5.4.24 <8.0", + "stecman/symfony-console-completion": "^0.14 || ^0.15", + "symfony/dotenv": ">=5.4.24 <9.0", + "symfony/error-handler": ">=5.4.24 <9.0", + "symfony/process": ">=5.4.24 <9.0", "vlucas/phpdotenv": "^5.1" }, "suggest": { @@ -8067,7 +8370,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.2.x-dev" + "dev-main": "5.3.x-dev" } }, "autoload": { @@ -8093,7 +8396,7 @@ "homepage": "https://codeception.com" } ], - "description": "BDD-style testing framework", + "description": "All-in-one PHP Testing Framework", "homepage": "https://codeception.com/", "keywords": [ "BDD", @@ -8104,7 +8407,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/5.3.2" + "source": "https://github.com/Codeception/Codeception/tree/5.3.4" }, "funding": [ { @@ -8112,26 +8415,26 @@ "type": "open_collective" } ], - "time": "2025-05-26T07:47:39+00:00" + "time": "2026-01-14T11:55:19+00:00" }, { "name": "codeception/lib-asserts", - "version": "2.2.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "06750a60af3ebc66faab4313981accec1be4eefc" + "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/06750a60af3ebc66faab4313981accec1be4eefc", - "reference": "06750a60af3ebc66faab4313981accec1be4eefc", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/8e161f38a71cdf3dc638c5427df21c0f01f12d13", + "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13", "shasum": "" }, "require": { - "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", "ext-dom": "*", - "php": "^7.4 | ^8.0" + "php": "^8.2 || ^8.3 || ^8.4 || ^8.5", + "phpunit/phpunit": "^11.5 || ^12.0" }, "type": "library", "autoload": { @@ -8164,37 +8467,37 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/2.2.0" + "source": "https://github.com/Codeception/lib-asserts/tree/3.1.0" }, - "time": "2025-03-10T20:41:33+00:00" + "time": "2025-12-22T08:25:07+00:00" }, { "name": "codeception/lib-innerbrowser", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/Codeception/lib-innerbrowser.git", - "reference": "74476dd019ec7900b26b7dca91a42fdcb04e549f" + "reference": "ea25ea6745941781861eb4509d134c97685fc833" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/74476dd019ec7900b26b7dca91a42fdcb04e549f", - "reference": "74476dd019ec7900b26b7dca91a42fdcb04e549f", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/ea25ea6745941781861eb4509d134c97685fc833", + "reference": "ea25ea6745941781861eb4509d134c97685fc833", "shasum": "" }, "require": { "codeception/codeception": "^5.0.8", - "codeception/lib-web": "^1.0.1", + "codeception/lib-web": "^1.0.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-mbstring": "*", "php": "^8.1", "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0 || ^7.0", - "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0 || ^7.0" + "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "codeception/util-universalframework": "^1.0" + "codeception/util-universalframework": "^1.0 || ^2.0" }, "type": "library", "autoload": { @@ -8223,30 +8526,30 @@ ], "support": { "issues": "https://github.com/Codeception/lib-innerbrowser/issues", - "source": "https://github.com/Codeception/lib-innerbrowser/tree/4.0.6" + "source": "https://github.com/Codeception/lib-innerbrowser/tree/4.0.8" }, - "time": "2025-02-14T07:02:48+00:00" + "time": "2025-12-15T13:07:50+00:00" }, { "name": "codeception/lib-web", - "version": "1.0.7", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-web.git", - "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93" + "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-web/zipball/1444ccc9b1d6721f3ced8703c8f4a9041b80df93", - "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/bbec12e789c3b810ec8cb86e5f46b5bfd673c441", + "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441", "shasum": "" }, "require": { "ext-mbstring": "*", "guzzlehttp/psr7": "^2.0", - "php": "^8.1", - "phpunit/phpunit": "^9.5 | ^10.0 | ^11.0 | ^12", - "symfony/css-selector": ">=4.4.24 <8.0" + "php": "^8.2", + "phpunit/phpunit": "^11.5 | ^12", + "symfony/css-selector": ">=4.4.24 <9.0" }, "conflict": { "codeception/codeception": "<5.0.0-alpha3" @@ -8276,29 +8579,29 @@ ], "support": { "issues": "https://github.com/Codeception/lib-web/issues", - "source": "https://github.com/Codeception/lib-web/tree/1.0.7" + "source": "https://github.com/Codeception/lib-web/tree/2.0.1" }, - "time": "2025-02-09T12:05:55+00:00" + "time": "2025-11-27T21:09:09+00:00" }, { "name": "codeception/lib-xml", - "version": "1.0.3", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-xml.git", - "reference": "ba49213e60807e3612513f404a5c93aec63f4c72" + "reference": "758a525ed766ad641cc66cd619d96dbb9e887be2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-xml/zipball/ba49213e60807e3612513f404a5c93aec63f4c72", - "reference": "ba49213e60807e3612513f404a5c93aec63f4c72", + "url": "https://api.github.com/repos/Codeception/lib-xml/zipball/758a525ed766ad641cc66cd619d96dbb9e887be2", + "reference": "758a525ed766ad641cc66cd619d96dbb9e887be2", "shasum": "" }, "require": { - "codeception/lib-web": "^1.0.6", + "codeception/lib-web": "^1.0.6 || ^2", "ext-dom": "*", - "php": "^8.0", - "symfony/css-selector": ">=4.4.24 <8.0" + "php": "^8.2", + "symfony/css-selector": ">=4.4.24 <9.0" }, "conflict": { "codeception/codeception": "<5.0.0-alpha3" @@ -8325,27 +8628,27 @@ ], "support": { "issues": "https://github.com/Codeception/lib-xml/issues", - "source": "https://github.com/Codeception/lib-xml/tree/1.0.3" + "source": "https://github.com/Codeception/lib-xml/tree/1.1.1" }, - "time": "2024-02-06T21:00:41+00:00" + "time": "2025-11-28T08:21:33+00:00" }, { "name": "codeception/module-asserts", - "version": "3.2.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/Codeception/module-asserts.git", - "reference": "eb1f7c980423888f3def5116635754ae4a75bd47" + "reference": "3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/eb1f7c980423888f3def5116635754ae4a75bd47", - "reference": "eb1f7c980423888f3def5116635754ae4a75bd47", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad", + "reference": "3b4ec5dc771a135e13c79f7e9a6eacd74779e4ad", "shasum": "" }, "require": { "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^2.2", + "codeception/lib-asserts": "^3.1", "php": "^8.2" }, "conflict": { @@ -8382,9 +8685,9 @@ ], "support": { "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/3.2.0" + "source": "https://github.com/Codeception/module-asserts/tree/3.3.0" }, - "time": "2025-05-02T02:33:11+00:00" + "time": "2025-12-23T21:16:13+00:00" }, { "name": "codeception/module-datafactory", @@ -8434,16 +8737,16 @@ }, { "name": "codeception/module-phpbrowser", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/Codeception/module-phpbrowser.git", - "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc" + "reference": "460e392c77370f7836012b16e06071eb1607876a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/a972411f60cd00d00d5e5e3b35496ba4a23bcffc", - "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/460e392c77370f7836012b16e06071eb1607876a", + "reference": "460e392c77370f7836012b16e06071eb1607876a", "shasum": "" }, "require": { @@ -8451,8 +8754,8 @@ "codeception/lib-innerbrowser": "*@dev", "ext-json": "*", "guzzlehttp/guzzle": "^7.4", - "php": "^8.0", - "symfony/browser-kit": "^5.4 || ^6.0 || ^7.0" + "php": "^8.1", + "symfony/browser-kit": "^5.4 | ^6.0 | ^7.0" }, "conflict": { "codeception/codeception": "<5.0", @@ -8460,8 +8763,10 @@ }, "require-dev": { "aws/aws-sdk-php": "^3.199", - "codeception/module-rest": "^2.0 || *@dev", - "ext-curl": "*" + "codeception/module-rest": "^2.0 | *@dev", + "ext-curl": "*", + "phpstan/phpstan": "^1.10", + "squizlabs/php_codesniffer": "^3.10" }, "suggest": { "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" @@ -8493,22 +8798,22 @@ ], "support": { "issues": "https://github.com/Codeception/module-phpbrowser/issues", - "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.1" + "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.2" }, - "time": "2023-12-08T19:41:28+00:00" + "time": "2025-09-04T10:45:58+00:00" }, { "name": "codeception/module-rest", - "version": "3.4.1", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/Codeception/module-rest.git", - "reference": "5db3a2e62ce6948d1822709c034a22fa1b1f2309" + "reference": "596817fcb5a603f6f55306f67f9eb84943df8998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-rest/zipball/5db3a2e62ce6948d1822709c034a22fa1b1f2309", - "reference": "5db3a2e62ce6948d1822709c034a22fa1b1f2309", + "url": "https://api.github.com/repos/Codeception/module-rest/zipball/596817fcb5a603f6f55306f67f9eb84943df8998", + "reference": "596817fcb5a603f6f55306f67f9eb84943df8998", "shasum": "" }, "require": { @@ -8517,13 +8822,13 @@ "ext-dom": "*", "ext-json": "*", "justinrainbow/json-schema": "^5.2.9 || ^6", - "php": "^8.1", - "softcreatr/jsonpath": "^0.8 || ^0.9 || ^0.10" + "php": "^8.2", + "softcreatr/jsonpath": "^0.8 || ^0.9 || ^0.10 || ^0.11 || ^1.0" }, "require-dev": { "codeception/lib-innerbrowser": "^3.0 | ^4.0", "codeception/stub": "^4.0", - "codeception/util-universalframework": "^1.0", + "codeception/util-universalframework": "^2.0", "ext-libxml": "*", "ext-simplexml": "*" }, @@ -8553,9 +8858,9 @@ ], "support": { "issues": "https://github.com/Codeception/module-rest/issues", - "source": "https://github.com/Codeception/module-rest/tree/3.4.1" + "source": "https://github.com/Codeception/module-rest/tree/3.4.3" }, - "time": "2025-03-25T23:04:38+00:00" + "time": "2025-12-22T14:13:56+00:00" }, { "name": "codeception/module-yii2", @@ -8620,20 +8925,20 @@ }, { "name": "codeception/stub", - "version": "4.1.4", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "6ce453073a0c220b254dd7f4383645615e4071c3" + "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/6ce453073a0c220b254dd7f4383645615e4071c3", - "reference": "6ce453073a0c220b254dd7f4383645615e4071c3", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/0c573cd5c62a828dadadc41bc56f8434860bb7bb", + "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb", "shasum": "" }, "require": { - "php": "^7.4 | ^8.0", + "php": "^8.1", "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12" }, "conflict": { @@ -8655,22 +8960,22 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/4.1.4" + "source": "https://github.com/Codeception/Stub/tree/4.2.1" }, - "time": "2025-02-14T06:56:33+00:00" + "time": "2025-12-05T13:37:14+00:00" }, { "name": "composer/ca-bundle", - "version": "1.5.7", + "version": "1.5.10", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82" + "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", + "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", "shasum": "" }, "require": { @@ -8717,7 +9022,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.7" + "source": "https://github.com/composer/ca-bundle/tree/1.5.10" }, "funding": [ { @@ -8727,30 +9032,26 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-05-26T15:08:54+00:00" + "time": "2025-12-08T15:06:51+00:00" }, { "name": "craftcms/ckeditor", - "version": "4.9.0", + "version": "4.11.0", "source": { "type": "git", "url": "https://github.com/craftcms/ckeditor.git", - "reference": "df2ea2ec6a689b276507c83c38eb982a0287651a" + "reference": "00289e6ce5f9a7c9595c5a51c2c726585aad5964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/ckeditor/zipball/df2ea2ec6a689b276507c83c38eb982a0287651a", - "reference": "df2ea2ec6a689b276507c83c38eb982a0287651a", + "url": "https://api.github.com/repos/craftcms/ckeditor/zipball/00289e6ce5f9a7c9595c5a51c2c726585aad5964", + "reference": "00289e6ce5f9a7c9595c5a51c2c726585aad5964", "shasum": "" }, "require": { - "craftcms/cms": "^5.6.0", + "craftcms/cms": "^5.6.1", "craftcms/html-field": "^3.4.0", "embed/embed": "^4.4", "nystudio107/craft-code-editor": ">=1.0.8 <=1.0.13 || ^1.0.16", @@ -8798,7 +9099,7 @@ "rss": "https://github.com/craftcms/ckeditor/commits/master.atom", "source": "https://github.com/craftcms/ckeditor" }, - "time": "2025-05-23T15:58:04+00:00" + "time": "2025-11-20T01:01:30+00:00" }, { "name": "craftcms/ecs", @@ -9168,24 +9469,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "phpoption/phpoption": "^1.9.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" }, "type": "library", "autoload": { @@ -9214,7 +9515,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" }, "funding": [ { @@ -9226,30 +9527,30 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2025-12-27T19:43:20+00:00" }, { "name": "justinrainbow/json-schema", - "version": "6.4.1", + "version": "6.6.4", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900" + "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/35d262c94959571e8736db1e5c9bc36ab94ae900", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2eeb75d21cf73211335888e7f5e6fd7440723ec7", + "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7", "shasum": "" }, "require": { "ext-json": "*", - "marc-mabe/php-enum": "^4.0", + "marc-mabe/php-enum": "^4.4", "php": "^7.2 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "1.2.0", + "json-schema/json-schema-test-suite": "^23.2", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -9299,9 +9600,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.1" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.4" }, - "time": "2025-04-04T13:08:07+00:00" + "time": "2025-12-19T15:01:32+00:00" }, { "name": "league/factory-muffin", @@ -9537,16 +9838,16 @@ }, { "name": "marc-mabe/php-enum", - "version": "v4.7.1", + "version": "v4.7.2", "source": { "type": "git", "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed" + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { @@ -9604,9 +9905,9 @@ ], "support": { "issues": "https://github.com/marc-mabe/php-enum/issues", - "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1" + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" }, - "time": "2024-11-28T04:54:44+00:00" + "time": "2025-09-14T11:18:39+00:00" }, { "name": "ml/iri", @@ -9714,16 +10015,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.1", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -9762,7 +10063,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -9770,20 +10071,20 @@ "type": "tidelift" } ], - "time": "2025-04-29T12:36:36+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -9802,7 +10103,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -9826,22 +10127,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "nystudio107/craft-code-editor", - "version": "1.0.23", + "version": "1.0.29", "source": { "type": "git", "url": "https://github.com/nystudio107/craft-code-editor.git", - "reference": "0a206d73efa8f8d3bd7294ae68b3d70c696b19c5" + "reference": "5b071512ee2ad2b8004f979f88ff3bf722bbcb4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nystudio107/craft-code-editor/zipball/0a206d73efa8f8d3bd7294ae68b3d70c696b19c5", - "reference": "0a206d73efa8f8d3bd7294ae68b3d70c696b19c5", + "url": "https://api.github.com/repos/nystudio107/craft-code-editor/zipball/5b071512ee2ad2b8004f979f88ff3bf722bbcb4d", + "reference": "5b071512ee2ad2b8004f979f88ff3bf722bbcb4d", "shasum": "" }, "require": { @@ -9896,7 +10197,7 @@ "type": "github" } ], - "time": "2025-05-17T20:38:20+00:00" + "time": "2026-01-30T19:10:22+00:00" }, { "name": "oscarotero/html-parser", @@ -10071,16 +10372,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { @@ -10088,7 +10389,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { @@ -10130,7 +10431,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, "funding": [ { @@ -10142,20 +10443,15 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-12-27T19:41:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.27", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3a6e423c076ab39dfedc307e2ac627ef579db162", - "reference": "3a6e423c076ab39dfedc307e2ac627ef579db162", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -10200,39 +10496,39 @@ "type": "github" } ], - "time": "2025-05-21T20:51:45+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.9", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", "sebastian/code-unit-reverse-lookup": "^4.0.1", "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", + "sebastian/environment": "^7.2.1", "sebastian/lines-of-code": "^3.0.1", "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.2" + "phpunit/phpunit": "^11.5.46" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10270,40 +10566,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2025-02-25T13:26:39+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -10331,15 +10639,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2024-08-27T05:02:59+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", @@ -10527,16 +10847,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.21", + "version": "11.5.51", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289" + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d565e2cdc21a7db9dc6c399c1fc2083b8010f289", - "reference": "d565e2cdc21a7db9dc6c399c1fc2083b8010f289", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad14159f92910b0f0e3928c13e9b2077529de091", + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091", "shasum": "" }, "require": { @@ -10546,24 +10866,25 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", - "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", + "sebastian/comparator": "^6.3.3", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -10608,7 +10929,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.51" }, "funding": [ { @@ -10632,20 +10953,20 @@ "type": "tidelift" } ], - "time": "2025-05-21T12:35:00+00:00" + "time": "2026-02-05T07:59:30+00:00" }, { "name": "psy/psysh", - "version": "v0.12.8", + "version": "v0.12.19", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", - "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a4f766e5c5b6773d8399711019bb7d90875a50ee", + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee", "shasum": "" }, "require": { @@ -10653,18 +10974,19 @@ "ext-tokenizer": "*", "nikic/php-parser": "^5.0 || ^4.0", "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -10695,12 +11017,11 @@ "authors": [ { "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "email": "justin@justinhileman.info" } ], "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "homepage": "https://psysh.org", "keywords": [ "REPL", "console", @@ -10709,9 +11030,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.19" }, - "time": "2025-03-16T03:05:19+00:00" + "time": "2026-01-30T17:33:13+00:00" }, { "name": "rector/rector", @@ -10944,16 +11265,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.1", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { @@ -11012,15 +11333,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-03-07T06:57:01+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", @@ -11225,16 +11558,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -11248,7 +11581,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -11291,15 +11624,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -11537,23 +11882,23 @@ }, { "name": "sebastian/recursion-context", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -11589,28 +11934,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -11646,15 +12003,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2025-03-18T13:35:50+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -11833,27 +12202,28 @@ }, { "name": "symfony/browser-kit", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "5384291845e74fd7d54f3d925c4a86ce12336593" + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/5384291845e74fd7d54f3d925c4a86ce12336593", - "reference": "5384291845e74fd7d54f3d925c4a86ce12336593", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bed167eadaaba641f51fc842c9227aa5e251309e", + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/dom-crawler": "^6.4|^7.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/dom-crawler": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/css-selector": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11881,7 +12251,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.3.0" + "source": "https://github.com/symfony/browser-kit/tree/v7.4.4" }, "funding": [ { @@ -11892,25 +12262,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-05T10:15:41+00:00" + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/console", - "version": "v7.3.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { @@ -11918,7 +12292,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" + "symfony/string": "^7.2|^8.0" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -11932,16 +12306,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11975,7 +12349,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.0" + "source": "https://github.com/symfony/console/tree/v7.4.4" }, "funding": [ { @@ -11986,32 +12360,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": "2025-05-24T10:34:04+00:00" + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/finder", - "version": "v7.3.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", + "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -12039,7 +12417,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.0" + "source": "https://github.com/symfony/finder/tree/v7.4.5" }, "funding": [ { @@ -12051,83 +12429,7 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-30T19:00:26+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "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\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/nicolas-grekas", "type": "github" }, { @@ -12135,7 +12437,7 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symplify/easy-coding-standard", @@ -12194,16 +12496,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -12232,7 +12534,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -12240,30 +12542,30 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.2", + "version": "v5.6.3", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" + "reference": "955e7815d677a3eaa7075231212f2110983adecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", + "graham-campbell/result-type": "^1.1.4", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", @@ -12312,7 +12614,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" }, "funding": [ { @@ -12324,7 +12626,7 @@ "type": "tidelift" } ], - "time": "2025-04-30T23:37:27+00:00" + "time": "2025-12-27T19:49:13+00:00" } ], "aliases": [], @@ -12340,5 +12642,5 @@ "php": "^8.2" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/phpstan.neon b/phpstan.neon index 2c45fd1f53..39e7ab9091 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,4 @@ includes: parameters: level: 5 paths: - - src - ignoreErrors: - - '#Call to an undefined method yii\\web\\UrlManager::setRouteParams\(\)#' + - src \ No newline at end of file From b4e5674a838f8c3831c81bcc1ec64fe59d47e0a6 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Fri, 6 Feb 2026 17:13:43 +0800 Subject: [PATCH 28/44] enable ci for 5.6 branch also, for now --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e8c794175..084e91b582 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: branches: - '5.x' + - '5.6' pull_request: permissions: contents: read From 0508403ccad329bf3dee966e8e4fa309d0b1aca6 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Tue, 10 Feb 2026 17:15:10 +0800 Subject: [PATCH 29/44] Product and Variant Product UI Label Format --- CHANGELOG-WIP.md | 2 + src/Plugin.php | 2 +- src/elements/Product.php | 8 +++ src/elements/Variant.php | 28 ++++------ src/migrations/Install.php | 2 + .../m260206_000000_add_ui_label_formats.php | 52 +++++++++++++++++++ src/models/ProductType.php | 14 +++++ src/records/ProductType.php | 2 + src/services/ProductTypes.php | 12 +++++ .../settings/producttypes/_edit.twig | 22 ++++++++ src/translations/en/commerce.php | 2 + 11 files changed, 128 insertions(+), 18 deletions(-) create mode 100644 src/migrations/m260206_000000_add_ui_label_formats.php diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 2cc90ee6e7..9346512dc8 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -2,3 +2,5 @@ - Shipping rule categories are now eager loaded on shipping rules automatically. ([#4220](https://github.com/craftcms/commerce/issues/4220)) - Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. +- Added `variantUiLabelFormat` and `productUiLabelFormat` settings to product types, for customizing how products and variants are labeled throughout the control panel. ([#4178](https://github.com/craftcms/commerce/pull/4178)) + diff --git a/src/Plugin.php b/src/Plugin.php index e8a60bf311..4b3f0319fe 100755 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -259,7 +259,7 @@ public static function editions(): array /** * @inheritDoc */ - public string $schemaVersion = '5.5.0.5'; + public string $schemaVersion = '5.6.0.0'; /** * @inheritdoc diff --git a/src/elements/Product.php b/src/elements/Product.php index 2ff3383a79..a48db53a09 100644 --- a/src/elements/Product.php +++ b/src/elements/Product.php @@ -1054,6 +1054,14 @@ protected function crumbs(): array */ protected function uiLabel(): ?string { + $uiLabelFormat = $this->getType()->productUiLabelFormat; + if ($uiLabelFormat !== '{title}') { + $uiLabel = Craft::$app->getView()->renderObjectTemplate($uiLabelFormat, $this); + if ($uiLabel !== '') { + return $uiLabel; + } + } + if (!isset($this->title) || trim($this->title) === '') { return Craft::t('app', 'Untitled {type}', [ 'type' => self::lowerDisplayName(), diff --git a/src/elements/Variant.php b/src/elements/Variant.php index fd06e3f48e..d1c7c57c8e 100755 --- a/src/elements/Variant.php +++ b/src/elements/Variant.php @@ -259,26 +259,20 @@ public function init(): void /** * @inheritdoc */ - public function getUiLabel(): string + protected function uiLabel(): ?string { - $request = Craft::$app->getRequest(); - $referrer = $request->getReferrer() ?? ''; - $pathInfo = $request->getPathInfo(); - - $isCommerceProductContext = ( - str_contains($pathInfo, 'commerce/products') || - ($request->getIsAjax() && str_contains($referrer, 'commerce/products')) - ); - - if ($isCommerceProductContext || !$this->owner) { - return parent::getUiLabel(); + $owner = $this->getOwner(); + if ($owner) { + $uiLabelFormat = $owner->getType()->variantUiLabelFormat; + if ($uiLabelFormat !== '{title}') { + $uiLabel = Craft::$app->getView()->renderObjectTemplate($uiLabelFormat, $this); + if ($uiLabel !== '') { + return $uiLabel; + } + } } - $labelParts = Craft::$app->getLocale()->getOrientation() === 'rtl' - ? [parent::getUiLabel(), $this->owner->getUiLabel()] - : [$this->owner->getUiLabel(), parent::getUiLabel()]; - - return implode(' : ', $labelParts); + return null; } /** diff --git a/src/migrations/Install.php b/src/migrations/Install.php index 784645d8e2..267d7cf231 100644 --- a/src/migrations/Install.php +++ b/src/migrations/Install.php @@ -640,12 +640,14 @@ public function createTables(): void 'variantTitleFormat' => $this->string()->notNull(), 'variantTitleTranslationMethod' => $this->string()->defaultValue('site')->notNull(), 'variantTitleTranslationKeyFormat' => $this->string(), + 'variantUiLabelFormat' => $this->string()->notNull()->defaultValue('{title}'), // Product title stuff 'hasProductTitleField' => $this->boolean()->notNull()->defaultValue(true), 'productTitleFormat' => $this->string(), 'productTitleTranslationMethod' => $this->string()->defaultValue('site')->notNull(), 'productTitleTranslationKeyFormat' => $this->string(), + 'productUiLabelFormat' => $this->string()->notNull()->defaultValue('{title}'), // Slug stuff 'showSlugField' => $this->boolean()->notNull()->defaultValue(true), diff --git a/src/migrations/m260206_000000_add_ui_label_formats.php b/src/migrations/m260206_000000_add_ui_label_formats.php new file mode 100644 index 0000000000..10cddc2415 --- /dev/null +++ b/src/migrations/m260206_000000_add_ui_label_formats.php @@ -0,0 +1,52 @@ +db->columnExists(Table::PRODUCTTYPES, 'variantUiLabelFormat')) { + $this->addColumn( + Table::PRODUCTTYPES, + 'variantUiLabelFormat', + $this->string()->notNull()->defaultValue('{title}')->after('variantTitleTranslationKeyFormat') + ); + } + + if (!$this->db->columnExists(Table::PRODUCTTYPES, 'productUiLabelFormat')) { + $this->addColumn( + Table::PRODUCTTYPES, + 'productUiLabelFormat', + $this->string()->notNull()->defaultValue('{title}')->after('productTitleTranslationKeyFormat') + ); + } + + return true; + } + + /** + * @inheritdoc + */ + public function safeDown(): bool + { + $this->dropColumn(Table::PRODUCTTYPES, 'variantUiLabelFormat'); + $this->dropColumn(Table::PRODUCTTYPES, 'productUiLabelFormat'); + + return true; + } +} diff --git a/src/models/ProductType.php b/src/models/ProductType.php index a38649db9e..2f71970083 100644 --- a/src/models/ProductType.php +++ b/src/models/ProductType.php @@ -96,6 +96,12 @@ class ProductType extends Model implements FieldLayoutProviderInterface */ public string $variantTitleFormat = '{product.title}'; + /** + * @var string Variant UI label format + * @since 5.6.0 + */ + public string $variantUiLabelFormat = '{title}'; + /** * @var string Variant title translation method * @phpstan-var Field::TRANSLATION_METHOD_NONE|Field::TRANSLATION_METHOD_SITE|Field::TRANSLATION_METHOD_SITE_GROUP|Field::TRANSLATION_METHOD_LANGUAGE|Field::TRANSLATION_METHOD_CUSTOM @@ -119,6 +125,12 @@ class ProductType extends Model implements FieldLayoutProviderInterface */ public string $productTitleFormat = ''; + /** + * @var string Product UI label format + * @since 5.6.0 + */ + public string $productUiLabelFormat = '{title}'; + /** * @var string Product title translation method * @phpstan-var Field::TRANSLATION_METHOD_NONE|Field::TRANSLATION_METHOD_SITE|Field::TRANSLATION_METHOD_SITE_GROUP|Field::TRANSLATION_METHOD_LANGUAGE|Field::TRANSLATION_METHOD_CUSTOM @@ -665,12 +677,14 @@ public function getConfig(): array 'variantTitleFormat' => $this->variantTitleFormat, 'variantTitleTranslationMethod' => $this->variantTitleTranslationMethod, 'variantTitleTranslationKeyFormat' => $this->variantTitleTranslationKeyFormat, + 'variantUiLabelFormat' => $this->variantUiLabelFormat, // Product title field 'hasProductTitleField' => $this->hasProductTitleField, 'productTitleFormat' => $this->productTitleFormat, 'productTitleTranslationMethod' => $this->productTitleTranslationMethod, 'productTitleTranslationKeyFormat' => $this->productTitleTranslationKeyFormat, + 'productUiLabelFormat' => $this->productUiLabelFormat, // Slug field 'showSlugField' => $this->showSlugField, diff --git a/src/records/ProductType.php b/src/records/ProductType.php index 6f471a5711..bbaa63efb3 100644 --- a/src/records/ProductType.php +++ b/src/records/ProductType.php @@ -33,10 +33,12 @@ * @property string $variantTitleFormat * @property string $variantTitleTranslationMethod * @property string $variantTitleTranslationKeyFormat + * @property string $variantUiLabelFormat * @property bool $hasProductTitleField * @property string $productTitleFormat * @property string $productTitleTranslationMethod * @property string $productTitleTranslationKeyFormat + * @property string $productUiLabelFormat * @property bool $showSlugField * @property string $slugTranslationMethod * @property string $slugTranslationKeyFormat diff --git a/src/services/ProductTypes.php b/src/services/ProductTypes.php index 1512f26967..1b27b0c64d 100755 --- a/src/services/ProductTypes.php +++ b/src/services/ProductTypes.php @@ -408,6 +408,7 @@ public function handleChangedProductType(ConfigEvent $event): void } $productTypeRecord->variantTitleFormat = $variantTitleFormat; $productTypeRecord->hasVariantTitleField = $hasVariantTitleField; + $productTypeRecord->variantUiLabelFormat = $data['variantUiLabelFormat'] ?? '{title}'; // Product title fields $hasProductTitleField = $data['hasProductTitleField']; @@ -418,6 +419,7 @@ public function handleChangedProductType(ConfigEvent $event): void } $productTypeRecord->productTitleFormat = $productTitleFormat; $productTypeRecord->hasProductTitleField = $hasProductTitleField; + $productTypeRecord->productUiLabelFormat = $data['productUiLabelFormat'] ?? '{title}'; // Slug fields $productTypeRecord->showSlugField = $data['showSlugField'] ?? true; @@ -997,6 +999,16 @@ private function _createProductTypeQuery(): Query $query->addSelect('productTypes.previewTargets'); } + /** @since 5.6 */ + if ($db->columnExists(Table::PRODUCTTYPES, 'variantUiLabelFormat')) { + $query->addSelect('productTypes.variantUiLabelFormat'); + } + + /** @since 5.6 */ + if ($db->columnExists(Table::PRODUCTTYPES, 'productUiLabelFormat')) { + $query->addSelect('productTypes.productUiLabelFormat'); + } + return $query; } diff --git a/src/templates/settings/producttypes/_edit.twig b/src/templates/settings/producttypes/_edit.twig index 1aeb8dc038..2cbdc56df0 100644 --- a/src/templates/settings/producttypes/_edit.twig +++ b/src/templates/settings/producttypes/_edit.twig @@ -106,6 +106,17 @@ disabled: disabled, }) }} + + {{ forms.textField({ + label: 'Product UI Label Format'|t('commerce'), + instructions: 'How products should be labeled within the control panel. You can include tags that output product properties, such as {ex}.'|t('commerce', { ex: '{myCustomField}' }), + id: 'productUiLabelFormat', + name: 'productUiLabelFormat', + class: 'code ltr', + value: productType.productUiLabelFormat, + errors: productType.getErrors('productUiLabelFormat'), + disabled: disabled, + }) }} {% endmacro %} {% macro variantTitleFormatField(productType, disabled) %} @@ -179,6 +190,17 @@ }) }} + {{ forms.textField({ + label: 'Variant UI Label Format'|t('commerce'), + instructions: 'How variants should be labeled within the control panel. You can include tags that output variant properties, such as {ex1} or {ex2}.'|t('commerce', { ex1: '{product.title}', ex2: '{myCustomField}' }), + id: 'variantUiLabelFormat', + name: 'variantUiLabelFormat', + class: 'code ltr', + value: productType.variantUiLabelFormat, + errors: productType.getErrors('variantUiLabelFormat'), + disabled: disabled, + }) }} + {% endmacro %} diff --git a/src/translations/en/commerce.php b/src/translations/en/commerce.php index 50a06305b4..18bc4656d1 100644 --- a/src/translations/en/commerce.php +++ b/src/translations/en/commerce.php @@ -884,6 +884,7 @@ 'Product ID is required.' => 'Product ID is required.', 'Product Template' => 'Product Template', 'Product Title Format' => 'Product Title Format', + 'Product UI Label Format' => 'Product UI Label Format', 'Product Type' => 'Product Type', 'Product Types' => 'Product Types', 'Product URI Format' => 'Product URI Format', @@ -1293,6 +1294,7 @@ 'Variant Search' => 'Variant Search', 'Variant Stock' => 'Variant Stock', 'Variant Title Format' => 'Variant Title Format', + 'Variant UI Label Format' => 'Variant UI Label Format', 'Variant Tracks Stock' => 'Variant Tracks Stock', 'Variant has no product.' => 'Variant has no product.', 'Variants not restored.' => 'Variants not restored.', From 2043d34a1b99492100faa75639d6118bb98ac39f Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Thu, 12 Feb 2026 14:19:23 +0800 Subject: [PATCH 30/44] Mitigate cart number enumeration attacks --- CHANGELOG.md | 2 ++ src/controllers/CartController.php | 41 ++++++++++++++++++++++++++++++ src/services/Carts.php | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1826488f25..dd26f9a17a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Cart controller actions that accept an explicit cart number are now rate limited to mitigate enumeration attacks. +- Cart numbers are now generated using a cryptographically secure random number generator. - Fixed a SQL error that could occur when querying for unfulfilled orders on PostgreSQL. ([#4228](https://github.com/craftcms/commerce/issues/4228)) - Fixed an error that could occur when resaving variants. ([#4226](https://github.com/craftcms/commerce/issues/4226)) diff --git a/src/controllers/CartController.php b/src/controllers/CartController.php index 43aaf18298..c7187bfa6e 100644 --- a/src/controllers/CartController.php +++ b/src/controllers/CartController.php @@ -23,6 +23,10 @@ use craft\helpers\StringHelper; use craft\helpers\UrlHelper; use Illuminate\Support\Collection; +use thamtech\ratelimiter\Context; +use thamtech\ratelimiter\handlers\TooManyRequestsHttpExceptionHandler; +use thamtech\ratelimiter\limit\RateLimit; +use thamtech\ratelimiter\RateLimiter; use Throwable; use yii\base\Exception; use yii\base\InvalidConfigException; @@ -76,6 +80,43 @@ public function init(): void parent::init(); } + /** + * @inheritdoc + */ + public function behaviors(): array + { + return parent::behaviors() + [ + 'rateLimiter' => [ + 'class' => RateLimiter::class, + 'only' => ['get-cart', 'update-cart', 'load-cart', 'complete'], + 'components' => [ + 'rateLimit' => [ + 'definitions' => [ + 'cart-by-number' => [ + 'class' => RateLimit::class, + 'limit' => 1, + 'window' => 1, + // Only apply rate limiting when a cart number is explicitly passed + 'active' => function(Context $context, $rateLimitId) { + return $context->request->getBodyParam('number') || $context->request->getQueryParam('number'); + }, + 'identifier' => fn(Context $context, $rateLimitId) => sprintf( + '%s:%s', + $rateLimitId, + $context->request->getUserIP(), + ), + ], + ], + ], + 'allowanceStorage' => [ + 'cache' => 'cache', + ], + ], + 'as tooManyRequestsException' => TooManyRequestsHttpExceptionHandler::class, + ], + ]; + } + /** * Returns the cart as JSON * diff --git a/src/services/Carts.php b/src/services/Carts.php index cde1ccd525..76a3a576be 100644 --- a/src/services/Carts.php +++ b/src/services/Carts.php @@ -279,7 +279,7 @@ public function forgetCart(): void */ public function generateCartNumber(): string { - return md5(uniqid((string)mt_rand(), true)); + return bin2hex(random_bytes(16)); } /** From 1e6e6e89a92d1dc8247535d363fde7eebea443fe Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 10:52:57 +0000 Subject: [PATCH 31/44] Fix injection from element indexes --- CHANGELOG.md | 2 ++ src/elements/db/ProductQuery.php | 7 ++++++- src/elements/db/VariantQuery.php | 5 ++++- src/helpers/ProductQuery.php | 20 ++++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1826488f25..9391208b2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - Fixed a SQL error that could occur when querying for unfulfilled orders on PostgreSQL. ([#4228](https://github.com/craftcms/commerce/issues/4228)) - Fixed an error that could occur when resaving variants. ([#4226](https://github.com/craftcms/commerce/issues/4226)) +- Fixed [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SQL injection vulnerabilities in the control panel. +- Added `craft\commerce\helpers\ProductQuery::cleanseQueryCriteria()`. ## 5.5.3 - 2026-02-09 diff --git a/src/elements/db/ProductQuery.php b/src/elements/db/ProductQuery.php index c821df1847..32387300db 100644 --- a/src/elements/db/ProductQuery.php +++ b/src/elements/db/ProductQuery.php @@ -19,6 +19,7 @@ use craft\elements\db\ElementQuery; use craft\helpers\ArrayHelper; use craft\helpers\Db; +use craft\helpers\ElementHelper; use DateTime; use yii\db\Connection; use yii\db\Expression; @@ -909,6 +910,7 @@ private function _applyProductTypeIdParam(): void */ private function _applyHasVariantParam(): void { + $actionSegments = Craft::$app->getRequest()->getActionSegments(); if ($this->hasVariant === null) { return; } @@ -917,7 +919,10 @@ private function _applyHasVariantParam(): void $variantQuery = $this->hasVariant; } elseif (is_array($this->hasVariant)) { $query = Variant::find(); - $variantQuery = Craft::configure($query, $this->hasVariant); + + $criteria = ProductQueryHelper::cleanseQueryCriteria($this->hasVariant); + + $variantQuery = Craft::configure($query, $criteria); } else { throw new QueryAbortedException('Invalid param used. ProductQuery::hasVariant param only expects a variant query or variant query config.'); } diff --git a/src/elements/db/VariantQuery.php b/src/elements/db/VariantQuery.php index ff90cb9fb3..c4c24fcefb 100755 --- a/src/elements/db/VariantQuery.php +++ b/src/elements/db/VariantQuery.php @@ -794,7 +794,10 @@ private function _applyHasProductParam(): void $productQuery = $this->hasProduct; } elseif (is_array($this->hasProduct)) { $productQuery = Product::find(); - $productQuery = Craft::configure($productQuery, $this->hasProduct); + + $criteria = ProductQueryHelper::cleanseQueryCriteria($this->hasProduct); + + $productQuery = Craft::configure($productQuery, $criteria); } else { return; } diff --git a/src/helpers/ProductQuery.php b/src/helpers/ProductQuery.php index 3bb80ab870..c3dcdc5049 100644 --- a/src/helpers/ProductQuery.php +++ b/src/helpers/ProductQuery.php @@ -7,9 +7,11 @@ namespace craft\commerce\helpers; +use Craft; use craft\base\Element; use craft\commerce\elements\Product; use craft\helpers\Db; +use craft\helpers\ElementHelper; use DateTime; /** @@ -80,4 +82,22 @@ public static function statusCondition(string $status, string $tablePrefix = '') default => false, }; } + + /** + * @param array $criteria + * @return array + */ + public static function cleanseQueryCriteria(array $criteria): array + { + // Figure out if creating the query has come from a request where params are passed to a controller action + $request = Craft::$app->getRequest(); + if (method_exists(ElementHelper::class, 'cleanseQueryCriteria') && $request->getIsCpRequest() && $request->getIsActionRequest()) { + $actionSegments = $request->getActionSegments(); + if (!empty($actionSegments) && in_array($actionSegments[0], ['element-indexes', 'element-search'])) { + $criteria = ElementHelper::cleanseQueryCriteria($criteria); + } + } + + return $criteria; + } } From a329fbbdb9c94e6a51a5ab05f8c891b43879490f Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 10:58:22 +0000 Subject: [PATCH 32/44] remove typo --- src/elements/db/ProductQuery.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/elements/db/ProductQuery.php b/src/elements/db/ProductQuery.php index 32387300db..90ce039124 100644 --- a/src/elements/db/ProductQuery.php +++ b/src/elements/db/ProductQuery.php @@ -910,7 +910,6 @@ private function _applyProductTypeIdParam(): void */ private function _applyHasVariantParam(): void { - $actionSegments = Craft::$app->getRequest()->getActionSegments(); if ($this->hasVariant === null) { return; } From 6dac51177748b9070bc9c9db1009fa32ff15d66b Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 19:28:04 +0000 Subject: [PATCH 33/44] Tidy implementation of `cleanseQueryCriteria()` --- src/helpers/ProductQuery.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/helpers/ProductQuery.php b/src/helpers/ProductQuery.php index c3dcdc5049..d557e28e95 100644 --- a/src/helpers/ProductQuery.php +++ b/src/helpers/ProductQuery.php @@ -10,6 +10,8 @@ use Craft; use craft\base\Element; use craft\commerce\elements\Product; +use craft\controllers\ElementIndexesController; +use craft\controllers\ElementSearchController; use craft\helpers\Db; use craft\helpers\ElementHelper; use DateTime; @@ -86,16 +88,14 @@ public static function statusCondition(string $status, string $tablePrefix = '') /** * @param array $criteria * @return array + * @since 5.6.0 */ public static function cleanseQueryCriteria(array $criteria): array { // Figure out if creating the query has come from a request where params are passed to a controller action - $request = Craft::$app->getRequest(); - if (method_exists(ElementHelper::class, 'cleanseQueryCriteria') && $request->getIsCpRequest() && $request->getIsActionRequest()) { - $actionSegments = $request->getActionSegments(); - if (!empty($actionSegments) && in_array($actionSegments[0], ['element-indexes', 'element-search'])) { - $criteria = ElementHelper::cleanseQueryCriteria($criteria); - } + $controller = Craft::$app->controller; + if ($controller instanceof ElementIndexesController || $controller instanceof ElementSearchController) { + $criteria = ElementHelper::cleanseQueryCriteria($criteria); } return $criteria; From 24b28e673718536d3c2d7ba46513f127cae8d51f Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 19:32:39 +0000 Subject: [PATCH 34/44] Fix cs --- src/elements/db/ProductQuery.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/elements/db/ProductQuery.php b/src/elements/db/ProductQuery.php index 90ce039124..9d25ea7a89 100644 --- a/src/elements/db/ProductQuery.php +++ b/src/elements/db/ProductQuery.php @@ -19,7 +19,6 @@ use craft\elements\db\ElementQuery; use craft\helpers\ArrayHelper; use craft\helpers\Db; -use craft\helpers\ElementHelper; use DateTime; use yii\db\Connection; use yii\db\Expression; From 640c2eb3f2d3ae2941f103d016b46a1bdac6dca4 Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 19:34:00 +0000 Subject: [PATCH 35/44] Bump Craft requirement to 5.9.9+ --- composer.json | 2 +- composer.lock | 138 +++++++++++++++++++++++++------------------------- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/composer.json b/composer.json index 58d3c12e6d..1675852421 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "prefer-stable": true, "require": { "php": "^8.2", - "craftcms/cms": "^5.9.0", + "craftcms/cms": "^5.9.9", "dompdf/dompdf": "^2.0.2", "ibericode/vat": "^1.2.2", "iio/libmergepdf": "^4.0", diff --git a/composer.lock b/composer.lock index 6c9e38fe2d..5d7460400e 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": "5722c0136166cfedca244fa3fc58d187", + "content-hash": "8e3d9e9078db15f2d323c4001d063d0f", "packages": [ { "name": "bacon/bacon-qr-code", @@ -62,16 +62,16 @@ }, { "name": "brick/math", - "version": "0.14.6", + "version": "0.14.8", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3" + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", + "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", "shasum": "" }, "require": { @@ -110,7 +110,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.6" + "source": "https://github.com/brick/math/tree/0.14.8" }, "funding": [ { @@ -118,7 +118,7 @@ "type": "github" } ], - "time": "2026-02-05T07:59:58+00:00" + "time": "2026-02-10T14:33:43+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -475,16 +475,16 @@ }, { "name": "craftcms/cms", - "version": "5.9.6", + "version": "5.9.10", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", - "reference": "558372701d7870da4a3cda88592a21d962de0cb1" + "reference": "2f5149d4d64a5dafae9db99357823655422ba77d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms/zipball/558372701d7870da4a3cda88592a21d962de0cb1", - "reference": "558372701d7870da4a3cda88592a21d962de0cb1", + "url": "https://api.github.com/repos/craftcms/cms/zipball/2f5149d4d64a5dafae9db99357823655422ba77d", + "reference": "2f5149d4d64a5dafae9db99357823655422ba77d", "shasum": "" }, "require": { @@ -601,7 +601,7 @@ "rss": "https://github.com/craftcms/cms/releases.atom", "source": "https://github.com/craftcms/cms" }, - "time": "2026-02-03T16:48:37+00:00" + "time": "2026-02-13T00:01:18+00:00" }, { "name": "craftcms/plugin-installer", @@ -880,29 +880,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -922,9 +922,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/inflector", @@ -7590,16 +7590,16 @@ }, { "name": "webmozart/assert", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" + "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", + "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", "shasum": "" }, "require": { @@ -7646,9 +7646,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.2" + "source": "https://github.com/webmozarts/assert/tree/2.1.3" }, - "time": "2026-01-13T14:02:24+00:00" + "time": "2026-02-13T21:01:40+00:00" }, { "name": "webonyx/graphql-php", @@ -8419,22 +8419,22 @@ }, { "name": "codeception/lib-asserts", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13" + "reference": "f161e5d3a9e5ae573ca01cfb3b5601ff5303df03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/8e161f38a71cdf3dc638c5427df21c0f01f12d13", - "reference": "8e161f38a71cdf3dc638c5427df21c0f01f12d13", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/f161e5d3a9e5ae573ca01cfb3b5601ff5303df03", + "reference": "f161e5d3a9e5ae573ca01cfb3b5601ff5303df03", "shasum": "" }, "require": { "ext-dom": "*", "php": "^8.2 || ^8.3 || ^8.4 || ^8.5", - "phpunit/phpunit": "^11.5 || ^12.0" + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.0" }, "type": "library", "autoload": { @@ -8467,9 +8467,9 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/3.1.0" + "source": "https://github.com/Codeception/lib-asserts/tree/3.2.0" }, - "time": "2025-12-22T08:25:07+00:00" + "time": "2026-02-06T15:19:32+00:00" }, { "name": "codeception/lib-innerbrowser", @@ -8532,23 +8532,23 @@ }, { "name": "codeception/lib-web", - "version": "2.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Codeception/lib-web.git", - "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441" + "reference": "a030a3a22fc8e856b5957086794ed5403c7992d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-web/zipball/bbec12e789c3b810ec8cb86e5f46b5bfd673c441", - "reference": "bbec12e789c3b810ec8cb86e5f46b5bfd673c441", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/a030a3a22fc8e856b5957086794ed5403c7992d9", + "reference": "a030a3a22fc8e856b5957086794ed5403c7992d9", "shasum": "" }, "require": { "ext-mbstring": "*", "guzzlehttp/psr7": "^2.0", "php": "^8.2", - "phpunit/phpunit": "^11.5 | ^12", + "phpunit/phpunit": "^11.5 | ^12 | ^13", "symfony/css-selector": ">=4.4.24 <9.0" }, "conflict": { @@ -8579,9 +8579,9 @@ ], "support": { "issues": "https://github.com/Codeception/lib-web/issues", - "source": "https://github.com/Codeception/lib-web/tree/2.0.1" + "source": "https://github.com/Codeception/lib-web/tree/2.1.0" }, - "time": "2025-11-27T21:09:09+00:00" + "time": "2026-02-06T15:22:13+00:00" }, { "name": "codeception/lib-xml", @@ -8925,27 +8925,27 @@ }, { "name": "codeception/stub", - "version": "4.2.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb" + "reference": "6305b97eaf6ea9bdaed29a5bd4d6f2948f577d8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/0c573cd5c62a828dadadc41bc56f8434860bb7bb", - "reference": "0c573cd5c62a828dadadc41bc56f8434860bb7bb", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/6305b97eaf6ea9bdaed29a5bd4d6f2948f577d8f", + "reference": "6305b97eaf6ea9bdaed29a5bd4d6f2948f577d8f", "shasum": "" }, "require": { "php": "^8.1", - "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12" + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12 | ^13" }, "conflict": { "codeception/codeception": "<5.0.6" }, "require-dev": { - "consolidation/robo": "^3.0" + "consolidation/robo": "^4.0" }, "type": "library", "autoload": { @@ -8960,9 +8960,9 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/4.2.1" + "source": "https://github.com/Codeception/Stub/tree/4.3.0" }, - "time": "2025-12-05T13:37:14+00:00" + "time": "2026-02-06T15:19:04+00:00" }, { "name": "composer/ca-bundle", @@ -9531,16 +9531,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.6.4", + "version": "v6.7.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7" + "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2eeb75d21cf73211335888e7f5e6fd7440723ec7", - "reference": "2eeb75d21cf73211335888e7f5e6fd7440723ec7", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/6fea66c7204683af437864e7c4e7abf383d14bc0", + "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0", "shasum": "" }, "require": { @@ -9600,9 +9600,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.4" + "source": "https://github.com/jsonrainbow/json-schema/tree/v6.7.2" }, - "time": "2025-12-19T15:01:32+00:00" + "time": "2026-02-15T15:06:22+00:00" }, { "name": "league/factory-muffin", @@ -10847,16 +10847,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.51", + "version": "11.5.53", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ad14159f92910b0f0e3928c13e9b2077529de091" + "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad14159f92910b0f0e3928c13e9b2077529de091", - "reference": "ad14159f92910b0f0e3928c13e9b2077529de091", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a997a653a82845f1240d73ee73a8a4e97e4b0607", + "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607", "shasum": "" }, "require": { @@ -10929,7 +10929,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.51" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.53" }, "funding": [ { @@ -10953,20 +10953,20 @@ "type": "tidelift" } ], - "time": "2026-02-05T07:59:30+00:00" + "time": "2026-02-10T12:28:25+00:00" }, { "name": "psy/psysh", - "version": "v0.12.19", + "version": "v0.12.20", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee" + "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a4f766e5c5b6773d8399711019bb7d90875a50ee", - "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/19678eb6b952a03b8a1d96ecee9edba518bb0373", + "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373", "shasum": "" }, "require": { @@ -11030,9 +11030,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.19" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.20" }, - "time": "2026-01-30T17:33:13+00:00" + "time": "2026-02-11T15:05:28+00:00" }, { "name": "rector/rector", @@ -12642,5 +12642,5 @@ "php": "^8.2" }, "platform-dev": {}, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } From 21ed7d7a6b36a60d2536e8e10d70035f5e3aaa3c Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Mon, 16 Feb 2026 19:40:04 +0000 Subject: [PATCH 36/44] Tweak changelogs [ci skip] --- CHANGELOG-WIP.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 2dc3a68d9f..87e9efeed6 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1,4 +1,14 @@ # WIP Release notes for Commerce 5.6 +### Development - Shipping rule categories are now eager loaded on shipping rules automatically. ([#4220](https://github.com/craftcms/commerce/issues/4220)) -- Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. \ No newline at end of file + +### Extensibility +- Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. +- Added `craft\commerce\helpers\ProductQuery::cleanseQueryCriteria()`. + +### System +- Craft Commerce now requires Craft CMS 5.9.9 or later. +- Fixed a SQL error that could occur when querying for unfulfilled orders on PostgreSQL. ([#4228](https://github.com/craftcms/commerce/issues/4228)) +- Fixed an error that could occur when resaving variants. ([#4226](https://github.com/craftcms/commerce/issues/4226)) +- Fixed [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SQL injection vulnerabilities in the control panel. From a81280cb3a1b51e2c339639be39ecde1cf3038fd Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Tue, 17 Feb 2026 13:54:28 +0800 Subject: [PATCH 37/44] rate limit option --- src/controllers/CartController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/CartController.php b/src/controllers/CartController.php index c7187bfa6e..82b96d93f8 100644 --- a/src/controllers/CartController.php +++ b/src/controllers/CartController.php @@ -19,6 +19,7 @@ use craft\elements\User; use craft\errors\ElementNotFoundException; use craft\errors\MissingComponentException; +use craft\helpers\App; use craft\helpers\Json; use craft\helpers\StringHelper; use craft\helpers\UrlHelper; @@ -95,7 +96,7 @@ public function behaviors(): array 'cart-by-number' => [ 'class' => RateLimit::class, 'limit' => 1, - 'window' => 1, + 'window' => (float)App::env('CRAFT_COMMERCE_CART_RATE_LIMIT_WINDOW') ?: 0.5, // Only apply rate limiting when a cart number is explicitly passed 'active' => function(Context $context, $rateLimitId) { return $context->request->getBodyParam('number') || $context->request->getQueryParam('number'); From c3c8f94950eb180bc44f41e9f221452263b1e38a Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 18 Feb 2026 14:50:16 +0800 Subject: [PATCH 38/44] Revert setting --- src/controllers/CartController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/controllers/CartController.php b/src/controllers/CartController.php index 82b96d93f8..61c3640a21 100644 --- a/src/controllers/CartController.php +++ b/src/controllers/CartController.php @@ -19,8 +19,6 @@ use craft\elements\User; use craft\errors\ElementNotFoundException; use craft\errors\MissingComponentException; -use craft\helpers\App; -use craft\helpers\Json; use craft\helpers\StringHelper; use craft\helpers\UrlHelper; use Illuminate\Support\Collection; @@ -96,7 +94,7 @@ public function behaviors(): array 'cart-by-number' => [ 'class' => RateLimit::class, 'limit' => 1, - 'window' => (float)App::env('CRAFT_COMMERCE_CART_RATE_LIMIT_WINDOW') ?: 0.5, + 'window' => 1, // Only apply rate limiting when a cart number is explicitly passed 'active' => function(Context $context, $rateLimitId) { return $context->request->getBodyParam('number') || $context->request->getQueryParam('number'); From ae151a78bab8152db53f92723b049ad6c8f2643c Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 18 Feb 2026 14:51:40 +0800 Subject: [PATCH 39/44] release notes [ci skip] --- CHANGELOG-WIP.md | 4 +++- CHANGELOG.md | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 2dc3a68d9f..44cc291449 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1,4 +1,6 @@ # WIP Release notes for Commerce 5.6 - Shipping rule categories are now eager loaded on shipping rules automatically. ([#4220](https://github.com/craftcms/commerce/issues/4220)) -- Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. \ No newline at end of file +- Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. +- Cart controller actions that accept an explicit cart number are now rate limited to mitigate enumeration attacks. +- Cart numbers are now generated using a cryptographically secure random number generator. \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index dd26f9a17a..1826488f25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,6 @@ ## Unreleased -- Cart controller actions that accept an explicit cart number are now rate limited to mitigate enumeration attacks. -- Cart numbers are now generated using a cryptographically secure random number generator. - Fixed a SQL error that could occur when querying for unfulfilled orders on PostgreSQL. ([#4228](https://github.com/craftcms/commerce/issues/4228)) - Fixed an error that could occur when resaving variants. ([#4226](https://github.com/craftcms/commerce/issues/4226)) From 8f28e081d168ab7e1c08e0f6e84a45973dc6c762 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 18 Feb 2026 15:13:54 +0800 Subject: [PATCH 40/44] Fix import ordering --- src/Plugin.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 1402e6648e..cc41cd36d6 100755 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -44,10 +44,14 @@ use craft\commerce\fieldlayoutelements\VariantTitleField; use craft\commerce\fields\Products as ProductsField; use craft\commerce\fields\Variants as VariantsField; +use craft\commerce\gql\handlers\RelatedProducts; +use craft\commerce\gql\handlers\RelatedVariants; use craft\commerce\gql\interfaces\elements\Product as GqlProductInterface; use craft\commerce\gql\interfaces\elements\Variant as GqlVariantInterface; use craft\commerce\gql\queries\Product as GqlProductQueries; use craft\commerce\gql\queries\Variant as GqlVariantQueries; +use craft\commerce\gql\types\input\criteria\ProductRelation; +use craft\commerce\gql\types\input\criteria\VariantRelation; use craft\commerce\helpers\ProjectConfigData; use craft\commerce\linktypes\Product as ProductLinkType; use craft\commerce\migrations\Install; @@ -145,10 +149,6 @@ use craft\events\RegisterUserPermissionsEvent; use craft\fields\Link; use craft\fixfks\controllers\RestoreController; -use craft\commerce\gql\handlers\RelatedProducts; -use craft\commerce\gql\handlers\RelatedVariants; -use craft\commerce\gql\types\input\criteria\ProductRelation; -use craft\commerce\gql\types\input\criteria\VariantRelation; use craft\gql\ArgumentManager; use craft\gql\ElementQueryConditionBuilder; use craft\helpers\ArrayHelper; From a6dbf66ed8ac39df0ea52af2c597a6534da952f8 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 18 Feb 2026 15:24:52 +0800 Subject: [PATCH 41/44] Move changelog entry to WIP --- CHANGELOG-WIP.md | 1 + CHANGELOG.md | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG-WIP.md b/CHANGELOG-WIP.md index 9346512dc8..c7c17bb737 100644 --- a/CHANGELOG-WIP.md +++ b/CHANGELOG-WIP.md @@ -1,5 +1,6 @@ # WIP Release notes for Commerce 5.6 +- Fixed a bug where Variant with empty SKUs didn't show a validation error when saving a product after it was duplicated. ([#4197](https://github.com/craftcms/commerce/issues/4197)) - Shipping rule categories are now eager loaded on shipping rules automatically. ([#4220](https://github.com/craftcms/commerce/issues/4220)) - Added `craft\commerce\services\ShippingRuleCategories::getShippingRuleCategoriesByRuleIds()`. - Added `variantUiLabelFormat` and `productUiLabelFormat` settings to product types, for customizing how products and variants are labeled throughout the control panel. ([#4178](https://github.com/craftcms/commerce/pull/4178)) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffb7fd330e..1826488f25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,6 @@ - Fixed [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SQL injection vulnerabilities in the control panel. (GHSA-j3x5-mghf-xvfw, GHSA-pmgj-gmm4-jh6j) - Fixed a [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerability in the control panel. (GHSA-cfpv-rmpf-f624) - Fixed [low-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerabilities in the control panel. (GHSA-mqxf-2998-c6cp, GHSA-wj89-2385-gpx3, GHSA-mj32-r678-7mvp) -- Fixed a bug where Variant with empty SKUs didn't show a validation error when saving a product after it was duplicated. ([#4197](https://github.com/craftcms/commerce/issues/4197)) ## 5.5.2 - 2025-12-31 From 08483a592d783cafc7518c81a0a376bdbf43c010 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 18 Feb 2026 15:30:39 +0800 Subject: [PATCH 42/44] Add missing ElementInterface import --- src/fields/Products.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fields/Products.php b/src/fields/Products.php index 6f4b513bf2..3bc9c204a0 100644 --- a/src/fields/Products.php +++ b/src/fields/Products.php @@ -8,6 +8,7 @@ namespace craft\commerce\fields; use Craft; +use craft\base\ElementInterface; use craft\commerce\elements\Product; use craft\commerce\gql\arguments\elements\Product as ProductArguments; use craft\commerce\gql\interfaces\elements\Product as ProductInterface; From 8482e0e0efd97bafaa711467fdc5af6b175ab78d Mon Sep 17 00:00:00 2001 From: Nathaniel Hammond Date: Wed, 18 Feb 2026 09:10:30 +0000 Subject: [PATCH 43/44] rector fix --- src/controllers/CartController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/controllers/CartController.php b/src/controllers/CartController.php index 61c3640a21..cc86b1da4c 100644 --- a/src/controllers/CartController.php +++ b/src/controllers/CartController.php @@ -96,9 +96,7 @@ public function behaviors(): array 'limit' => 1, 'window' => 1, // Only apply rate limiting when a cart number is explicitly passed - 'active' => function(Context $context, $rateLimitId) { - return $context->request->getBodyParam('number') || $context->request->getQueryParam('number'); - }, + 'active' => fn(Context $context, $rateLimitId) => $context->request->getBodyParam('number') || $context->request->getQueryParam('number'), 'identifier' => fn(Context $context, $rateLimitId) => sprintf( '%s:%s', $rateLimitId, From 1c35920772dfcf7d86fb410bd4a143ccef5ee93f Mon Sep 17 00:00:00 2001 From: brandonkelly Date: Wed, 18 Feb 2026 15:48:30 -0800 Subject: [PATCH 44/44] Translation cleanup --- src/templates/settings/producttypes/_edit.twig | 6 +++--- src/translations/en/commerce.php | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/templates/settings/producttypes/_edit.twig b/src/templates/settings/producttypes/_edit.twig index ff6c7c625a..c91f433ba5 100644 --- a/src/templates/settings/producttypes/_edit.twig +++ b/src/templates/settings/producttypes/_edit.twig @@ -108,8 +108,8 @@ {{ forms.textField({ - label: 'Product UI Label Format'|t('commerce'), - instructions: 'How products should be labeled within the control panel. You can include tags that output product properties, such as {ex}.'|t('commerce', { ex: '{myCustomField}' }), + label: 'UI Label Format'|t('app'), + instructions: 'How products should be labeled within the control panel.'|t('commerce'), id: 'productUiLabelFormat', name: 'productUiLabelFormat', class: 'code ltr', @@ -192,7 +192,7 @@ {{ forms.textField({ label: 'Variant UI Label Format'|t('commerce'), - instructions: 'How variants should be labeled within the control panel. You can include tags that output variant properties, such as {ex1} or {ex2}.'|t('commerce', { ex1: '{product.title}', ex2: '{myCustomField}' }), + instructions: 'How variants should be labeled within the control panel.'|t('commerce'), id: 'variantUiLabelFormat', name: 'variantUiLabelFormat', class: 'code ltr', diff --git a/src/translations/en/commerce.php b/src/translations/en/commerce.php index dafc7dcc4e..01b210e147 100644 --- a/src/translations/en/commerce.php +++ b/src/translations/en/commerce.php @@ -43,9 +43,8 @@ 'Address copied to user.' => 'Address copied to user.', 'Address not found.' => 'Address not found.', 'Adjust Quantity' => 'Adjust Quantity', - 'Adjust price when included rate is disqualified?' => 'Adjust price when included rate is disqualified?', - 'Adjust' => 'Adjust', 'Adjust by' => 'Adjust by', + 'Adjust price when included rate is disqualified?' => 'Adjust price when included rate is disqualified?', 'Adjustments' => 'Adjustments', 'Administrative Area Code of Origin' => 'Administrative Area Code of Origin', 'Advanced' => 'Advanced', @@ -529,9 +528,11 @@ 'How many times one email address is allowed to use this discount. This applies to all previous orders, whether guest or user. Set to zero for unlimited use by guests or users.' => 'How many times one email address is allowed to use this discount. This applies to all previous orders, whether guest or user. Set to zero for unlimited use by guests or users.', 'How many times one user is allowed to use this discount. If this is set to something besides zero, the discount will only be available to signed in users.' => 'How many times one user is allowed to use this discount. If this is set to something besides zero, the discount will only be available to signed in users.', 'How many times this discount can be used in total by guests or signed in users. Set zero for unlimited use.' => 'How many times this discount can be used in total by guests or signed in users. Set zero for unlimited use.', + 'How products should be labeled within the control panel.' => 'How products should be labeled within the control panel.', 'How the Purchasables and Categories are related, which determines the matching items. See [Relations Terminology]({link}).' => 'How the Purchasables and Categories are related, which determines the matching items. See [Relations Terminology]({link}).', 'How this product will be described on a line item in an order. You can include tags that output properties, such as {ex1} or {ex2}' => 'How this product will be described on a line item in an order. You can include tags that output properties, such as {ex1} or {ex2}', 'How this shipping method will be referred to in templates and forms.' => 'How this shipping method will be referred to in templates and forms.', + 'How variants should be labeled within the control panel.' => 'How variants should be labeled within the control panel.', 'How you’ll refer to this PDF in the templates.' => 'How you’ll refer to this PDF in the templates.', 'How you’ll refer to this product type in the templates.' => 'How you’ll refer to this product type in the templates.', 'How you’ll refer to this shipping category in the templates.' => 'How you’ll refer to this shipping category in the templates.', @@ -885,7 +886,6 @@ 'Product ID is required.' => 'Product ID is required.', 'Product Template' => 'Product Template', 'Product Title Format' => 'Product Title Format', - 'Product UI Label Format' => 'Product UI Label Format', 'Product Type' => 'Product Type', 'Product Types' => 'Product Types', 'Product URI Format' => 'Product URI Format', @@ -1000,7 +1000,6 @@ 'Set the price to a percentage of the original price' => 'Set the price to a percentage of the original price', 'Set the sale price to a flat amount' => 'Set the sale price to a flat amount', 'Set the sale price to a percentage of the original price' => 'Set the sale price to a percentage of the original price', - 'Set' => 'Set', 'Set to' => 'Set to', 'Settings saved.' => 'Settings saved.', 'Settings' => 'Settings', @@ -1295,8 +1294,8 @@ 'Variant Search' => 'Variant Search', 'Variant Stock' => 'Variant Stock', 'Variant Title Format' => 'Variant Title Format', - 'Variant UI Label Format' => 'Variant UI Label Format', 'Variant Tracks Stock' => 'Variant Tracks Stock', + 'Variant UI Label Format' => 'Variant UI Label Format', 'Variant has no product.' => 'Variant has no product.', 'Variants not restored.' => 'Variants not restored.', 'Variants restored.' => 'Variants restored.',