From 8c4c47fd6975fedceb5bbce8c6813527aded8069 Mon Sep 17 00:00:00 2001 From: Vu Vo Date: Mon, 13 Oct 2025 14:38:22 +0200 Subject: [PATCH 01/26] wip --- composer.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 711571c2..65edf57b 100644 --- a/composer.json +++ b/composer.json @@ -4,12 +4,11 @@ "description": "This bundle allows to assign nestable categories to arbitrary entities in Contao-driven systems.", "license": "LGPL-3.0-or-later", "require": { - "php": "^7.4 || ^8.0", - "contao/core-bundle": "^4.4", - "heimrichhannot/contao-utils-bundle": "^2.210", + "php": "^8.1", + "contao/core-bundle": "^5.3", + "heimrichhannot/contao-utils-bundle": "^3.0", "heimrichhannot/contao-multi-column-editor-bundle": "^2.0", - "wa72/htmlpagedom": "^1.3 || ^2.0", - "heimrichhannot/contao-request-bundle": "^1.0" + "wa72/htmlpagedom": "^1.3 || ^2.0" }, "autoload": { "psr-4": { From c1af4a43605357532ab485704a114eddf8a346f9 Mon Sep 17 00:00:00 2001 From: Vu Vo Date: Mon, 13 Oct 2025 15:51:21 +0200 Subject: [PATCH 02/26] refactoring (wip) --- composer.json | 4 +-- .../config => config}/datacontainers.yml | 2 +- .../config => config}/huh_filter.yml | 0 {src/Resources/config => config}/services.yml | 5 ++- .../contao => contao}/config/config.php | 8 +++-- .../contao => contao}/dca/tl_category.php | 3 +- .../dca/tl_category_association.php | 0 .../dca/tl_category_config.php | 0 .../dca/tl_category_context.php | 0 .../dca/tl_category_property_cache.php | 0 .../contao => contao}/dca/tl_module.php | 0 .../contao => contao}/dca/tl_news.php | 0 .../contao => contao}/dca/tl_news_feed.php | 0 .../contao => contao}/dca/tl_page.php | 0 .../contao => contao}/dca/tl_user.php | 0 .../contao => contao}/dca/tl_user_group.php | 0 .../languages/de/default.php | 0 .../languages/de/modules.php | 0 .../languages/de/tl_category.php | 0 .../languages/de/tl_category_config.php | 0 .../languages/de/tl_category_context.php | 0 .../languages/de/tl_filter_config_element.php | 0 .../languages/de/tl_module.php | 0 .../languages/de/tl_news_feed.php | 0 .../languages/de/tl_page.php | 0 .../languages/de/tl_user.php | 0 .../languages/de/tl_user_group.php | 0 .../languages/en/default.php | 0 .../languages/en/modules.php | 0 .../languages/en/tl_filter_config_element.php | 0 .../languages/en/tl_page.php | 0 .../modules/mod_categoriesMenu.html5 | 0 .../css/contao-categories-bundle.be.css | 0 .../css/contao-categories-bundle.be.css.map | 0 .../css/contao-categories-bundle.be.scss | 0 .../public => public}/img/icon_primarized.png | Bin .../img/icon_unprimarized.png | Bin .../js/contao-categories-bundle.be.js | 0 .../js/contao-categories-bundle.be.min.js | 0 src/CategoriesBundle.php | 7 +++- src/ContaoManager/Plugin.php | 19 +---------- src/DataContainer/NewsContainer.php | 27 ++++++---------- .../CategoriesExtension.php | 13 +++++--- src/EventListener/HookListener.php | 30 ++++++++---------- src/Manager/CategoryManager.php | 16 +++------- src/Picker/CategoryPickerProvider.php | 14 ++++---- 46 files changed, 63 insertions(+), 85 deletions(-) rename {src/Resources/config => config}/datacontainers.yml (73%) rename {src/Resources/config => config}/huh_filter.yml (100%) rename {src/Resources/config => config}/services.yml (95%) rename {src/Resources/contao => contao}/config/config.php (92%) rename {src/Resources/contao => contao}/dca/tl_category.php (99%) rename {src/Resources/contao => contao}/dca/tl_category_association.php (100%) rename {src/Resources/contao => contao}/dca/tl_category_config.php (100%) rename {src/Resources/contao => contao}/dca/tl_category_context.php (100%) rename {src/Resources/contao => contao}/dca/tl_category_property_cache.php (100%) rename {src/Resources/contao => contao}/dca/tl_module.php (100%) rename {src/Resources/contao => contao}/dca/tl_news.php (100%) rename {src/Resources/contao => contao}/dca/tl_news_feed.php (100%) rename {src/Resources/contao => contao}/dca/tl_page.php (100%) rename {src/Resources/contao => contao}/dca/tl_user.php (100%) rename {src/Resources/contao => contao}/dca/tl_user_group.php (100%) rename {src/Resources/contao => contao}/languages/de/default.php (100%) rename {src/Resources/contao => contao}/languages/de/modules.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_category.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_category_config.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_category_context.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_filter_config_element.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_module.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_news_feed.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_page.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_user.php (100%) rename {src/Resources/contao => contao}/languages/de/tl_user_group.php (100%) rename {src/Resources/contao => contao}/languages/en/default.php (100%) rename {src/Resources/contao => contao}/languages/en/modules.php (100%) rename {src/Resources/contao => contao}/languages/en/tl_filter_config_element.php (100%) rename {src/Resources/contao => contao}/languages/en/tl_page.php (100%) rename {src/Resources/contao => contao}/templates/modules/mod_categoriesMenu.html5 (100%) rename {src/Resources/public => public}/css/contao-categories-bundle.be.css (100%) rename {src/Resources/public => public}/css/contao-categories-bundle.be.css.map (100%) rename {src/Resources/public => public}/css/contao-categories-bundle.be.scss (100%) rename {src/Resources/public => public}/img/icon_primarized.png (100%) rename {src/Resources/public => public}/img/icon_unprimarized.png (100%) rename {src/Resources/public => public}/js/contao-categories-bundle.be.js (100%) rename {src/Resources/public => public}/js/contao-categories-bundle.be.min.js (100%) diff --git a/composer.json b/composer.json index 65edf57b..0e24a4e6 100644 --- a/composer.json +++ b/composer.json @@ -5,10 +5,10 @@ "license": "LGPL-3.0-or-later", "require": { "php": "^8.1", - "contao/core-bundle": "^5.3", + "contao/core-bundle": "^5.0", "heimrichhannot/contao-utils-bundle": "^3.0", "heimrichhannot/contao-multi-column-editor-bundle": "^2.0", - "wa72/htmlpagedom": "^1.3 || ^2.0" + "wa72/htmlpagedom": "^3.0" }, "autoload": { "psr-4": { diff --git a/src/Resources/config/datacontainers.yml b/config/datacontainers.yml similarity index 73% rename from src/Resources/config/datacontainers.yml rename to config/datacontainers.yml index f4019464..a353bbed 100644 --- a/src/Resources/config/datacontainers.yml +++ b/config/datacontainers.yml @@ -4,4 +4,4 @@ services: autowire: true HeimrichHannot\CategoriesBundle\DataContainer\: - resource: '../../DataContainer/*' + resource: '../src/DataContainer/*' diff --git a/src/Resources/config/huh_filter.yml b/config/huh_filter.yml similarity index 100% rename from src/Resources/config/huh_filter.yml rename to config/huh_filter.yml diff --git a/src/Resources/config/services.yml b/config/services.yml similarity index 95% rename from src/Resources/config/services.yml rename to config/services.yml index d133ca6c..90535ef7 100644 --- a/src/Resources/config/services.yml +++ b/config/services.yml @@ -1,15 +1,14 @@ services: HeimrichHannot\CategoriesBundle\EventListener\: - resource: '../../EventListener/*' + resource: '../src/EventListener/*' autowire: true public: true huh.categories.manager: class: HeimrichHannot\CategoriesBundle\Manager\CategoryManager public: true - arguments: - - "@contao.framework" + autowire: true huh.categories.config_manager: class: HeimrichHannot\CategoriesBundle\Manager\CategoryConfigManager public: true diff --git a/src/Resources/contao/config/config.php b/contao/config/config.php similarity index 92% rename from src/Resources/contao/config/config.php rename to contao/config/config.php index 53e84829..e851ed54 100644 --- a/src/Resources/contao/config/config.php +++ b/contao/config/config.php @@ -8,6 +8,8 @@ use HeimrichHannot\CategoriesBundle\DataContainer\NewsContainer; use HeimrichHannot\CategoriesBundle\EventListener\HookListener; +use Contao\System; +use Contao\ArrayUtil; $GLOBALS['BE_MOD']['content']['categories'] = [ 'tables' => ['tl_category', 'tl_category_config', 'tl_category_context'], @@ -16,7 +18,7 @@ /* * Front end modules */ -array_insert($GLOBALS['FE_MOD'], 2, [ +$GLOBALS['FE_MOD'] = ArrayUtil::arrayInsert($GLOBALS['FE_MOD'], 2, [ 'categoriesBundle' => [ 'categoriesMenu' => 'HeimrichHannot\CategoriesBundle\Module\ModuleCategoriesMenu', ], @@ -25,7 +27,7 @@ /* * JavaScript */ -if (System::getContainer()->get('huh.utils.container')->isBackend()) { +if ('BE' === $GLOBALS['TL_MODE']) { $GLOBALS['TL_JAVASCRIPT']['contao-categories-bundle'] = 'bundles/categories/js/contao-categories-bundle.be.min.js|static'; } @@ -51,7 +53,7 @@ /* * Assets */ -if (System::getContainer()->get('huh.utils.container')->isBackend()) { +if ('BE' === $GLOBALS['TL_MODE']) { $GLOBALS['TL_CSS']['contao-categories-bundle'] = 'bundles/categories/css/contao-categories-bundle.be.css|static'; } diff --git a/src/Resources/contao/dca/tl_category.php b/contao/dca/tl_category.php similarity index 99% rename from src/Resources/contao/dca/tl_category.php rename to contao/dca/tl_category.php index 9df49251..81952d17 100644 --- a/src/Resources/contao/dca/tl_category.php +++ b/contao/dca/tl_category.php @@ -5,8 +5,9 @@ * * @license LGPL-3.0-or-later */ +use Contao\System; -\System::loadLanguageFile('tl_news_archive'); +System::loadLanguageFile('tl_news_archive'); $GLOBALS['TL_DCA']['tl_category'] = [ 'config' => [ diff --git a/src/Resources/contao/dca/tl_category_association.php b/contao/dca/tl_category_association.php similarity index 100% rename from src/Resources/contao/dca/tl_category_association.php rename to contao/dca/tl_category_association.php diff --git a/src/Resources/contao/dca/tl_category_config.php b/contao/dca/tl_category_config.php similarity index 100% rename from src/Resources/contao/dca/tl_category_config.php rename to contao/dca/tl_category_config.php diff --git a/src/Resources/contao/dca/tl_category_context.php b/contao/dca/tl_category_context.php similarity index 100% rename from src/Resources/contao/dca/tl_category_context.php rename to contao/dca/tl_category_context.php diff --git a/src/Resources/contao/dca/tl_category_property_cache.php b/contao/dca/tl_category_property_cache.php similarity index 100% rename from src/Resources/contao/dca/tl_category_property_cache.php rename to contao/dca/tl_category_property_cache.php diff --git a/src/Resources/contao/dca/tl_module.php b/contao/dca/tl_module.php similarity index 100% rename from src/Resources/contao/dca/tl_module.php rename to contao/dca/tl_module.php diff --git a/src/Resources/contao/dca/tl_news.php b/contao/dca/tl_news.php similarity index 100% rename from src/Resources/contao/dca/tl_news.php rename to contao/dca/tl_news.php diff --git a/src/Resources/contao/dca/tl_news_feed.php b/contao/dca/tl_news_feed.php similarity index 100% rename from src/Resources/contao/dca/tl_news_feed.php rename to contao/dca/tl_news_feed.php diff --git a/src/Resources/contao/dca/tl_page.php b/contao/dca/tl_page.php similarity index 100% rename from src/Resources/contao/dca/tl_page.php rename to contao/dca/tl_page.php diff --git a/src/Resources/contao/dca/tl_user.php b/contao/dca/tl_user.php similarity index 100% rename from src/Resources/contao/dca/tl_user.php rename to contao/dca/tl_user.php diff --git a/src/Resources/contao/dca/tl_user_group.php b/contao/dca/tl_user_group.php similarity index 100% rename from src/Resources/contao/dca/tl_user_group.php rename to contao/dca/tl_user_group.php diff --git a/src/Resources/contao/languages/de/default.php b/contao/languages/de/default.php similarity index 100% rename from src/Resources/contao/languages/de/default.php rename to contao/languages/de/default.php diff --git a/src/Resources/contao/languages/de/modules.php b/contao/languages/de/modules.php similarity index 100% rename from src/Resources/contao/languages/de/modules.php rename to contao/languages/de/modules.php diff --git a/src/Resources/contao/languages/de/tl_category.php b/contao/languages/de/tl_category.php similarity index 100% rename from src/Resources/contao/languages/de/tl_category.php rename to contao/languages/de/tl_category.php diff --git a/src/Resources/contao/languages/de/tl_category_config.php b/contao/languages/de/tl_category_config.php similarity index 100% rename from src/Resources/contao/languages/de/tl_category_config.php rename to contao/languages/de/tl_category_config.php diff --git a/src/Resources/contao/languages/de/tl_category_context.php b/contao/languages/de/tl_category_context.php similarity index 100% rename from src/Resources/contao/languages/de/tl_category_context.php rename to contao/languages/de/tl_category_context.php diff --git a/src/Resources/contao/languages/de/tl_filter_config_element.php b/contao/languages/de/tl_filter_config_element.php similarity index 100% rename from src/Resources/contao/languages/de/tl_filter_config_element.php rename to contao/languages/de/tl_filter_config_element.php diff --git a/src/Resources/contao/languages/de/tl_module.php b/contao/languages/de/tl_module.php similarity index 100% rename from src/Resources/contao/languages/de/tl_module.php rename to contao/languages/de/tl_module.php diff --git a/src/Resources/contao/languages/de/tl_news_feed.php b/contao/languages/de/tl_news_feed.php similarity index 100% rename from src/Resources/contao/languages/de/tl_news_feed.php rename to contao/languages/de/tl_news_feed.php diff --git a/src/Resources/contao/languages/de/tl_page.php b/contao/languages/de/tl_page.php similarity index 100% rename from src/Resources/contao/languages/de/tl_page.php rename to contao/languages/de/tl_page.php diff --git a/src/Resources/contao/languages/de/tl_user.php b/contao/languages/de/tl_user.php similarity index 100% rename from src/Resources/contao/languages/de/tl_user.php rename to contao/languages/de/tl_user.php diff --git a/src/Resources/contao/languages/de/tl_user_group.php b/contao/languages/de/tl_user_group.php similarity index 100% rename from src/Resources/contao/languages/de/tl_user_group.php rename to contao/languages/de/tl_user_group.php diff --git a/src/Resources/contao/languages/en/default.php b/contao/languages/en/default.php similarity index 100% rename from src/Resources/contao/languages/en/default.php rename to contao/languages/en/default.php diff --git a/src/Resources/contao/languages/en/modules.php b/contao/languages/en/modules.php similarity index 100% rename from src/Resources/contao/languages/en/modules.php rename to contao/languages/en/modules.php diff --git a/src/Resources/contao/languages/en/tl_filter_config_element.php b/contao/languages/en/tl_filter_config_element.php similarity index 100% rename from src/Resources/contao/languages/en/tl_filter_config_element.php rename to contao/languages/en/tl_filter_config_element.php diff --git a/src/Resources/contao/languages/en/tl_page.php b/contao/languages/en/tl_page.php similarity index 100% rename from src/Resources/contao/languages/en/tl_page.php rename to contao/languages/en/tl_page.php diff --git a/src/Resources/contao/templates/modules/mod_categoriesMenu.html5 b/contao/templates/modules/mod_categoriesMenu.html5 similarity index 100% rename from src/Resources/contao/templates/modules/mod_categoriesMenu.html5 rename to contao/templates/modules/mod_categoriesMenu.html5 diff --git a/src/Resources/public/css/contao-categories-bundle.be.css b/public/css/contao-categories-bundle.be.css similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.css rename to public/css/contao-categories-bundle.be.css diff --git a/src/Resources/public/css/contao-categories-bundle.be.css.map b/public/css/contao-categories-bundle.be.css.map similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.css.map rename to public/css/contao-categories-bundle.be.css.map diff --git a/src/Resources/public/css/contao-categories-bundle.be.scss b/public/css/contao-categories-bundle.be.scss similarity index 100% rename from src/Resources/public/css/contao-categories-bundle.be.scss rename to public/css/contao-categories-bundle.be.scss diff --git a/src/Resources/public/img/icon_primarized.png b/public/img/icon_primarized.png similarity index 100% rename from src/Resources/public/img/icon_primarized.png rename to public/img/icon_primarized.png diff --git a/src/Resources/public/img/icon_unprimarized.png b/public/img/icon_unprimarized.png similarity index 100% rename from src/Resources/public/img/icon_unprimarized.png rename to public/img/icon_unprimarized.png diff --git a/src/Resources/public/js/contao-categories-bundle.be.js b/public/js/contao-categories-bundle.be.js similarity index 100% rename from src/Resources/public/js/contao-categories-bundle.be.js rename to public/js/contao-categories-bundle.be.js diff --git a/src/Resources/public/js/contao-categories-bundle.be.min.js b/public/js/contao-categories-bundle.be.min.js similarity index 100% rename from src/Resources/public/js/contao-categories-bundle.be.min.js rename to public/js/contao-categories-bundle.be.min.js diff --git a/src/CategoriesBundle.php b/src/CategoriesBundle.php index 8ba450b4..49ad7240 100644 --- a/src/CategoriesBundle.php +++ b/src/CategoriesBundle.php @@ -16,8 +16,13 @@ class CategoriesBundle extends Bundle /** * {@inheritdoc} */ - public function getContainerExtension() + public function getContainerExtension(): CategoriesExtension|\Symfony\Component\DependencyInjection\Extension\ExtensionInterface|null { return new CategoriesExtension(); } + + public function getPath(): string + { + return \dirname(__DIR__); + } } diff --git a/src/ContaoManager/Plugin.php b/src/ContaoManager/Plugin.php index b15bf41b..d04bbcf5 100644 --- a/src/ContaoManager/Plugin.php +++ b/src/ContaoManager/Plugin.php @@ -17,7 +17,7 @@ use HeimrichHannot\CategoriesBundle\CategoriesBundle; use HeimrichHannot\UtilsBundle\Container\ContainerUtil; -class Plugin implements BundlePluginInterface, ExtensionPluginInterface +class Plugin implements BundlePluginInterface { /** * {@inheritdoc} @@ -33,21 +33,4 @@ public function getBundles(ParserInterface $parser) ]), ]; } - - /** - * Allows a plugin to override extension configuration. - * - * @param string $extensionName - * - * @return array - */ - public function getExtensionConfig($extensionName, array $extensionConfigs, ContainerBuilder $container) - { - return ContainerUtil::mergeConfigFile( - 'huh_filter', - $extensionName, - $extensionConfigs, - __DIR__.'/../Resources/config/huh_filter.yml' - ); - } } diff --git a/src/DataContainer/NewsContainer.php b/src/DataContainer/NewsContainer.php index 56da52cf..f4e4ff43 100644 --- a/src/DataContainer/NewsContainer.php +++ b/src/DataContainer/NewsContainer.php @@ -9,27 +9,17 @@ namespace HeimrichHannot\CategoriesBundle\DataContainer; use Contao\Controller; +use Contao\CoreBundle\InsertTag\InsertTagParser; use Contao\Database; use Contao\PageModel; use Contao\StringUtil; use Contao\System; -use HeimrichHannot\UtilsBundle\Model\ModelUtil; +use HeimrichHannot\UtilsBundle\Util\Utils; class NewsContainer { - /** - * @var \HeimrichHannot\UtilsBundle\String\StringUtil - */ - private $stringUtil; - /** - * @var ModelUtil - */ - private $modelUtil; - - public function __construct(\HeimrichHannot\UtilsBundle\String\StringUtil $stringUtil, ModelUtil $modelUtil) + public function __construct(private InsertTagParser $parser, private Utils $utils) { - $this->stringUtil = $stringUtil; - $this->modelUtil = $modelUtil; } public function generateFeeds() @@ -59,6 +49,7 @@ public function generateFeeds() public function generateFiles($arrFeed) { $arrArchives = StringUtil::deserialize($arrFeed['archives']); + $modelUtil = $this->utils->model(); if (!\is_array($arrArchives) || empty($arrArchives)) { return; @@ -113,7 +104,7 @@ public function generateFiles($arrFeed) $arrUrls = []; while ($objArticle->next()) { - if (null === ($archive = $this->modelUtil->findModelInstanceByPk('tl_news_archive', $objArticle->pid))) { + if (null === ($archive = $modelUtil->findModelInstanceByPk('tl_news_archive', $objArticle->pid))) { continue; } @@ -146,7 +137,7 @@ public function generateFiles($arrFeed) $arrCategories = []; $ids = StringUtil::deserialize($objArticle->categories, true); - if (null !== ($objCategories = $this->modelUtil->findMultipleModelInstancesByIds('tl_category', $ids))) { + if (null !== ($objCategories = $modelUtil->findMultipleModelInstancesByIds('tl_category', $ids))) { $arrCategories = $objCategories->fetchEach('title'); } } @@ -196,7 +187,7 @@ public function generateFiles($arrFeed) } } - $strDescription = $this->stringUtil->replaceInsertTags($strDescription, false); + $strDescription = $this->parser->replace($strDescription); $objItem->description = Controller::convertRelativeUrls($strDescription, $strLink); // Add the article image as enclosure @@ -229,9 +220,9 @@ public function generateFiles($arrFeed) // Create the file if (class_exists('Contao\CoreBundle\ContaoCoreBundle')) { - \File::putContent('web/share/'.$strFile.'.xml', $this->stringUtil->replaceInsertTags($objFeed->$strType(), false)); + \File::putContent('web/share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); } else { - \File::putContent('share/'.$strFile.'.xml', $this->stringUtil->replaceInsertTags($objFeed->$strType(), false)); + \File::putContent('share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); } } diff --git a/src/DependencyInjection/CategoriesExtension.php b/src/DependencyInjection/CategoriesExtension.php index cd43db75..6cb3e15f 100644 --- a/src/DependencyInjection/CategoriesExtension.php +++ b/src/DependencyInjection/CategoriesExtension.php @@ -10,17 +10,22 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\DependencyInjection\Extension\Extension; -class CategoriesExtension extends Extension +class CategoriesExtension extends Extension implements PrependExtensionInterface { /** * {@inheritdoc} */ - public function load(array $configs, ContainerBuilder $container) + public function load(array $configs, ContainerBuilder $container):void { - $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + + } + public function prepend(ContainerBuilder $container): void + { + $loader = new YamlFileLoader($container, new FileLocator(\dirname(__DIR__) . '/../config')); $loader->load('services.yml'); $loader->load('datacontainers.yml'); diff --git a/src/EventListener/HookListener.php b/src/EventListener/HookListener.php index de82b757..ab304bac 100644 --- a/src/EventListener/HookListener.php +++ b/src/EventListener/HookListener.php @@ -19,35 +19,33 @@ use HeimrichHannot\CategoriesBundle\Manager\CategoryManager; use HeimrichHannot\CategoriesBundle\Model\CategoryModel; use HeimrichHannot\CategoriesBundle\Widget\CategoryTree; -use HeimrichHannot\RequestBundle\Component\HttpFoundation\Request; use HeimrichHannot\UtilsBundle\Util\Utils; use Psr\Log\LogLevel; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; +use Symfony\Component\HttpFoundation\RequestStack; use Wa72\HtmlPageDom\HtmlPageCrawler; +use Symfony\Component\HttpFoundation\Request; class HookListener { - /** - * @var Request - */ - private $request; - private Utils $utils; - private CategoryManager $categoryManager; - /** * HookListener constructor. */ - public function __construct(Request $request, Utils $utils, CategoryManager $categoryManager) + public function __construct( + private RequestStack $requestStack, + private Utils $utils, + private CategoryManager $categoryManager + ) {} + + protected function getRequest(): ?Request { - $this->request = $request; - $this->utils = $utils; - $this->categoryManager = $categoryManager; + return $this->requestStack->getCurrentRequest(); } public function adjustCategoryTree($buffer, $template) { - if (!$this->request->getGet('picker') || !($field = $this->request->getGet('category_field')) || !($table = $this->request->getGet('category_table'))) { + if (!$this->getRequest()?->query->get('picker') || !($field = $this->getRequest()?->query->get('category_field')) || !($table = $this->getRequest()?->query->get('category_table'))) { return $buffer; } @@ -79,11 +77,11 @@ public function reloadCategoryTree($action, DataContainer $dc) { switch ($action) { case 'reloadCategoryTree': - $id = $this->request->getGet('id'); + $id = $this->getRequest()?->query->get('id'); $field = $dc->inputName = $this->request->getPost('name'); // Handle the keys in "edit multiple" mode - if ('editAll' === $this->request->getGet('act')) { + if ('editAll' === $this->getRequest()?->query->get('act')) { $id = preg_replace('/.*_([0-9a-zA-Z]+)$/', '$1', $field); $field = preg_replace('/(.*)_[0-9a-zA-Z]+$/', '$1', $field); } @@ -101,7 +99,7 @@ public function reloadCategoryTree($action, DataContainer $dc) $value = null; // Load the value - if ('overrideAll' !== $this->request->getGet('act')) { + if ('overrideAll' !== $this->getRequest()?->query->get('act')) { if ('File' === $GLOBALS['TL_DCA'][$dc->table]['config']['dataContainer']) { $value = Config::get($field); } elseif ($id > 0 && Database::getInstance()->tableExists($dc->table)) { diff --git a/src/Manager/CategoryManager.php b/src/Manager/CategoryManager.php index 00d443ec..5f01c8ff 100644 --- a/src/Manager/CategoryManager.php +++ b/src/Manager/CategoryManager.php @@ -9,6 +9,7 @@ namespace HeimrichHannot\CategoriesBundle\Manager; use Contao\Controller; +use Contao\CoreBundle\Framework\ContaoFramework; use Contao\CoreBundle\Framework\ContaoFrameworkInterface; use Contao\Model\Collection; use Contao\StringUtil; @@ -16,20 +17,13 @@ use HeimrichHannot\CategoriesBundle\Backend\CategoryContext; use HeimrichHannot\CategoriesBundle\Model\CategoryAssociationModel; use HeimrichHannot\CategoriesBundle\Model\CategoryModel; +use HeimrichHannot\UtilsBundle\Util\Utils; class CategoryManager { - /** - * @var ContaoFrameworkInterface - */ - protected $framework; - - /** - * Constructor. - */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(private ContaoFramework $framework, private Utils $utils) { - $this->framework = $framework; + $this->framework->initialize(); } /** @@ -37,7 +31,7 @@ public function __construct(ContaoFrameworkInterface $framework) */ public function findByEntityAndCategoryFieldAndTable(int $entity, string $categoryField, string $table, array $options = []) { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); if (null === ($categoryAssociations = $modelUtil->findModelInstancesBy('tl_category_association', ['tl_category_association.categoryField=?', 'tl_category_association.entity=?', 'tl_category_association.parentTable=?'], [$categoryField, $entity, $table], $options))) { return null; diff --git a/src/Picker/CategoryPickerProvider.php b/src/Picker/CategoryPickerProvider.php index e33daa67..b36e1bf9 100644 --- a/src/Picker/CategoryPickerProvider.php +++ b/src/Picker/CategoryPickerProvider.php @@ -18,7 +18,7 @@ class CategoryPickerProvider extends AbstractPickerProvider implements DcaPicker /** * {@inheritdoc} */ - public function getName() + public function getName(): string { return 'categoryPicker'; } @@ -26,7 +26,7 @@ public function getName() /** * {@inheritdoc} */ - public function supportsContext($context) + public function supportsContext($context): bool { return \in_array($context, ['category'], true) && $this->getUser()->hasAccess('categories', 'modules'); } @@ -34,7 +34,7 @@ public function supportsContext($context) /** * {@inheritdoc} */ - public function supportsValue(PickerConfig $config) + public function supportsValue(PickerConfig $config): bool { if ('category' === $config->getContext()) { return is_numeric($config->getValue()); @@ -46,7 +46,7 @@ public function supportsValue(PickerConfig $config) /** * {@inheritdoc} */ - public function getDcaTable() + public function getDcaTable(PickerConfig|null $config = null): string { return 'tl_category'; } @@ -54,7 +54,7 @@ public function getDcaTable() /** * {@inheritdoc} */ - public function getDcaAttributes(PickerConfig $config) + public function getDcaAttributes(PickerConfig $config): array { $value = $config->getValue(); $attributes = ['fieldType' => 'radio']; @@ -89,7 +89,7 @@ public function getDcaAttributes(PickerConfig $config) /** * {@inheritdoc} */ - public function convertDcaValue(PickerConfig $config, $value) + public function convertDcaValue(PickerConfig $config, mixed $value): string|int { if ('category' === $config->getContext()) { return (int) $value; @@ -101,7 +101,7 @@ public function convertDcaValue(PickerConfig $config, $value) /** * {@inheritdoc} */ - protected function getRouteParameters(PickerConfig $config = null) + protected function getRouteParameters(PickerConfig $config = null): array { return [ 'do' => 'categories', From 1e85f3d3e6e3cf6d9b1d9efeca02163804e826f9 Mon Sep 17 00:00:00 2001 From: Vu Vo Date: Tue, 14 Oct 2025 09:22:40 +0200 Subject: [PATCH 03/26] wip --- .gitignore | 1 + composer.json | 8 + composer.lock | 14102 ++++++++++++++++ contao/dca/tl_category.php | 2 +- contao/dca/tl_category_config.php | 2 + rector.php | 38 + src/Backend/Category.php | 108 +- src/Backend/CategoryConfig.php | 5 +- src/Backend/CategoryContext.php | 6 +- src/CategoriesBundle.php | 3 +- .../NewsCategoriesMigrationCommand.php | 9 +- src/ContaoManager/Plugin.php | 3 - src/DataContainer/NewsContainer.php | 65 +- src/DataContainer/NewsFeedContainer.php | 10 +- src/EventListener/HookListener.php | 22 +- .../LoadDataContainerListener.php | 8 +- src/Filter/Choice/CategoriesChoice.php | 13 +- src/Filter/Type/ParentCategoryChoiceType.php | 2 +- src/Manager/CategoryConfigManager.php | 9 +- src/Manager/CategoryContextManager.php | 9 +- src/Manager/CategoryManager.php | 12 +- src/Manager/CategoryPropertyCacheManager.php | 11 +- src/Model/CategoryConfigModel.php | 4 +- src/Module/ModuleCategoriesMenu.php | 14 +- src/Picker/CategoryPickerProvider.php | 4 +- src/Twig/CategoryExtension.php | 6 +- src/Widget/CategoryTree.php | 11 +- 27 files changed, 14323 insertions(+), 164 deletions(-) create mode 100644 composer.lock create mode 100644 rector.php diff --git a/.gitignore b/.gitignore index ca0c747b..d290b25e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ Thumbs.db .DS_Store .sass-cache +vendor diff --git a/composer.json b/composer.json index 0e24a4e6..28ebad6a 100644 --- a/composer.json +++ b/composer.json @@ -29,5 +29,13 @@ }, "suggest": { "heimrichhannot/contao-categories-multilingual-bundle": "Adds multilanguage support for categories bundle." + }, + "require-dev": { + "rector/rector": "^2.2", + "contao/contao-rector": "dev-main", + "symplify/easy-coding-standard": "^12.6", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-symfony": "^2.0", + "contao/manager-plugin": "^2.13" } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..438522a0 --- /dev/null +++ b/composer.lock @@ -0,0 +1,14102 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9a7386c7844f2b3a000a498ed0c10c74", + "packages": [ + { + "name": "ausi/slug-generator", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/ausi/slug-generator.git", + "reference": "4e761b08966c5d4aeecc1829ac997e5a5a29d231" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ausi/slug-generator/zipball/4e761b08966c5d4aeecc1829ac997e5a5a29d231", + "reference": "4e761b08966c5d4aeecc1829ac997e5a5a29d231", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "lib-icu": ">=4.2.1", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "contao/easy-coding-standard": "^3.0", + "phpstan/phpstan": "^0.12.40", + "phpstan/phpstan-phpunit": "^0.12.16", + "phpunit/phpunit": "^7.5.20 || ^8.5.4 || ^9.4.2", + "psalm/plugin-phpunit": "^0.9", + "slam/phpstan-extensions": "^5.0", + "vimeo/psalm": "^3.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ausi\\SlugGenerator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Martin Auswöger", + "email": "martin@auswoeger.com" + } + ], + "description": "Slug Generator", + "keywords": [ + "ascii", + "cldr", + "pretty-url", + "slug", + "slug-generator", + "slugify", + "transliteration", + "unicode" + ], + "support": { + "issues": "https://github.com/ausi/slug-generator/issues", + "source": "https://github.com/ausi/slug-generator/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/ausi", + "type": "github" + } + ], + "time": "2020-10-19T15:25:33+00:00" + }, + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, + { + "name": "brick/math", + "version": "0.13.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.13.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-03-29T13:50:30+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "cmsig/seal", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/PHP-CMSIG/seal.git", + "reference": "bd27cdab23635816c90b9550312883743d26dc6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CMSIG/seal/zipball/bd27cdab23635816c90b9550312883743d26dc6c", + "reference": "bd27cdab23635816c90b9550312883743d26dc6c", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "replace": { + "schranz-search/seal": "self.version" + }, + "require-dev": { + "php-cs-fixer/shim": "^3.51", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^10.3", + "rector/rector": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "CmsIg\\Seal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Schranz", + "email": "alexander@sulu.io" + } + ], + "description": "Search Engine Abstraction Layer", + "keywords": [ + "abstraction", + "algolia", + "cmsig", + "elasticsearch", + "meilisearch", + "opensearch", + "redisearch", + "seal", + "search", + "search-abstraction", + "search-client", + "solr", + "typesense" + ], + "support": { + "source": "https://github.com/PHP-CMSIG/seal/tree/0.12.3" + }, + "funding": [ + { + "url": "https://paypal.me/L91", + "type": "custom" + }, + { + "url": "https://github.com/alexander-schranz", + "type": "github" + } + ], + "time": "2025-09-22T05:48:44+00:00" + }, + { + "name": "cmsig/seal-symfony-bundle", + "version": "0.12.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CMSIG/seal-symfony-bundle.git", + "reference": "dc4d77f050961a0022e8ed477f8bddbe1b36c726" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CMSIG/seal-symfony-bundle/zipball/dc4d77f050961a0022e8ed477f8bddbe1b36c726", + "reference": "dc4d77f050961a0022e8ed477f8bddbe1b36c726", + "shasum": "" + }, + "require": { + "cmsig/seal": "^0.12", + "php": "^8.1", + "symfony/config": "^6.1 || ^7.0", + "symfony/console": "^6.1 || ^7.0", + "symfony/dependency-injection": "^6.1 || ^7.0", + "symfony/http-kernel": "^6.1 || ^7.0" + }, + "conflict": { + "cmsig/seal-algolia-adapter": "<0.12 || >=0.13", + "cmsig/seal-elasticsearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-loupe-adapter": "<0.12 || >=0.13", + "cmsig/seal-meilisearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-memory-adapter": "<0.12 || >=0.13", + "cmsig/seal-multi-adapter": "<0.12 || >=0.13", + "cmsig/seal-opensearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-read-write-adapter": "<0.12 || >=0.13", + "cmsig/seal-redisearch-adapter": "<0.12 || >=0.13", + "cmsig/seal-solr-adapter": "<0.12 || >=0.13", + "cmsig/seal-typesense-adapter": "<0.12 || >=0.13" + }, + "replace": { + "schranz-search/symfony-bundle": "self.version" + }, + "require-dev": { + "cmsig/seal-algolia-adapter": "^0.12", + "cmsig/seal-elasticsearch-adapter": "^0.12", + "cmsig/seal-loupe-adapter": "^0.12", + "cmsig/seal-meilisearch-adapter": "^0.12", + "cmsig/seal-memory-adapter": "^0.12", + "cmsig/seal-multi-adapter": "^0.12", + "cmsig/seal-opensearch-adapter": "^0.12", + "cmsig/seal-read-write-adapter": "^0.12", + "cmsig/seal-redisearch-adapter": "^0.12", + "cmsig/seal-solr-adapter": "^0.12", + "cmsig/seal-typesense-adapter": "^0.12", + "php-cs-fixer/shim": "^3.51", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^10.3", + "rector/rector": "^1.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "CmsIg\\Seal\\Integration\\Symfony\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Schranz", + "email": "alexander@sulu.io" + } + ], + "description": "An integration of CMS-IG SEAL search abstraction into Symfony Framework.", + "keywords": [ + "Bridge", + "abstraction", + "algolia", + "bundle", + "cmsig", + "elasticsearch", + "integration", + "loupe", + "meilisearch", + "opensearch", + "redisearch", + "seal", + "search", + "search-abstraction", + "search-client", + "solr", + "symfony", + "symfony-bundle", + "typesense" + ], + "support": { + "source": "https://github.com/PHP-CMSIG/seal-symfony-bundle/tree/0.12.2" + }, + "funding": [ + { + "url": "https://paypal.me/L91", + "type": "custom" + }, + { + "url": "https://github.com/alexander-schranz", + "type": "github" + } + ], + "time": "2025-08-18T07:52:34+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.5.8", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "719026bb30813accb68271fee7e39552a58e9f65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65", + "reference": "719026bb30813accb68271fee7e39552a58e9f65", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "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.8" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T18:49:47+00:00" + }, + { + "name": "contao-components/ace", + "version": "1.43.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/ace.git", + "reference": "9f124437a7fa0f7a282dd00f892f4dc100bc7111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/ace/zipball/9f124437a7fa0f7a282dd00f892f4dc100bc7111", + "reference": "9f124437a7fa0f7a282dd00f892f4dc100bc7111", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabian Jakobs", + "homepage": "https://github.com/fjakobs" + } + ], + "description": "ACE code editor integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/ace/issues", + "source": "https://github.com/contao-components/ace/tree/1.43.3" + }, + "time": "2025-09-04T07:43:43+00:00" + }, + { + "name": "contao-components/altcha", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/altcha.git", + "reference": "032ee9036bbe96a41133379ce15273624392c839" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/altcha/zipball/032ee9036bbe96a41133379ce15273624392c839", + "reference": "032ee9036bbe96a41133379ce15273624392c839", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Regeci", + "homepage": "https://github.com/ovx" + } + ], + "description": "ALTCHA integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/altcha/issues", + "source": "https://github.com/contao-components/altcha/tree/2.2.3" + }, + "time": "2025-09-16T06:29:35+00:00" + }, + { + "name": "contao-components/choices", + "version": "11.1.0", + "source": { + "type": "git", + "url": "https://github.com/contao-components/choices.git", + "reference": "f87382f3b8243d0b3c4972690906202dd5577eb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/choices/zipball/f87382f3b8243d0b3c4972690906202dd5577eb2", + "reference": "f87382f3b8243d0b3c4972690906202dd5577eb2", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Johnson", + "homepage": "https://github.com/jshjohnson" + } + ], + "description": "Choices integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/choices/issues", + "source": "https://github.com/contao-components/choices/tree/11.1.0" + }, + "time": "2025-08-18T08:37:23+00:00" + }, + { + "name": "contao-components/colorbox", + "version": "1.6.4.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/colorbox.git", + "reference": "80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/colorbox/zipball/80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d", + "reference": "80c3b1b5adff4add0a7a54db93ad0bf15ae6bd9d", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Colorbox integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/colorbox/issues", + "source": "https://github.com/contao-components/colorbox/tree/1.6.6" + }, + "time": "2020-05-01T15:29:20+00:00" + }, + { + "name": "contao-components/contao", + "version": "9.4.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/contao.git", + "reference": "3fb3929e1859a6d6e5567b320eeea0e81ccf051f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/contao/zipball/3fb3929e1859a6d6e5567b320eeea0e81ccf051f", + "reference": "3fb3929e1859a6d6e5567b320eeea0e81ccf051f", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao Open Source CMS components", + "support": { + "issues": "https://github.com/contao-components/contao/issues", + "source": "https://github.com/contao-components/contao/tree/9.4.1" + }, + "time": "2025-08-11T16:22:23+00:00" + }, + { + "name": "contao-components/datepicker", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/datepicker.git", + "reference": "f039ea6ea921abc60f02aee6991c479c85d90151" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/datepicker/zipball/f039ea6ea921abc60f02aee6991c479c85d90151", + "reference": "f039ea6ea921abc60f02aee6991c479c85d90151", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Arian Stolwijk", + "homepage": "https://github.com/arian" + } + ], + "description": "Date picker integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/datepicker/issues", + "source": "https://github.com/contao-components/datepicker/tree/3.0.1" + }, + "time": "2024-11-15T10:05:54+00:00" + }, + { + "name": "contao-components/dropzone", + "version": "5.9.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/dropzone.git", + "reference": "212c524e3c226b01e8232287c764b22d7469df6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/dropzone/zipball/212c524e3c226b01e8232287c764b22d7469df6a", + "reference": "212c524e3c226b01e8232287c764b22d7469df6a", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "DropZone integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/dropzone/issues", + "source": "https://github.com/contao-components/dropzone/tree/5.9.3" + }, + "time": "2021-09-28T07:38:53+00:00" + }, + { + "name": "contao-components/handorgel", + "version": "1.0.0.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/handorgel.git", + "reference": "37cf6c431e847b2dbbbb43fec3a9f134871da01a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/handorgel/zipball/37cf6c431e847b2dbbbb43fec3a9f134871da01a", + "reference": "37cf6c431e847b2dbbbb43fec3a9f134871da01a", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Manuel Sommerhalder", + "homepage": "https://github.com/oncode" + } + ], + "description": "Handorgel integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/handorgel/issues", + "source": "https://github.com/contao-components/handorgel/tree/1.0.0.1" + }, + "time": "2024-02-22T09:17:13+00:00" + }, + { + "name": "contao-components/installer", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/installer.git", + "reference": "eb0c34f0f61a3338dd985a55bd865483e78c3bb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/installer/zipball/eb0c34f0f61a3338dd985a55bd865483e78c3bb7", + "reference": "eb0c34f0f61a3338dd985a55bd865483e78c3bb7", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.6" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "phpunit/phpunit": "^5.7.26" + }, + "type": "composer-plugin", + "extra": { + "class": "Contao\\ComponentsInstaller\\Composer\\Plugin" + }, + "autoload": { + "psr-4": { + "Contao\\ComponentsInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao components installer", + "support": { + "issues": "https://github.com/contao-components/installer/issues", + "source": "https://github.com/contao-components/installer/tree/1.4.1" + }, + "time": "2020-12-23T10:51:52+00:00" + }, + { + "name": "contao-components/jquery", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/jquery.git", + "reference": "34215fee962fc9b9831600d6b983d2f77d9e6f71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/jquery/zipball/34215fee962fc9b9831600d6b983d2f77d9e6f71", + "reference": "34215fee962fc9b9831600d6b983d2f77d9e6f71", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "OpenJS Foundation and other contributors", + "homepage": "https://github.com/jquery/jquery/blob/main/AUTHORS.txt" + } + ], + "description": "jQuery integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/jquery/issues", + "source": "https://github.com/contao-components/jquery/tree/3.7.1" + }, + "time": "2023-08-31T10:23:57+00:00" + }, + { + "name": "contao-components/jquery-ui", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/jquery-ui.git", + "reference": "f1ac19cfd2093663278ffa509038d0ffc6d38db5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/jquery-ui/zipball/f1ac19cfd2093663278ffa509038d0ffc6d38db5", + "reference": "f1ac19cfd2093663278ffa509038d0ffc6d38db5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "jQuery Foundation and other contributors", + "homepage": "https://github.com/jquery/jquery-ui/blob/main/AUTHORS.txt" + } + ], + "description": "jQuery UI integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/jquery-ui/issues", + "source": "https://github.com/contao-components/jquery-ui/tree/1.13.2" + }, + "time": "2022-12-07T15:46:44+00:00" + }, + { + "name": "contao-components/mediabox", + "version": "1.5.4.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/mediabox.git", + "reference": "f22a38ec178c00a1331d22584649082c3fc4cfb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/mediabox/zipball/f22a38ec178c00a1331d22584649082c3fc4cfb5", + "reference": "f22a38ec178c00a1331d22584649082c3fc4cfb5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Einselen", + "homepage": "https://github.com/iaian7" + } + ], + "description": "Mediabox integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/mediabox/issues", + "source": "https://github.com/contao-components/mediabox/tree/1.5.4.3" + }, + "time": "2024-07-05T15:06:42+00:00" + }, + { + "name": "contao-components/mootools", + "version": "1.6.0.9", + "source": { + "type": "git", + "url": "https://github.com/contao-components/mootools.git", + "reference": "89d1d111c663a6a438ff5478fa7053d07e59db10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/mootools/zipball/89d1d111c663a6a438ff5478fa7053d07e59db10", + "reference": "89d1d111c663a6a438ff5478fa7053d07e59db10", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "MooTools Development Team", + "homepage": "http://mootools.net/developers" + } + ], + "description": "MooTools integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/mootools/issues", + "source": "https://github.com/contao-components/mootools/tree/1.6.0.9" + }, + "time": "2024-07-05T14:21:21+00:00" + }, + { + "name": "contao-components/simplemodal", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/contao-components/simplemodal.git", + "reference": "3525e8bbd67e40767ec485864c5be40e04989984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/simplemodal/zipball/3525e8bbd67e40767ec485864c5be40e04989984", + "reference": "3525e8bbd67e40767ec485864c5be40e04989984", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Dell'Anna", + "homepage": "https://plasm.it" + } + ], + "description": "SimpleModal integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/simplemodal/issues", + "source": "https://github.com/contao-components/simplemodal/tree/3.0.3" + }, + "time": "2025-02-17T10:32:20+00:00" + }, + { + "name": "contao-components/swipe", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/swipe.git", + "reference": "fb642c0c82980e6cb7175572aa29cc8c18cacdc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/swipe/zipball/fb642c0c82980e6cb7175572aa29cc8c18cacdc5", + "reference": "fb642c0c82980e6cb7175572aa29cc8c18cacdc5", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brad Birdsall", + "homepage": "https://github.com/thebird" + }, + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "A JavaScript touch slider with dot menu", + "support": { + "issues": "https://github.com/contao-components/swipe/issues", + "source": "https://github.com/contao-components/swipe/tree/2.2.2" + }, + "time": "2024-07-05T15:28:51+00:00" + }, + { + "name": "contao-components/swiper", + "version": "11.2.10", + "source": { + "type": "git", + "url": "https://github.com/contao-components/swiper.git", + "reference": "5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/swiper/zipball/5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8", + "reference": "5d8da897acb7716c5e2508b7fc3a53e9e5cb3ab8", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Vladimir Kharlampidi", + "homepage": "https://github.com/nolimits4web" + } + ], + "description": "The most modern mobile touch slider", + "support": { + "issues": "https://github.com/contao-components/swiper/issues", + "source": "https://github.com/contao-components/swiper/tree/11.2.10" + }, + "time": "2025-07-02T08:21:38+00:00" + }, + { + "name": "contao-components/tablesort", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tablesort.git", + "reference": "3111796f82456a279feb9ad305e54fbd422a2f28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tablesort/zipball/3111796f82456a279feb9ad305e54fbd422a2f28", + "reference": "3111796f82456a279feb9ad305e54fbd422a2f28", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + } + ], + "description": "Contao Open Source CMS tablesort", + "support": { + "issues": "https://github.com/contao-components/tablesort/issues", + "source": "https://github.com/contao-components/tablesort/tree/4.0.2" + }, + "time": "2024-07-05T15:15:09+00:00" + }, + { + "name": "contao-components/tablesorter", + "version": "2.31.3.1", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tablesorter.git", + "reference": "9b3439f59c8b7aa5e2d7a136726f7c2918c11e76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tablesorter/zipball/9b3439f59c8b7aa5e2d7a136726f7c2918c11e76", + "reference": "9b3439f59c8b7aa5e2d7a136726f7c2918c11e76", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Garrison", + "homepage": "https://github.com/Mottie" + } + ], + "description": "jQuery tablesorter integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tablesorter/issues", + "source": "https://github.com/contao-components/tablesorter/tree/2.31.3.1" + }, + "time": "2024-08-16T09:33:19+00:00" + }, + { + "name": "contao-components/tinymce4", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tinymce4.git", + "reference": "0ab6cd90c16333287c4fbe0405802ee3a1983add" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tinymce4/zipball/0ab6cd90c16333287c4fbe0405802ee3a1983add", + "reference": "0ab6cd90c16333287c4fbe0405802ee3a1983add", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Tiny", + "homepage": "https://github.com/tinymce" + } + ], + "description": "TinyMCE integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tinymce4/issues", + "source": "https://github.com/contao-components/tinymce4/tree/8.1.2" + }, + "time": "2025-09-22T05:28:00+00:00" + }, + { + "name": "contao-components/tristen-tablesort", + "version": "5.6.0", + "source": { + "type": "git", + "url": "https://github.com/contao-components/tristen-tablesort.git", + "reference": "3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao-components/tristen-tablesort/zipball/3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba", + "reference": "3069dd402b07e16ea8bb5f8dcce377e0b2ead1ba", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tristen Brown", + "homepage": "https://github.com/tristen" + } + ], + "description": "Tablesort integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/contao-components/tristen-tablesort/issues", + "source": "https://github.com/contao-components/tristen-tablesort/tree/5.6.0" + }, + "time": "2025-04-28T09:32:41+00:00" + }, + { + "name": "contao/core-bundle", + "version": "5.6.3", + "source": { + "type": "git", + "url": "https://github.com/contao/core-bundle.git", + "reference": "534b9cd26c25b81325a234adae93005b883c85f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/core-bundle/zipball/534b9cd26c25b81325a234adae93005b883c85f4", + "reference": "534b9cd26c25b81325a234adae93005b883c85f4", + "shasum": "" + }, + "require": { + "ausi/slug-generator": "^1.1", + "bacon/bacon-qr-code": "^2.0", + "cmsig/seal": "^0.12", + "cmsig/seal-symfony-bundle": "^0.12", + "composer-runtime-api": "^2.0.14", + "contao-components/ace": "^1.8", + "contao-components/altcha": "^1.0 || ^2.0", + "contao-components/choices": "^11.0", + "contao-components/colorbox": "^1.6", + "contao-components/contao": "^9.1", + "contao-components/datepicker": "^3.0", + "contao-components/dropzone": "^5.0.1", + "contao-components/handorgel": "^1.0", + "contao-components/jquery": "^3.5", + "contao-components/jquery-ui": "^1.11.4", + "contao-components/mediabox": "^1.5", + "contao-components/mootools": "^1.6.0.1", + "contao-components/simplemodal": "^3.0", + "contao-components/swipe": "^2.0.3", + "contao-components/swiper": "^11.0", + "contao-components/tablesort": "^4.0", + "contao-components/tablesorter": "^2.1", + "contao-components/tinymce4": "^5.0 || ^6.0 || ^7.0 || ^8.0", + "contao-components/tristen-tablesort": "^5.3", + "contao/image": "^1.2", + "contao/imagine-svg": "^1.0", + "doctrine/collections": "^2.1", + "doctrine/dbal": "^3.7 || ^4.3", + "doctrine/doctrine-bundle": "^2.8", + "doctrine/orm": "^2.17 || ^3.0", + "doctrine/persistence": "^3.2", + "dragonmantank/cron-expression": "^3.1", + "enshrined/svg-sanitize": "^0.22", + "ext-dom": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-intl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-zlib": "*", + "friendsofsymfony/http-cache": "^3.0", + "friendsofsymfony/http-cache-bundle": "^3.0", + "guzzlehttp/promises": "^1.5 || ^2.0", + "imagine/imagine": "^1.2.4", + "knplabs/knp-menu": "^3.1", + "knplabs/knp-menu-bundle": "^3.0", + "knplabs/knp-time-bundle": "^1.11 || ^2.0", + "lcobucci/jwt": "^4.0 || ^5.0", + "league/commonmark": "^2.2", + "league/flysystem": "^3.7", + "league/flysystem-bundle": "^3.0", + "league/flysystem-local": "^3.0", + "matthiasmullie/minify": "^1.3", + "monolog/monolog": "^3.0", + "nelmio/cors-bundle": "^2.0.1", + "nelmio/security-bundle": "^3.0", + "nikic/php-parser": "^5.0", + "nyholm/psr7": "^1.2", + "paragonie/constant_time_encoding": "^2.8 || ^3.1", + "php": "^8.2", + "php-feed-io/feed-io": "^6.0", + "phpspec/php-diff": "^1.0", + "psr/cache": "^3.0", + "psr/container": "^2.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.1 || 2.0 || ^3.0", + "scheb/2fa-backup-code": "^6.0 || ^7.0", + "scheb/2fa-bundle": "^6.0 || ^7.0", + "scheb/2fa-trusted-device": "^6.0 || ^7.0", + "scrivo/highlight.php": "^9.18", + "scssphp/scssphp": "^1.5 || ^2.0", + "simplepie/simplepie": "^1.3", + "spatie/schema-org": "^3.4", + "spomky-labs/otphp": "^11.3", + "symfony-cmf/routing": "^3.0", + "symfony-cmf/routing-bundle": "^3.0", + "symfony/asset": "^6.4 || ^7.0", + "symfony/cache-contracts": "^3.0", + "symfony/clock": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^3.0", + "symfony/doctrine-bridge": "^6.4 || ^7.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/dom-crawler": "^6.4 || ^7.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/event-dispatcher-contracts": "^3.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/filesystem": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/html-sanitizer": "^6.4 || ^7.0", + "symfony/http-client": "^6.4 || ^7.0", + "symfony/http-client-contracts": "^3.1", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/intl": "^6.4 || ^7.0", + "symfony/mailer": "^6.4 || ^7.0", + "symfony/messenger": "^7.2", + "symfony/mime": "^6.4 || ^7.0", + "symfony/monolog-bridge": "^6.4 || ^7.0", + "symfony/password-hasher": "^6.4 || ^7.0", + "symfony/polyfill-intl-idn": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/process": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/rate-limiter": "^6.4 || ^7.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/security-core": "^6.4 || ^7.0", + "symfony/security-csrf": "^6.4 || ^7.0", + "symfony/security-http": "^6.4 || ^7.0", + "symfony/service-contracts": "^3.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/translation": "^6.4 || ^7.0", + "symfony/translation-contracts": "^3.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/uid": "^6.4 || ^7.0", + "symfony/var-dumper": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "terminal42/escargot": "^1.6", + "terminal42/service-annotation-bundle": "^1.1", + "toflar/cronjob-supervisor": "^2.0", + "twig/string-extra": "^3.0", + "twig/twig": "^3.15", + "ua-parser/uap-php": "^3.9", + "web-auth/webauthn-lib": "^5.0", + "web-auth/webauthn-stimulus": "^5.0", + "web-auth/webauthn-symfony-bundle": "^5.0", + "webignition/robots-txt-file": "^3.0", + "wikimedia/less.php": "^1.7" + }, + "conflict": { + "contao-community-alliance/composer-plugin": "<3.0", + "contao/core": "*", + "contao/manager-bundle": "^4.5 <4.5.2", + "contao/manager-plugin": "<2.0 || >=3.0", + "doctrine/cache": "<1.10", + "terminal42/contao-ce-access": "<3.0", + "thecodingmachine/safe": "<1.2", + "web-auth/webauthn-symfony-bundle": "5.1.* <5.1.3 || 5.2.0 || 5.2.1" + }, + "require-dev": { + "cmsig/seal-memory-adapter": "^0.12", + "contao/manager-plugin": "^2.3.1", + "contao/news-bundle": "self.version", + "contao/test-case": "self.version", + "doctrine/annotations": "^2.0", + "ext-fileinfo": "*", + "league/flysystem-memory": "^3.0", + "phpunit/phpunit": "^11.5", + "sebastian/diff": "^6.0", + "symfony/browser-kit": "^6.4 || ^7.0", + "symfony/cache": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "contao-manager-plugin": "Contao\\CoreBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "Contao\\CoreBundle\\": "src/" + }, + "classmap": [ + "contao/" + ], + "exclude-from-classmap": [ + "contao/config/", + "contao/dca/", + "contao/languages/", + "contao/templates/", + "contao/themes/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Leo Feyer", + "homepage": "https://github.com/leofeyer" + }, + { + "name": "Contao Community", + "homepage": "https://contao.org/contributors" + } + ], + "description": "Contao Open Source CMS", + "homepage": "https://contao.org", + "support": { + "docs": "https://docs.contao.org", + "forum": "https://community.contao.org", + "issues": "https://github.com/contao/contao/issues", + "source": "https://github.com/contao/core-bundle" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "other" + } + ], + "time": "2025-09-30T09:14:31+00:00" + }, + { + "name": "contao/image", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/contao/image.git", + "reference": "8745f15d2d43351b85a261c9c1d23038f73e8dcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/image/zipball/8745f15d2d43351b85a261c9c1d23038f73e8dcc", + "reference": "8745f15d2d43351b85a261c9c1d23038f73e8dcc", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-zlib": "*", + "imagine/imagine": "^1.3", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php73": "^1.27", + "symfony/polyfill-php80": "^1.27" + }, + "conflict": { + "contao/imagine-svg": "<1.0 || >=2.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "contao/imagine-svg": "^1.0", + "contao/test-case": "^4.5", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php81": "^1.27" + }, + "suggest": { + "ext-exif": "To support EXIF auto-rotation and preserve copyright metadata" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\Image\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Martin Auswöger", + "homepage": "https://github.com/ausi" + } + ], + "description": "Contao image library", + "support": { + "issues": "https://github.com/contao/image/issues", + "source": "https://github.com/contao/image/tree/1.2.3" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2025-02-13T13:02:15+00:00" + }, + { + "name": "contao/imagine-svg", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/contao/imagine-svg.git", + "reference": "3e8c7356951a94bc8ff6338296496a2a3cd23dc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/imagine-svg/zipball/3e8c7356951a94bc8ff6338296496a2a3cd23dc4", + "reference": "3e8c7356951a94bc8ff6338296496a2a3cd23dc4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "imagine/imagine": "^1.1", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "composer/semver": "^3.3", + "contao/test-case": "^4.4", + "phpunit/phpunit": "^8.5.4", + "symfony/filesystem": "^5.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\ImagineSvg\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Martin Auswöger", + "homepage": "https://github.com/ausi" + } + ], + "description": "Contao Imagine SVG library", + "support": { + "issues": "https://github.com/contao/imagine-svg/issues", + "source": "https://github.com/contao/imagine-svg/tree/1.0.4" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2024-10-02T10:47:33+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" + }, + "time": "2025-09-16T12:23:56+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.2" + }, + "abandoned": true, + "time": "2024-09-05T10:17:24+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "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 Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.3.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2025-03-22T10:17:19+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.10.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/65edaca19a752730f290ec2fb89d593cb40afb43", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/cache": "< 1.11" + }, + "require-dev": { + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "14.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.29", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "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" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.10.3" + }, + "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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-10-09T09:05:12+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.18.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", + "doctrine/sql-formatter": "^1.0.1", + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", + "doctrine/orm": "<2.17 || >=4.0", + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.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%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-10-11T04:43:27+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "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" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2024-05-22T20:47:39+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/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "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": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "doctrine/orm", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", + "ext-ctype": "*", + "php": "^8.1", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.3.9 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "^13.0", + "phpbench/phpbench": "^1.0", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.4.0", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.12.0", + "symfony/cache": "^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "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": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/3.5.2" + }, + "time": "2025-08-08T17:00:40+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "23069c8cfc19d7825e9fbe3341227d8c51eff2bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/23069c8cfc19d7825e9fbe3341227d8c51eff2bc", + "reference": "23069c8cfc19d7825e9fbe3341227d8c51eff2bc", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "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" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.4.1" + }, + "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%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2025-09-29T06:33:58+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "enshrined/svg-sanitize", + "version": "0.22.0", + "source": { + "type": "git", + "url": "https://github.com/darylldoyle/svg-sanitizer.git", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/0afa95ea74be155a7bcd6c6fb60c276c39984500", + "reference": "0afa95ea74be155a7bcd6c6fb60c276c39984500", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^8.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "enshrined\\svgSanitize\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Daryll Doyle", + "email": "daryll@enshrined.co.uk" + } + ], + "description": "An SVG sanitizer for PHP", + "support": { + "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.22.0" + }, + "time": "2025-08-12T10:13:48+00:00" + }, + { + "name": "friendsofsymfony/http-cache", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSHttpCache.git", + "reference": "c5ed7189df2cf0550541c6d1a3d2fb558213e403" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/zipball/c5ed7189df2cf0550541c6d1a3d2fb558213e403", + "reference": "c5ed7189df2cf0550541c6d1a3d2fb558213e403", + "shasum": "" + }, + "require": { + "php": "^8.1", + "php-http/async-client-implementation": "^1.1.0 || ^2.0", + "php-http/client-common": "^1.1.0 || ^2.0", + "php-http/discovery": "^1.12", + "psr/http-client-implementation": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/options-resolver": "^6.4 || ^7.0" + }, + "conflict": { + "toflar/psr6-symfony-http-cache-store": "<2.2.1" + }, + "require-dev": { + "mockery/mockery": "^1.6.0", + "monolog/monolog": "^1.0", + "php-http/guzzle7-adapter": "^1", + "php-http/mock-client": "^1.6.0", + "phpunit/phpunit": "^10.5", + "symfony/http-kernel": "^6.4|| ^7.0", + "symfony/process": "^6.4|| ^7.0" + }, + "suggest": { + "friendsofsymfony/http-cache-bundle": "For integration with the Symfony framework", + "monolog/monolog": "For logging issues while invalidating", + "phpunit/phpunit": "To build tests with the WebServerSubscriber, ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "FOS\\HttpCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Driebit", + "email": "tech@driebit.nl", + "homepage": "http://www.driebit.nl" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCache/contributors" + } + ], + "description": "Tools to manage HTTP caching proxies with PHP", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCache", + "keywords": [ + "caching", + "http", + "invalidation", + "nginx", + "purge", + "varnish" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSHttpCache/issues", + "source": "https://github.com/FriendsOfSymfony/FOSHttpCache/tree/3.1.1" + }, + "time": "2025-06-17T09:10:02+00:00" + }, + { + "name": "friendsofsymfony/http-cache-bundle", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle.git", + "reference": "389b6d84d6fc754279eb52cbdd57f1952907dc0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSHttpCacheBundle/zipball/389b6d84d6fc754279eb52cbdd57f1952907dc0e", + "reference": "389b6d84d6fc754279eb52cbdd57f1952907dc0e", + "shasum": "" + }, + "require": { + "friendsofsymfony/http-cache": "^3.0", + "php": "^8.1", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "symfony/monolog-bridge": "<3.4.4", + "twig/twig": "<1.12.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.54", + "guzzlehttp/guzzle": "^7.2", + "jean-beru/fos-http-cache-cloudfront": "^1.1.1", + "matthiasnoback/symfony-config-test": "^4.3.0 || ^5.1", + "matthiasnoback/symfony-dependency-injection-test": "^4.3.1 || ^5.0", + "mockery/mockery": "^1.6.9", + "monolog/monolog": "*", + "php-http/discovery": "^1.13", + "php-http/guzzle7-adapter": "^0.1.1", + "php-http/httplug": "^2.2.0", + "php-http/message": "^1.0 || ^2.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.5", + "symfony/browser-kit": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/css-selector": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^v3.8" + }, + "suggest": { + "jean-beru/fos-http-cache-cloudfront": "To use CloudFront proxy", + "sensio/framework-extra-bundle": "For Tagged Cache Invalidation", + "symfony/console": "To send invalidation requests from the command line", + "symfony/expression-language": "For Tagged Cache Invalidation" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "FOS\\HttpCacheBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Driebit", + "email": "tech@driebit.nl", + "homepage": "http://www.driebit.nl" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/friendsofsymfony/FOSHttpCacheBundle/contributors" + } + ], + "description": "Set path based HTTP cache headers and send invalidation requests to your HTTP cache", + "homepage": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle", + "keywords": [ + "caching", + "esi", + "http", + "invalidation", + "purge", + "varnish" + ], + "support": { + "issues": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle/issues", + "source": "https://github.com/FriendsOfSymfony/FOSHttpCacheBundle/tree/3.2.0" + }, + "time": "2025-06-17T14:04:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "heimrichhannot-contao-components/sortablejs", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot-contao-components/sortablejs.git", + "reference": "d4083809bf17094bb48383994bcc9b8e2a73171c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot-contao-components/sortablejs/zipball/d4083809bf17094bb48383994bcc9b8e2a73171c", + "reference": "d4083809bf17094bb48383994bcc9b8e2a73171c", + "shasum": "" + }, + "require": { + "contao-components/installer": "^1.0.9" + }, + "type": "contao-component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "homepage": "http://www.heimrich-hannot.de" + } + ], + "description": "sortablejs integration for Contao Open Source CMS", + "support": { + "issues": "https://github.com/heimrichhannot-contao-components/sortablejs/issues", + "source": "https://github.com/heimrichhannot-contao-components/sortablejs/tree/1.8.4" + }, + "time": "2019-03-19T14:52:21+00:00" + }, + { + "name": "heimrichhannot/contao-ajax-bundle", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-ajax-bundle.git", + "reference": "cc3d241415c3477c09dd89fccde7e7812614bad2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-ajax-bundle/zipball/cc3d241415c3477c09dd89fccde7e7812614bad2", + "reference": "cc3d241415c3477c09dd89fccde7e7812614bad2", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.13 || ^5.0", + "heimrichhannot/contao-utils-bundle": "^2.217 || ^3.0", + "php": "^8.2", + "symfony/http-foundation": "^5.4 || ^6.0" + }, + "require-dev": { + "contao/contao-rector": "dev-main", + "contao/manager-plugin": "^2.0", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-symfony": "^1.4", + "rector/rector": "^1.2", + "symplify/easy-coding-standard": "^12.5" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\AjaxBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\AjaxBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "email": "digitales@heimrich-hannot.de", + "homepage": "http://www.heimrich-hannot.de", + "role": "Developer" + } + ], + "description": "Keep contao ajax requests organized and handle responses with ease.", + "homepage": "https://github.com/heimrichhannot/contao-ajax-bundle", + "keywords": [ + "ajax", + "contao", + "request", + "response" + ], + "support": { + "issues": "https://github.com/heimrichhannot/contao-ajax-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-ajax-bundle/tree/1.5.1" + }, + "time": "2025-01-03T10:45:35+00:00" + }, + { + "name": "heimrichhannot/contao-encore-contracts", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-encore-contracts.git", + "reference": "1ba9028736e551c79035475daeb5a91ee948628d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-encore-contracts/zipball/1ba9028736e551c79035475daeb5a91ee948628d", + "reference": "1ba9028736e551c79035475daeb5a91ee948628d", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "HeimrichHannot\\EncoreContracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot GmbH", + "email": "digitales@heimrich-hannot.de", + "homepage": "https://heimrich-hannot.de", + "role": "developer" + } + ], + "description": "A set of abstractions needed for encore bundle preparation.", + "homepage": "https://github.com/heimrichhannot/contao-encore-contracts", + "support": { + "issues": "https://github.com/heimrichhannot/contao-encore-contracts/issues", + "source": "https://github.com/heimrichhannot/contao-encore-contracts/tree/1.1.0" + }, + "time": "2025-09-04T09:47:11+00:00" + }, + { + "name": "heimrichhannot/contao-multi-column-editor-bundle", + "version": "2.20.3", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle.git", + "reference": "273c289378485ab0c3b31cbbe6540a09185f5819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-multi-column-editor-bundle/zipball/273c289378485ab0c3b31cbbe6540a09185f5819", + "reference": "273c289378485ab0c3b31cbbe6540a09185f5819", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.9 || ^5.0", + "heimrichhannot-contao-components/sortablejs": "^1.8", + "heimrichhannot/contao-ajax-bundle": "^1.0", + "heimrichhannot/contao-encore-contracts": "^1.0.2", + "heimrichhannot/contao-utils-bundle": "^2.225 || ^3.0", + "php": "^7.4 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^1.0 || ^2.0 || ^3.0", + "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" + }, + "replace": { + "heimrichhannot/contao-multi_column_editor": "*" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\MultiColumnEditorBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\MultiColumnEditorBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Heimrich & Hannot", + "email": "digitales@heimrich-hannot.de", + "homepage": "https://www.heimrich-hannot.de", + "role": "Developer" + } + ], + "description": "This module offers an input type for editing one or more records in frontend and backend.", + "homepage": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle", + "keywords": [ + "column", + "contao", + "edit", + "editor", + "multi", + "wizard" + ], + "support": { + "issues": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-multi-column-editor-bundle/tree/2.20.3" + }, + "time": "2025-10-02T12:38:35+00:00" + }, + { + "name": "heimrichhannot/contao-utils-bundle", + "version": "3.9.4", + "source": { + "type": "git", + "url": "https://github.com/heimrichhannot/contao-utils-bundle.git", + "reference": "a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/heimrichhannot/contao-utils-bundle/zipball/a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1", + "reference": "a28bbf7e889a3bb36cdc2166968fd3df3d2efbc1", + "shasum": "" + }, + "require": { + "contao/core-bundle": "^4.13 || ^5.0", + "doctrine/dbal": "^2.13 || ^3.0", + "ext-dom": "*", + "ext-simplexml": "*", + "php": "^8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/event-dispatcher-contracts": "^1.0 || ^2.0 || ^3.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/http-foundation": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/string": "^5.2 || ^6.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "contao/contao-rector": "dev-main", + "contao/manager-plugin": "^2.0", + "contao/test-case": "^4.13 || ^5.0", + "heimrichhannot/contao-test-utilities-bundle": "^0.1", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": "^1.10 || ^2.0", + "phpstan/phpstan-symfony": "^1.2 || ^2.0", + "phpunit/phpunit": "^8.0 || ^9.0", + "rector/rector": "^1.2 || ^2.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0" + }, + "type": "contao-bundle", + "extra": { + "contao-manager-plugin": "HeimrichHannot\\UtilsBundle\\ContaoManager\\Plugin" + }, + "autoload": { + "psr-4": { + "HeimrichHannot\\UtilsBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "This bundle offers various utility functionality for the Contao CMS.", + "support": { + "issues": "https://github.com/heimrichhannot/contao-utils-bundle/issues", + "source": "https://github.com/heimrichhannot/contao-utils-bundle/tree/3.9.4" + }, + "time": "2025-10-02T07:05:35+00:00" + }, + { + "name": "imagine/imagine", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-imagine/Imagine.git", + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/80ab21434890dee9ba54969d31c51ac8d4d551e0", + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" + }, + "suggest": { + "ext-exif": "to read EXIF metadata", + "ext-gd": "to use the GD implementation", + "ext-gmagick": "to use the Gmagick implementation", + "ext-imagick": "to use the Imagick implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Imagine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com", + "homepage": "http://avalanche123.com" + } + ], + "description": "Image processing for PHP", + "homepage": "http://imagine.readthedocs.org/", + "keywords": [ + "drawing", + "graphics", + "image manipulation", + "image processing" + ], + "support": { + "issues": "https://github.com/php-imagine/Imagine/issues", + "source": "https://github.com/php-imagine/Imagine/tree/1.5.0" + }, + "time": "2024-12-03T14:37:55+00:00" + }, + { + "name": "knplabs/knp-menu", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenu.git", + "reference": "79d325909a1d428a93f1a0f55e90177830e283bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenu/zipball/79d325909a1d428a93f1a0f55e90177830e283bb", + "reference": "79d325909a1d428a93f1a0f55e90177830e283bb", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "symfony/http-foundation": "<5.4", + "twig/twig": "<2.16" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^9.6", + "psr/container": "^1.0 || ^2.0", + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^7.0", + "symfony/routing": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^2.16 || ^3.0" + }, + "suggest": { + "twig/twig": "for the TwigRenderer and the integration with your templates" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Menu\\": "src/Knp/Menu" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs", + "homepage": "https://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "The Community", + "homepage": "https://github.com/KnpLabs/KnpMenu/contributors" + } + ], + "description": "An object oriented menu library", + "homepage": "https://knplabs.com", + "keywords": [ + "menu", + "tree" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenu/issues", + "source": "https://github.com/KnpLabs/KnpMenu/tree/v3.8.0" + }, + "time": "2025-06-13T15:03:33+00:00" + }, + { + "name": "knplabs/knp-menu-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenuBundle.git", + "reference": "eabe07859751a0ed77c04dcb6b908fcd2c336cf3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenuBundle/zipball/eabe07859751a0ed77c04dcb6b908fcd2c336cf3", + "reference": "eabe07859751a0ed77c04dcb6b908fcd2c336cf3", + "shasum": "" + }, + "require": { + "knplabs/knp-menu": "^3.8", + "php": "^8.1", + "symfony/config": "^5.4 | ^6.0 | ^7.0", + "symfony/dependency-injection": "^5.4 | ^6.0 | ^7.0", + "symfony/deprecation-contracts": "^2.5 | ^3.3", + "symfony/http-kernel": "^5.4 | ^6.0 | ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5 | ^11.5 | ^12.1", + "symfony/expression-language": "^5.4 | ^6.0 | ^7.0", + "symfony/phpunit-bridge": "^6.0 | ^7.0", + "symfony/templating": "^5.4 | ^6.0 | ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\MenuBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Knplabs", + "homepage": "http://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpMenuBundle/contributors" + } + ], + "description": "This bundle provides an integration of the KnpMenu library", + "keywords": [ + "menu" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenuBundle/issues", + "source": "https://github.com/KnpLabs/KnpMenuBundle/tree/v3.6.0" + }, + "time": "2025-06-14T11:37:33+00:00" + }, + { + "name": "knplabs/knp-time-bundle", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpTimeBundle.git", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpTimeBundle/zipball/93e9528415b28a19872d74b28e816045c0fd217b", + "reference": "93e9528415b28a19872d74b28e816045c0fd217b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^9.6", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/twig-bundle": "to use the Twig `time_diff()` function and `|time_diff`/`|duration` filter" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\TimeBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "https://knplabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle/contributors" + } + ], + "description": "Making your dates and durations look sensible and descriptive", + "homepage": "https://github.com/KnpLabs/KnpTimeBundle", + "keywords": [ + "bundle", + "date", + "descriptive time", + "duration", + "knp", + "knplabs", + "time" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpTimeBundle/issues", + "source": "https://github.com/KnpLabs/KnpTimeBundle/tree/v2.4.0" + }, + "time": "2024-06-11T09:38:28+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/f91d84f65cb3e974988bbe872b5da8ca132a155f", + "reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f", + "shasum": "" + }, + "require": { + "php": "~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.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" + }, + "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.4.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2025-10-08T18:00:48+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a835af59b030d3f2967725697cf88300f579088e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", + "reference": "a835af59b030d3f2967725697cf88300f579088e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.29", + "lcobucci/clock": "^3.2", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^11.1" + }, + "suggest": { + "lcobucci/clock": ">= 3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.5.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2025-01-26T21:29:45+00:00" + }, + { + "name": "league/commonmark", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2025-07-20T12:47:49+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + }, + "time": "2025-06-25T13:29:59+00:00" + }, + { + "name": "league/flysystem-bundle", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-bundle.git", + "reference": "bf5ab3c072c0def47872e28f69876548d8669657" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-bundle/zipball/bf5ab3c072c0def47872e28f69876548d8669657", + "reference": "bf5ab3c072c0def47872e28f69876548d8669657", + "shasum": "" + }, + "require": { + "league/flysystem": "^3.0", + "php": ">=8.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "doctrine/mongodb-odm": "^2.0", + "league/flysystem-async-aws-s3": "^3.1", + "league/flysystem-aws-s3-v3": "^3.1", + "league/flysystem-azure-blob-storage": "^3.1", + "league/flysystem-ftp": "^3.1", + "league/flysystem-google-cloud-storage": "^3.1", + "league/flysystem-gridfs": "^3.28", + "league/flysystem-memory": "^3.1", + "league/flysystem-read-only": "^3.15", + "league/flysystem-sftp-v3": "^3.1", + "league/flysystem-webdav": "^3.29", + "platformcommunity/flysystem-bunnycdn": "^3.3", + "symfony/dotenv": "^5.4 || ^6.0 || ^7.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "League\\FlysystemBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Symfony bundle integrating Flysystem into Symfony applications", + "keywords": [ + "Flysystem", + "bundle", + "filesystem", + "symfony" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-bundle/issues", + "source": "https://github.com/thephpleague/flysystem-bundle/tree/3.5.0" + }, + "time": "2025-06-22T12:43:01+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + }, + "time": "2025-05-21T10:34:19+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" + }, + { + "name": "matthiasmullie/minify", + "version": "1.3.75", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/minify.git", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/76ba4a5f555fd7bf4aa408af608e991569076671", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "matthiasmullie/path-converter": "~1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": ">=2.0", + "matthiasmullie/scrapbook": ">=1.3", + "phpunit/phpunit": ">=4.8" + }, + "suggest": { + "psr/cache-implementation": "Cache implementation to use with Minify::cache" + }, + "bin": [ + "bin/minifycss", + "bin/minifyjs" + ], + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\Minify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "minify@mullie.eu", + "homepage": "https://www.mullie.eu", + "role": "Developer" + } + ], + "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", + "homepage": "https://github.com/matthiasmullie/minify", + "keywords": [ + "JS", + "css", + "javascript", + "minifier", + "minify" + ], + "support": { + "issues": "https://github.com/matthiasmullie/minify/issues", + "source": "https://github.com/matthiasmullie/minify/tree/1.3.75" + }, + "funding": [ + { + "url": "https://github.com/matthiasmullie", + "type": "github" + } + ], + "time": "2025-06-25T09:56:19+00:00" + }, + { + "name": "matthiasmullie/path-converter", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/path-converter.git", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\PathConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "pathconverter@mullie.eu", + "homepage": "http://www.mullie.eu", + "role": "Developer" + } + ], + "description": "Relative path converter", + "homepage": "http://github.com/matthiasmullie/path-converter", + "keywords": [ + "converter", + "path", + "paths", + "relative" + ], + "support": { + "issues": "https://github.com/matthiasmullie/path-converter/issues", + "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3" + }, + "time": "2019-02-05T23:41:09+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2025-03-24T10:02:05+00:00" + }, + { + "name": "nelmio/cors-bundle", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioCorsBundle.git", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "shasum": "" + }, + "require": { + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.6", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\CorsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application", + "keywords": [ + "api", + "cors", + "crossdomain" + ], + "support": { + "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.5.0" + }, + "time": "2024-06-24T21:25:28+00:00" + }, + { + "name": "nelmio/security-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioSecurityBundle.git", + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/f3a7bf628a0873788172a0d05d20c0224080f5eb", + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.3 || ^7.0", + "symfony/security-core": "^5.4 || ^6.3 || ^7.0", + "symfony/security-csrf": "^5.4 || ^6.3 || ^7.0", + "symfony/security-http": "^5.4 || ^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.3 || ^7.0", + "ua-parser/uap-php": "^3.4.4" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.1", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/browser-kit": "^5.4 || ^6.3 || ^7.0", + "symfony/cache": "^5.4 || ^6.3 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/twig-bundle": "^5.4 || ^6.3 || ^7.0", + "twig/twig": "^2.10 || ^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\SecurityBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioSecurityBundle/contributors" + } + ], + "description": "Extra security-related features for Symfony: signed/encrypted cookies, HTTPS/SSL/HSTS handling, cookie session storage, ...", + "keywords": [ + "security" + ], + "support": { + "issues": "https://github.com/nelmio/NelmioSecurityBundle/issues", + "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.6.0" + }, + "time": "2025-09-19T08:24:46+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.8" + }, + "time": "2025-08-06T21:43:34+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + }, + "time": "2025-08-13T20:13:15+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "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" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@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": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "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/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2025-09-24T15:06:41+00:00" + }, + { + "name": "php-feed-io/feed-io", + "version": "v6.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-feed-io/feed-io.git", + "reference": "d82d09b92148612657e8203906a6f0b95a194ce7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-feed-io/feed-io/zipball/d82d09b92148612657e8203906a6f0b95a194ce7", + "reference": "d82d09b92148612657e8203906a6f0b95a194ce7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "nyholm/psr7": "^1.5", + "php": ">=8.1", + "php-http/discovery": "^1.14", + "php-http/httplug": "^2.3", + "psr/http-client-implementation": "*", + "psr/log": "~1.0|~2.0|~3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.5", + "monolog/monolog": "1.*|2.*", + "php-http/guzzle7-adapter": "^1.1", + "php-http/mock-client": "^1.5", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "~9.3.0", + "rector/rector": "^2.1" + }, + "suggest": { + "monolog/monolog": "Allows to handle logs", + "php-http/guzzle7-adapter": "Handles HTTP requests and responses" + }, + "bin": [ + "bin/feedio" + ], + "type": "library", + "autoload": { + "psr-4": { + "FeedIo\\": "src/FeedIo" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Brahmer", + "email": "info@b-brahmer.de" + }, + { + "name": "Alexandre Debril", + "email": "alex.debril@gmail.com" + } + ], + "description": "PHP library built to consume and serve JSONFeed / RSS / Atom feeds", + "homepage": "https://php-feed-io.github.io/feed-io/", + "keywords": [ + "atom", + "cli", + "client", + "feed", + "jsonfeed", + "news", + "rss" + ], + "support": { + "issues": "https://github.com/php-feed-io/feed-io/issues", + "source": "https://github.com/php-feed-io/feed-io/tree/v6.1.2" + }, + "funding": [ + { + "url": "https://github.com/Grotax", + "type": "github" + } + ], + "time": "2025-09-29T06:16:27+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.7.2" + }, + "time": "2024-09-24T06:21:48+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.1" + }, + "time": "2024-09-23T11:39:58+00:00" + }, + { + "name": "php-http/message", + "version": "1.16.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.16.2" + }, + "time": "2024-10-02T11:34:13+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "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.3" + }, + "time": "2025-08-01T19:43:32+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", + "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", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" + }, + "time": "2025-08-30T15:50:23+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "scheb/2fa-backup-code", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-backup-code.git", + "reference": "62c6099b179903db5ab03b8059068cdb28659294" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/62c6099b179903db5ab03b8059068cdb28659294", + "reference": "62c6099b179903db5ab03b8059068cdb28659294", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "scheb/2fa-bundle": "self.version" + }, + "type": "library", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "Extends scheb/2fa-bundle with backup codes support", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "backup-codes", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-backup-code/tree/v7.11.0" + }, + "time": "2025-04-20T08:27:40+00:00" + }, + { + "name": "scheb/2fa-bundle", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-bundle.git", + "reference": "06a343d14dad8cdd1670157d384738f9cfba29e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/06a343d14dad8cdd1670157d384738f9cfba29e5", + "reference": "06a343d14dad8cdd1670157d384738f9cfba29e5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/event-dispatcher": "^6.4 || ^7.0", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/twig-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "scheb/two-factor-bundle": "*" + }, + "suggest": { + "scheb/2fa-backup-code": "Emergency codes when you have no access to other methods", + "scheb/2fa-email": "Send codes by email", + "scheb/2fa-google-authenticator": "Google Authenticator support", + "scheb/2fa-totp": "Temporary one-time password (TOTP) support (Google Authenticator compatible)", + "scheb/2fa-trusted-device": "Trusted devices support" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "A generic interface to implement two-factor authentication in Symfony applications", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-bundle/tree/v7.11.0" + }, + "time": "2025-06-27T12:14:20+00:00" + }, + { + "name": "scheb/2fa-trusted-device", + "version": "v7.11.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-trusted-device.git", + "reference": "6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3", + "reference": "6ab98fdee3aa001ca6598eeb422d9abf2c85b5b3", + "shasum": "" + }, + "require": { + "lcobucci/clock": "^3.0", + "lcobucci/jwt": "^5.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "scheb/2fa-bundle": "self.version" + }, + "type": "library", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "Extends scheb/2fa-bundle with trusted devices support", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "symfony", + "trusted-device", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-trusted-device/tree/v7.11.0" + }, + "time": "2025-06-27T12:14:20+00:00" + }, + { + "name": "scrivo/highlight.php", + "version": "v9.18.1.10", + "source": { + "type": "git", + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4|^5.4", + "symfony/var-dumper": "^2.8|^3.4|^5.4" + }, + "suggest": { + "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords" + }, + "type": "library", + "autoload": { + "files": [ + "HighlightUtilities/functions.php" + ], + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" + }, + { + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" + } + ], + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "support": { + "issues": "https://github.com/scrivo/highlight.php/issues", + "source": "https://github.com/scrivo/highlight.php" + }, + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2022-12-17T21:53:22+00:00" + }, + { + "name": "scssphp/scssphp", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/scssphp/scssphp.git", + "reference": "024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f", + "reference": "024f92cd9782e3033b41c2d1c66ab1c0e5c12c0f", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "league/uri": "^7.4", + "league/uri-interfaces": "^7.4", + "php": ">=8.1", + "scssphp/source-span": "^1.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.30" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "phpunit/phpunit": "^9.5.6", + "sass/sass-spec": "*", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "symfony/var-dumper": "^6.3", + "thoughtbot/bourbon": "^7.0", + "twbs/bootstrap": "~5.0", + "twbs/bootstrap4": "4.6.1", + "zurb/foundation": "~6.7.0" + }, + "suggest": { + "ext-mbstring": "For best performance, mbstring should be installed as it is faster than the polyfill" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "ScssPhp\\ScssPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthon Pang", + "email": "apang@softwaredevelopment.ca", + "homepage": "https://github.com/robocoder" + }, + { + "name": "Cédric Morin", + "email": "cedric@yterium.com", + "homepage": "https://github.com/Cerdic" + } + ], + "description": "scssphp is a compiler for SCSS written in PHP.", + "homepage": "http://scssphp.github.io/scssphp/", + "keywords": [ + "css", + "less", + "sass", + "scss", + "stylesheet" + ], + "support": { + "issues": "https://github.com/scssphp/scssphp/issues", + "source": "https://github.com/scssphp/scssphp/tree/v2.0.1" + }, + "time": "2025-01-31T12:28:20+00:00" + }, + { + "name": "scssphp/source-span", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/scssphp/source-span.git", + "reference": "f08fc78765e6fb6fa8ca0573fc61b3f8860f0114" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scssphp/source-span/zipball/f08fc78765e6fb6fa8ca0573fc61b3f8860f0114", + "reference": "f08fc78765e6fb6fa8ca0573fc61b3f8860f0114", + "shasum": "" + }, + "require": { + "league/uri": "^7.4", + "league/uri-interfaces": "^7.4", + "php": ">=8.1" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpunit/phpunit": "^9.5.6", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "symfony/var-dumper": "^6.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SourceSpan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "homepage": "https://github.com/stof" + } + ], + "description": "Provides a representation for source code locations and spans.", + "keywords": [ + "parsing" + ], + "support": { + "issues": "https://github.com/scssphp/source-span/issues", + "source": "https://github.com/scssphp/source-span/tree/v1.0.0" + }, + "time": "2024-12-09T23:08:15+00:00" + }, + { + "name": "simplepie/simplepie", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/simplepie/simplepie.git", + "reference": "76cccb1b2c5dcaf44f304c925ab30c0f48643992" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/76cccb1b2c5dcaf44f304c925ab30c0f48643992", + "reference": "76cccb1b2c5dcaf44f304c925ab30c0f48643992", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "php": ">=7.2.0" + }, + "require-dev": { + "donatj/mock-webserver": "^2.7", + "friendsofphp/php-cs-fixer": "^2.19 || ^3.8", + "mf2/mf2": "^0.5.0", + "phpstan/phpstan": "~1.12.2", + "phpunit/phpunit": "^8 || ^9 || ^10", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1 || ^2 || ^3" + }, + "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", + "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" + }, + "type": "library", + "autoload": { + "psr-0": { + "SimplePie": "library" + }, + "psr-4": { + "SimplePie\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ryan Parman", + "homepage": "http://ryanparman.com/", + "role": "Creator, alumnus developer" + }, + { + "name": "Sam Sneddon", + "homepage": "https://gsnedders.com/", + "role": "Alumnus developer" + }, + { + "name": "Ryan McCue", + "email": "me@ryanmccue.info", + "homepage": "http://ryanmccue.info/", + "role": "Developer" + } + ], + "description": "A simple Atom/RSS parsing library for PHP", + "homepage": "http://simplepie.org/", + "keywords": [ + "atom", + "feeds", + "rss" + ], + "support": { + "issues": "https://github.com/simplepie/simplepie/issues", + "source": "https://github.com/simplepie/simplepie/tree/1.9.0" + }, + "time": "2025-09-12T06:34:27+00:00" + }, + { + "name": "spatie/schema-org", + "version": "3.23.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/schema-org.git", + "reference": "a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/schema-org/zipball/a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d", + "reference": "a8dc1b6fcdd06afc1ab084c3ead9b7a4c3d7a35d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.6", + "graham-campbell/analyzer": "^4.2", + "illuminate/collections": "^8.62.0", + "league/flysystem": "^2.3.0 || ^3.0", + "pestphp/pest": "^1.21", + "symfony/console": "^5.3.7 || 6.0", + "twig/twig": "^3.3.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\SchemaOrg\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Tom Witkowski", + "email": "dev.gummibeer@gmail.com", + "homepage": "https://gummibeer.de", + "role": "Developer" + } + ], + "description": "A fluent builder Schema.org types and ld+json generator", + "homepage": "https://github.com/spatie/schema-org", + "keywords": [ + "schema-org", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/schema-org/issues", + "source": "https://github.com/spatie/schema-org/tree/3.23.1" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-01-31T14:54:12+00:00" + }, + { + "name": "spomky-labs/cbor-php", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/cbor-php.git", + "reference": "5404f3e21cbe72f5cf612aa23db2b922fd2f43bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/5404f3e21cbe72f5cf612aa23db2b922fd2f43bf", + "reference": "5404f3e21cbe72f5cf612aa23db2b922fd2f43bf", + "shasum": "" + }, + "require": { + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13", + "ext-mbstring": "*", + "php": ">=8.0" + }, + "require-dev": { + "deptrac/deptrac": "^3.0", + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "ext-json": "*", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.0|^2.0", + "phpstan/phpstan-beberlei-assert": "^1.0|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.0|^2.0", + "phpstan/phpstan-strict-rules": "^1.0|^2.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", + "rector/rector": "^1.0|^2.0", + "roave/security-advisories": "dev-latest", + "symfony/var-dumper": "^6.0|^7.0", + "symplify/easy-coding-standard": "^12.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", + "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "CBOR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/cbor-php/contributors" + } + ], + "description": "CBOR Encoder/Decoder for PHP", + "keywords": [ + "Concise Binary Object Representation", + "RFC7049", + "cbor" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/cbor-php/issues", + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-06-13T11:57:55+00:00" + }, + { + "name": "spomky-labs/otphp", + "version": "11.3.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "paragonie/constant_time_encoding": "^2.0 || ^3.0", + "php": ">=8.1", + "psr/clock": "^1.0", + "symfony/deprecation-contracts": "^3.2" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "infection/infection": "^0.26|^0.27|^0.28|^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5.26|^10.0|^11.0", + "qossmic/deptrac-shim": "^1.0", + "rector/rector": "^1.0", + "symfony/phpunit-bridge": "^6.1|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/otphp/issues", + "source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-06-12T11:22:32+00:00" + }, + { + "name": "spomky-labs/pki-framework", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/pki-framework.git", + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/eced5b5ce70518b983ff2be486e902bbd15135ae", + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae", + "shasum": "" + }, + "require": { + "brick/math": "^0.10|^0.11|^0.12|^0.13", + "ext-mbstring": "*", + "php": ">=8.1" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "ext-gmp": "*", + "ext-openssl": "*", + "infection/infection": "^0.28|^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3|^2.0", + "phpstan/phpstan": "^1.8|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.1|^2.0", + "phpstan/phpstan-strict-rules": "^1.3|^2.0", + "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", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "For better performance (or GMP)", + "ext-gmp": "For better performance (or BCMath)", + "ext-openssl": "For OpenSSL based cyphering" + }, + "type": "library", + "autoload": { + "psr-4": { + "SpomkyLabs\\Pki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joni Eskelinen", + "email": "jonieske@gmail.com", + "role": "Original developer" + }, + { + "name": "Florent Morselli", + "email": "florent.morselli@spomky-labs.com", + "role": "Spomky-Labs PKI Framework developer" + } + ], + "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.", + "homepage": "https://github.com/spomky-labs/pki-framework", + "keywords": [ + "DER", + "Private Key", + "ac", + "algorithm identifier", + "asn.1", + "asn1", + "attribute certificate", + "certificate", + "certification request", + "cryptography", + "csr", + "decrypt", + "ec", + "encrypt", + "pem", + "pkcs", + "public key", + "rsa", + "sign", + "signature", + "verify", + "x.509", + "x.690", + "x509", + "x690" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/pki-framework/issues", + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-06-13T08:35:04+00:00" + }, + { + "name": "symfony-cmf/routing", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/Routing.git", + "reference": "86c3e36a94f8e47a94f7b92ce09877ba3a0809fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/86c3e36a94f8e47a94f7b92ce09877ba3a0809fb", + "reference": "86c3e36a94f8e47a94f7b92ce09877ba3a0809fb", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/http-kernel": "^6.0 || ^7.0", + "symfony/routing": "^6.0 || ^7.0" + }, + "require-dev": { + "symfony/config": "^6.0 || ^7.0", + "symfony/dependency-injection": "^6.0 || ^7.0", + "symfony/event-dispatcher": "^6.0 || ^7.0", + "symfony/phpunit-bridge": "^7.0.3" + }, + "suggest": { + "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Component\\Routing\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/Routing/contributors" + } + ], + "description": "Extends the Symfony routing component for dynamic routes and chaining several routers", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "support": { + "issues": "https://github.com/symfony-cmf/Routing/issues", + "source": "https://github.com/symfony-cmf/Routing/tree/3.0.4" + }, + "time": "2024-12-02T22:52:12+00:00" + }, + { + "name": "symfony-cmf/routing-bundle", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony-cmf/routing-bundle.git", + "reference": "7aab681c812e93a41d70349f560976b93da049ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony-cmf/routing-bundle/zipball/7aab681c812e93a41d70349f560976b93da049ca", + "reference": "7aab681c812e93a41d70349f560976b93da049ca", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony-cmf/routing": "^3.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0" + }, + "conflict": { + "doctrine/common": "<3.1.1", + "doctrine/persistence": "<1.3.0", + "doctrine/phpcr-odm": "<2.0", + "symfony/doctrine-bridge": "<6.4.0", + "symfony/security-core": "<6.4.0" + }, + "require-dev": { + "doctrine/data-fixtures": "^1.0.0", + "doctrine/doctrine-bundle": "^2.8", + "doctrine/orm": "^2.9 || ^3.0.1", + "doctrine/phpcr-bundle": "^3.0", + "doctrine/phpcr-odm": "^2.0", + "jackalope/jackalope-doctrine-dbal": "^2.0", + "matthiasnoback/symfony-config-test": "^4.1.0 || ^5.1.0", + "matthiasnoback/symfony-dependency-injection-test": "^4.1.0 || ^5.1.0", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-doctrine": "^1.3", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^9.5.28", + "symfony-cmf/testing": "5.0.2", + "symfony/form": "^6.4 || ^7.0", + "symfony/monolog-bundle": "^3.5", + "symfony/phpunit-bridge": "^7.0.3", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/serializer": "^6.4 || ^7.0", + "symfony/translation": "^6.4 || ^7.0", + "symfony/twig-bundle": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "twig/twig": "^2.4.4 || ^3.0" + }, + "suggest": { + "doctrine/orm": "To enable support for the ORM entities", + "doctrine/phpcr-bundle": "To enable support for the PHPCR ODM documents", + "doctrine/phpcr-odm": "To enable support for the PHPCR ODM documents" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Cmf\\Bundle\\RoutingBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony CMF Community", + "homepage": "https://github.com/symfony-cmf/RoutingBundle/contributors" + } + ], + "description": "Symfony RoutingBundle", + "homepage": "http://cmf.symfony.com", + "keywords": [ + "database", + "routing" + ], + "support": { + "issues": "https://github.com/symfony-cmf/routing-bundle/issues", + "source": "https://github.com/symfony-cmf/routing-bundle/tree/3.1.1" + }, + "time": "2025-03-31T07:12:15+00:00" + }, + { + "name": "symfony/asset", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "reference": "56c4d9f759247c4e07d8549e3baf7493cb9c3e4b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "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": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v7.3.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-03-05T10:15:41+00:00" + }, + { + "name": "symfony/cache", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "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\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.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-03-13T15:25:07+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/config", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "f18dc5926cb203e125956987def795d052ee774e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/f18dc5926cb203e125956987def795d052ee774e", + "reference": "f18dc5926cb203e125956987def795d052ee774e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.4.26" + }, + "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-09-11T09:57:09+00:00" + }, + { + "name": "symfony/console", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "93518c2ff7ce9c1818224c6effed3cf2429c63d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/93518c2ff7ce9c1818224c6effed3cf2429c63d7", + "reference": "93518c2ff7ce9c1818224c6effed3cf2429c63d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.2.9" + }, + "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-30T17:03:27+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/82119812ab0bf3425c1234d413efd1b19bb92ae4", + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4.20|^7.2.5" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "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": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/21cd48c34a47a0d0e303a590a67c3450fde55888", + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.8|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "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 integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.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": "2025-09-24T09:56:23+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "064159484ab330590b7b477f6c8835812f2e340f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/064159484ab330590b7b477f6c8835812f2e340f", + "reference": "064159484ab330590b7b477f6c8835812f2e340f", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.6|^4", + "php": ">=8.2", + "symfony/messenger": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "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": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3" + }, + "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-08-06T20:13:54+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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 manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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 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.3" + }, + "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-08-13T11:49:31+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^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\\EventDispatcher\\": "" + } + }, + "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 dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/32d2d19c62e58767e6552166c32fb259975d2b23", + "reference": "32d2d19c62e58767e6552166c32fb259975d2b23", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v7.3.2" + }, + "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-10T08:29:33+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.4.24", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^5.4|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.4.24" + }, + "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-10T08:14:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.2" + }, + "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/framework-bundle", + "version": "v7.0.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "07a37173aace78420ccaf5eceaf4a79c7dfab375" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/07a37173aace78420ccaf5eceaf4a79c7dfab375", + "reference": "07a37173aace78420ccaf5eceaf4a79c7dfab375", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<6.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "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 a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v7.0.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-07-26T13:24:26+00:00" + }, + { + "name": "symfony/html-sanitizer", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/html-sanitizer.git", + "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/8740fc48979f649dee8b8fc51a2698e5c190bf12", + "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri": "^6.5|^7.0", + "masterminds/html5": "^2.7.2", + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HtmlSanitizer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.", + "homepage": "https://symfony.com", + "keywords": [ + "Purifier", + "html", + "sanitizer" + ], + "support": { + "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.3" + }, + "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-08-12T10:34:03+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62", + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "75d7043853a42837e68111812f4d964b01e5101c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "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\\HttpClient\\": "" + }, + "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 HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.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-04-29T11:18:49+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "369241591d92bb5dfb4c6ccd6ee94378a45b1521" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/369241591d92bb5dfb4c6ccd6ee94378a45b1521", + "reference": "369241591d92bb5dfb4c6ccd6ee94378a45b1521", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.4.26" + }, + "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-09-16T08:22:30+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8b0f963293aede77593c9845c8c0af34752e893a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8b0f963293aede77593c9845c8c0af34752e893a", + "reference": "8b0f963293aede77593c9845c8c0af34752e893a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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 a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.4.26" + }, + "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-09-27T12:20:56+00:00" + }, + { + "name": "symfony/intl", + "version": "v7.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "4e4ffbfa65fae8bebb8e53712b3e493c85204612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/4e4ffbfa65fae8bebb8e53712b3e493c85204612", + "reference": "4e4ffbfa65fae8bebb8e53712b3e493c85204612", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides access to the localization data of the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v7.0.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:55:39+00:00" + }, + { + "name": "symfony/lock", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/lock.git", + "reference": "e025f32cfd1fa8e3a4485a8d810544474aac26da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lock/zipball/e025f32cfd1fa8e3a4485a8d810544474aac26da", + "reference": "e025f32cfd1fa8e3a4485a8d810544474aac26da", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Lock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Derussé", + "email": "jeremy@derusse.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource", + "homepage": "https://symfony.com", + "keywords": [ + "cas", + "flock", + "locking", + "mutex", + "redlock", + "semaphore" + ], + "support": { + "source": "https://github.com/symfony/lock/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "ab97ef2f7acf0216955f5845484235113047a31d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ab97ef2f7acf0216955f5845484235113047a31d", + "reference": "ab97ef2f7acf0216955f5845484235113047a31d", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "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": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.3.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": "2025-09-17T05:51:54+00:00" + }, + { + "name": "symfony/messenger", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/d9e04339404ba2dcd04c24172125516dc0e06c35", + "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<7.2", + "symfony/event-dispatcher": "<6.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^7.2", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v7.3.3" + }, + "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-08-13T11:49:31+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "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": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.3.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": "2025-09-16T08:38:17+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", + "shasum": "" + }, + "require": { + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "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 integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.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": "2025-09-24T16:45:39+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" + }, + "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-08-05T10:16:07+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/31fbe66af859582a20b803f38be96be8accdf2c3", + "reference": "31fbe66af859582a20b803f38be96be8accdf2c3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v7.3.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-02-04T08:22:58+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.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.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "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\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "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\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", + "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "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 functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.3.3" + }, + "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-08-04T15:15:28+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/7b6db23f23d13ada41e1cb484748a8ec028fbace", + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "~7.2.8|^7.3.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.3.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": "2025-09-15T13:55:54+00:00" + }, + { + "name": "symfony/rate-limiter", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/rate-limiter.git", + "reference": "7e855541d302ba752f86fb0e97932e7969fe9c04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/7e855541d302ba752f86fb0e97932e7969fe9c04", + "reference": "7e855541d302ba752f86fb0e97932e7969fe9c04", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/options-resolver": "^7.3" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/lock": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\RateLimiter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Wouter de Jong", + "email": "wouter@wouterj.nl" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a Token Bucket implementation to rate limit input and output in your application", + "homepage": "https://symfony.com", + "keywords": [ + "limiter", + "rate-limiter" + ], + "support": { + "source": "https://github.com/symfony/rate-limiter/tree/v7.3.2" + }, + "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-07T08:17:57+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c", + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "4661890f7d2571e9ef58431401a390c2dde68c78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4661890f7d2571e9ef58431401a390c2dde68c78", + "reference": "4661890f7d2571e9ef58431401a390c2dde68c78", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.2", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4.11|^7.1.4", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/security-core": "^7.2", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/console": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-client": "<6.4", + "symfony/ldap": "<6.4", + "symfony/serializer": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.12", + "web-token/jwt-library": "^3.3.2|^4.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "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 a tight integration of the Security component into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v7.2.9" + }, + "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-22T07:39:44+00:00" + }, + { + "name": "symfony/security-core", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/68b9d3ca57615afde6152a1e1441fa035bea43f8", + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/password-hasher": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/ldap": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/validator": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "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": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v7.3.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": "2025-09-24T14:32:13+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/2b4b0c46c901729e4e90719eacd980381f53e0a3", + "reference": "2b4b0c46c901729e4e90719eacd980381f53e0a3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "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": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v7.3.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-02T18:42:10+00:00" + }, + { + "name": "symfony/security-http", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/1cf54d0648ebab23bf9b8972617b79f1995e13a9", + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/security-core": "^7.3", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/clock": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-client-contracts": "<3.0", + "symfony/security-bundle": "<6.4", + "symfony/security-csrf": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-client-contracts": "^3.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "web-token/jwt-library": "^3.3.2|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "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": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v7.3.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": "2025-09-09T17:06:44+00:00" + }, + { + "name": "symfony/serializer", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php84": "^1.30" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/uid": "<6.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^7.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v7.3.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": "2025-09-15T13:39:02+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.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-04-25T09:37:31+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "5621f039a71a11c87c106c1c598bdcd04a19aeea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/5621f039a71a11c87c106c1c598bdcd04a19aeea", + "reference": "5621f039a71a11c87c106c1c598bdcd04a19aeea", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.4.26" + }, + "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-09-11T14:32:46+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^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/v7.3.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": "2025-09-07T11:39:36+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "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.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-27T08:32:26+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "33558f013b7f6ed72805527c8405cae0062e47c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/33558f013b7f6ed72805527c8405cae0062e47c5", + "reference": "33558f013b7f6ed72805527c8405cae0062e47c5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.21" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4.20|^7.2.5", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^7.3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "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 integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.3.3" + }, + "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-08-18T13:10:53+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.2.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39", + "reference": "157de579a9ec25d5dfeb7ee3b3e9b57d2e635c39", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "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 a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.2.9" + }, + "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-10T08:29:33+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/d34eaeb57f39c8a9c97eb72a977c423207dfa35b", + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.30" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.30|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.3.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": "2025-09-11T15:33:27+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.3.1" + }, + "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-06-27T19:55:54+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/5e29a348b5fac2227b6938a54db006d673bb813a", + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "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 validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v7.3.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": "2025-09-24T06:32:27+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v7.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.3.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": "2025-09-11T10:12:26+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "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": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.3" + }, + "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-08-27T11:34:33+00:00" + }, + { + "name": "terminal42/escargot", + "version": "1.6.3", + "source": { + "type": "git", + "url": "https://github.com/terminal42/escargot.git", + "reference": "dcdf7900b88c1e203bccde8a446732cc8126f8b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/terminal42/escargot/zipball/dcdf7900b88c1e203bccde8a446732cc8126f8b1", + "reference": "dcdf7900b88c1e203bccde8a446732cc8126f8b1", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "nyholm/psr7": "^1.1", + "php": "^8.1", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/clock": "^6.2 || ^7.0", + "symfony/dom-crawler": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/http-client": "^5.4 || ^6.0 || ^7.0", + "webignition/robots-txt-file": "^3.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6", + "fig/log-test": "^1.0", + "symfony/finder": "^5.4|| ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "terminal42/contao-build-tools": "@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Terminal42\\Escargot\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Yanick Witschi", + "homepage": "https://github.com/toflar", + "role": "Developer" + } + ], + "description": "A web crawler or spider library based on Symfony components", + "homepage": "https://www.terminal42.ch", + "keywords": [ + "crawl", + "escargot", + "index", + "search", + "spider" + ], + "support": { + "issues": "https://github.com/terminal42/escargot/issues", + "source": "https://github.com/terminal42/escargot" + }, + "time": "2025-09-10T10:36:01+00:00" + }, + { + "name": "terminal42/service-annotation-bundle", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/terminal42/service-annotation-bundle.git", + "reference": "114105fc20d6d07087d30c5cc60890338e375261" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/terminal42/service-annotation-bundle/zipball/114105fc20d6d07087d30c5cc60890338e375261", + "reference": "114105fc20d6d07087d30c5cc60890338e375261", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.6 || ^2.0", + "php": "^7.1 || ^8.0", + "symfony/dependency-injection": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "terminal42/contao-build-tools": "@dev" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Terminal42\\ServiceAnnotationBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "terminal42 gmbh", + "homepage": "https://www.terminal42.ch/" + } + ], + "description": "Add service tags from class annotations", + "support": { + "issues": "https://github.com/terminal42/service-annotation-bundle/issues", + "source": "https://github.com/terminal42/service-annotation-bundle" + }, + "funding": [ + { + "url": "https://github.com/sponsors/terminal42", + "type": "github" + }, + { + "url": "https://ko-fi.com/terminal42", + "type": "other" + } + ], + "time": "2024-08-14T14:01:08+00:00" + }, + { + "name": "toflar/cronjob-supervisor", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/Toflar/cronjob-supervisor.git", + "reference": "bbe5c63c83149ee2e474f5fbcbf3e7609b918710" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Toflar/cronjob-supervisor/zipball/bbe5c63c83149ee2e474f5fbcbf3e7609b918710", + "reference": "bbe5c63c83149ee2e474f5fbcbf3e7609b918710", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/filesystem": "^6.0 || ^7.0", + "symfony/lock": "^6.0 || ^7.0", + "symfony/process": "^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "terminal42/contao-build-tools": "@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Toflar\\CronjobSupervisor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Yanick Witschi", + "email": "yanick.witschi@terminal42.ch" + } + ], + "description": "A simple supervisor for processes that can be triggered using a minutely cronjob", + "support": { + "issues": "https://github.com/Toflar/cronjob-supervisor/issues", + "source": "https://github.com/Toflar/cronjob-supervisor/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/Toflar", + "type": "github" + } + ], + "time": "2025-09-01T09:36:18+00:00" + }, + { + "name": "twig/string-extra", + "version": "v3.21.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/string-extra.git", + "reference": "4b3337544ac8f76c280def94e32b53acfaec0589" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589", + "reference": "4b3337544ac8f76c280def94e32b53acfaec0589", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/string": "^5.4|^6.4|^7.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^3.13|^4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\Extra\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Symfony String", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "string", + "twig", + "unicode" + ], + "support": { + "source": "https://github.com/twigphp/string-extra/tree/v3.21.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-01-31T20:45:36+00:00" + }, + { + "name": "twig/twig", + "version": "v3.21.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "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" + }, + "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.21.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-05-03T07:21:55+00:00" + }, + { + "name": "ua-parser/uap-php", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/ua-parser/uap-php.git", + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ua-parser/uap-php/zipball/f44bdd1b38198801cf60b0681d2d842980e47af5", + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.1", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.33", + "phpunit/phpunit": "^8 || ^9", + "symfony/console": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/filesystem": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/finder": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "symfony/yaml": "^3.4 || ^4.2 || ^4.3 || ^5.0", + "vimeo/psalm": "^3.12" + }, + "suggest": { + "symfony/console": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/filesystem": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/finder": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0", + "symfony/yaml": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0" + }, + "bin": [ + "bin/uaparser" + ], + "type": "library", + "autoload": { + "psr-4": { + "UAParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dave Olsen", + "email": "dmolsen@gmail.com" + }, + { + "name": "Lars Strojny", + "email": "lars@strojny.net" + } + ], + "description": "A multi-language port of Browserscope's user agent parser.", + "support": { + "issues": "https://github.com/ua-parser/uap-php/issues", + "source": "https://github.com/ua-parser/uap-php/tree/v3.10.0" + }, + "time": "2025-07-17T15:43:24+00:00" + }, + { + "name": "wa72/htmlpagedom", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/wasinger/htmlpagedom.git", + "reference": "9fa7dfea493e913e81a2b0f8d61f7a94324a04ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wasinger/htmlpagedom/zipball/9fa7dfea493e913e81a2b0f8d61f7a94324a04ea", + "reference": "9fa7dfea493e913e81a2b0f8d61f7a94324a04ea", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^8.0", + "symfony/css-selector": "^6.0 || ^7.0", + "symfony/dom-crawler": "^6.0 || ^7.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "clean/phpdoc-md": "^0.19.3", + "mikey179/vfsstream": "^1.6.10", + "phpunit/phpunit": "^9", + "scrutinizer/ocular": "^1.9", + "wa72/html-pretty-min": "~0.1" + }, + "suggest": { + "wa72/html-pretty-min": "Minify or indent HTML documents" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Wa72\\HtmlPageDom\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Singer", + "email": "singer@webagentur72.de", + "homepage": "http://www.webagentur72.de" + } + ], + "description": "jQuery-inspired DOM manipulation extension for Symfony's Crawler", + "homepage": "http://github.com/wasinger/htmlpagedom", + "keywords": [ + "crawler", + "dom", + "html" + ], + "support": { + "issues": "https://github.com/wasinger/htmlpagedom/issues", + "source": "https://github.com/wasinger/htmlpagedom/tree/v3.0.2" + }, + "time": "2023-12-05T20:36:58+00:00" + }, + { + "name": "web-auth/cose-lib", + "version": "4.4.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/cose-lib.git", + "reference": "a93b61c48fb587855f64a9ec11ad7b60e867cb15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/a93b61c48fb587855f64a9ec11ad7b60e867cb15", + "reference": "a93b61c48fb587855f64a9ec11ad7b60e867cb15", + "shasum": "" + }, + "require": { + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13", + "ext-json": "*", + "ext-openssl": "*", + "php": ">=8.1", + "spomky-labs/pki-framework": "^1.0" + }, + "require-dev": { + "deptrac/deptrac": "^3.0", + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.7|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.1|^2.0", + "phpstan/phpstan-strict-rules": "^1.0|^2.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", + "rector/rector": "^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cose\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/cose/contributors" + } + ], + "description": "CBOR Object Signing and Encryption (COSE) For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "COSE", + "RFC8152" + ], + "support": { + "issues": "https://github.com/web-auth/cose-lib/issues", + "source": "https://github.com/web-auth/cose-lib/tree/4.4.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-08-14T20:33:29+00:00" + }, + { + "name": "web-auth/webauthn-lib", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/webauthn-lib.git", + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/8937c397c8ae91b5af422ca8aa915c756062da74", + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "paragonie/constant_time_encoding": "^2.6|^3.0", + "php": ">=8.2", + "phpdocumentor/reflection-docblock": "^5.3", + "psr/clock": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "spomky-labs/cbor-php": "^3.0", + "spomky-labs/pki-framework": "^1.0", + "symfony/clock": "^6.4|^7.0", + "symfony/deprecation-contracts": "^3.2", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "web-auth/cose-lib": "^4.2.3" + }, + "suggest": { + "psr/log-implementation": "Recommended to receive logs from the library", + "symfony/event-dispatcher": "Recommended to use dispatched events", + "web-token/jwt-library": "Mandatory for fetching Metadata Statement from distant sources" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/webauthn-library/contributors" + } + ], + "description": "FIDO2/Webauthn Support For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "fido", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-16T14:38:43+00:00" + }, + { + "name": "web-auth/webauthn-stimulus", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/ux.git", + "reference": "196ea14c0966dc5be10c0a8c6a52af3461102341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/ux/zipball/196ea14c0966dc5be10c0a8c6a52af3461102341", + "reference": "196ea14c0966dc5be10c0a8c6a52af3461102341", + "shasum": "" + }, + "conflict": { + "symfony/flex": "<1.13" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\Stimulus\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/ux/contributors" + } + ], + "description": "Webauthn integration for Symfony", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "fido", + "symfony", + "symfony-ux", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/ux/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-16T14:38:43+00:00" + }, + { + "name": "web-auth/webauthn-symfony-bundle", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", + "reference": "aebb0315b43728a92973cc3d4d471cbe414baa54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/aebb0315b43728a92973cc3d4d471cbe414baa54", + "reference": "aebb0315b43728a92973cc3d4d471cbe414baa54", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/event-dispatcher": "^1.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "web-auth/webauthn-lib": "self.version" + }, + "suggest": { + "symfony/security-bundle": "Symfony firewall using a JSON API (perfect for script applications)" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/web-auth/webauthn-framework", + "name": "web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\Bundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/webauthn-symfony-bundle/contributors" + } + ], + "description": "FIDO2/Webauthn Security Bundle For Symfony", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "bundle", + "fido", + "symfony", + "symfony-bundle", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.2" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2025-03-24T12:00:00+00:00" + }, + { + "name": "webignition/disallowed-character-terminated-string", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/webignition/disallowed-character-terminated-string.git", + "reference": "1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webignition/disallowed-character-terminated-string/zipball/1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e", + "reference": "1c35b8bacbb2e76837c0aa8538dc2468a1f10e6e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "~8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "webignition\\DisallowedCharacterTerminatedString\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jon Cram", + "email": "webignition@gmail.com" + } + ], + "description": "A string terminated by one or more disallowed characters", + "homepage": "https://github.com/webignition/disallowed-character-terminated-string", + "keywords": [ + "string", + "terminated" + ], + "support": { + "issues": "https://github.com/webignition/disallowed-character-terminated-string/issues", + "source": "https://github.com/webignition/disallowed-character-terminated-string/tree/master" + }, + "time": "2019-12-20T15:52:44+00:00" + }, + { + "name": "webignition/robots-txt-file", + "version": "3.0", + "source": { + "type": "git", + "url": "https://github.com/webignition/robots-txt-file.git", + "reference": "51bd7b1045348d94177cf6b21415385bf0923fa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webignition/robots-txt-file/zipball/51bd7b1045348d94177cf6b21415385bf0923fa6", + "reference": "51bd7b1045348d94177cf6b21415385bf0923fa6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=7.2.0", + "webignition/disallowed-character-terminated-string": ">=2,<3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "webignition\\RobotsTxt\\": "src/", + "webignition\\RobotsTxt\\Tests\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jon Cram", + "email": "webignition@gmail.com" + } + ], + "description": "Models a robots.txt file", + "homepage": "https://github.com/webignition/robots-txt-file", + "keywords": [ + "parser", + "robots.txt" + ], + "support": { + "issues": "https://github.com/webignition/robots-txt-file/issues", + "source": "https://github.com/webignition/robots-txt-file/tree/3.0" + }, + "time": "2019-12-20T17:50:44+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "wikimedia/less.php", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/less.php.git", + "reference": "e238ad228d74b6ffd38209c799b34e9826909266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/less.php/zipball/e238ad228d74b6ffd38209c799b34e9826909266", + "reference": "e238ad228d74b6ffd38209c799b34e9826909266", + "shasum": "" + }, + "require": { + "php": ">=7.2.9" + }, + "require-dev": { + "phpunit/phpunit": "7.5.14" + }, + "bin": [ + "bin/lessc" + ], + "type": "library", + "autoload": { + "psr-0": { + "Less": "lib/" + }, + "classmap": [ + "lessc.inc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Josh Schmidt", + "homepage": "https://github.com/oyejorge" + }, + { + "name": "Matt Agar", + "homepage": "https://github.com/agar" + }, + { + "name": "Martin Jantošovič", + "homepage": "https://github.com/Mordred" + } + ], + "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", + "keywords": [ + "css", + "less", + "less.js", + "lesscss", + "php", + "stylesheet" + ], + "support": { + "source": "https://github.com/wikimedia/less.php/tree/1.8.2" + }, + "time": "2019-11-06T18:30:11+00:00" + } + ], + "packages-dev": [ + { + "name": "contao/contao-rector", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/contao/contao-rector.git", + "reference": "5323c853073f0cefcd0c4b5c816298530ab965ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/contao-rector/zipball/5323c853073f0cefcd0c4b5c816298530ab965ca", + "reference": "5323c853073f0cefcd0c4b5c816298530ab965ca", + "shasum": "" + }, + "require": { + "php": "^8.1", + "phpstan/phpstan": "^2.0", + "rector/rector": "^2.0", + "webmozart/assert": "^1.7" + }, + "require-dev": { + "contao/core-bundle": "^4.4 || ^5.0", + "phpunit/phpunit": "^10.0", + "symplify/rule-doc-generator": "^12.2" + }, + "default-branch": true, + "type": "rector-extension", + "autoload": { + "psr-4": { + "Contao\\Rector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "Rector upgrades rules for Contao CMS", + "homepage": "https://contao.org", + "support": { + "docs": "https://docs.contao.org", + "forum": "https://community.contao.org", + "issues": "https://github.com/contao/contao-rector/issues", + "source": "https://github.com/contao/contao-rector" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "other" + } + ], + "time": "2025-05-16T15:19:37+00:00" + }, + { + "name": "contao/manager-plugin", + "version": "2.13.5", + "source": { + "type": "git", + "url": "https://github.com/contao/manager-plugin.git", + "reference": "53a6f5b2289406ead1e80a631664c314a3e66b68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/contao/manager-plugin/zipball/53a6f5b2289406ead1e80a631664c314a3e66b68", + "reference": "53a6f5b2289406ead1e80a631664c314a3e66b68", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.7 || ^2.0", + "php": "^7.1 || ^8.0", + "symfony/config": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-kernel": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/routing": "^3.3 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "conflict": { + "contao/manager-bundle": "4.9.* <4.9.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "composer/composer": "^1.7 || ^2.0", + "contao/core-bundle": "^4.4 || ^5.0", + "ext-zip": "*", + "php-http/guzzle6-adapter": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.3", + "symfony/phpunit-bridge": "^3.4.40 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "webmozart/path-util": "^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": [ + "Contao\\ManagerPlugin\\Composer\\ArtifactsPlugin", + "Contao\\ManagerPlugin\\Composer\\ManagerPluginInstaller", + "Contao\\ManagerPlugin\\Composer\\AppAutoloadPlugin" + ], + "bamarni-bin": { + "bin-links": false, + "target-directory": "tools" + } + }, + "autoload": { + "psr-4": { + "Contao\\ManagerPlugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andreas Schempp", + "homepage": "https://github.com/aschempp" + } + ], + "description": "Contao 4 manager plugin", + "support": { + "issues": "https://github.com/contao/manager-plugin/issues", + "source": "https://github.com/contao/manager-plugin/tree/2.13.5" + }, + "funding": [ + { + "url": "https://to.contao.org/donate", + "type": "custom" + } + ], + "time": "2025-06-26T11:56:06+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.31", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96", + "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-10-10T14:14:11+00:00" + }, + { + "name": "phpstan/phpstan-symfony", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-symfony.git", + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/8820c22d785c235f69bb48da3d41e688bc8a1796", + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.13" + }, + "conflict": { + "symfony/framework-bundle": "<3.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "psr/container": "1.1.2", + "symfony/config": "^5.4 || ^6.1", + "symfony/console": "^5.4 || ^6.1", + "symfony/dependency-injection": "^5.4 || ^6.1", + "symfony/form": "^5.4 || ^6.1", + "symfony/framework-bundle": "^5.4 || ^6.1", + "symfony/http-foundation": "^5.4 || ^6.1", + "symfony/messenger": "^5.4", + "symfony/polyfill-php80": "^1.24", + "symfony/serializer": "^5.4", + "symfony/service-contracts": "^2.2.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukáš Unger", + "email": "looky.msc@gmail.com", + "homepage": "https://lookyman.net" + } + ], + "description": "Symfony Framework extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-symfony/issues", + "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.8" + }, + "time": "2025-09-07T06:55:50+00:00" + }, + { + "name": "rector/rector", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/d27f976a332a87b5d03553c2e6f04adbe5da034f", + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "phpstan/phpstan": "^2.1.26" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "homepage": "https://getrector.com/", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/2.2.3" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2025-10-11T21:50:23+00:00" + }, + { + "name": "symplify/easy-coding-standard", + "version": "12.6.0", + "source": { + "type": "git", + "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", + "reference": "781e6124dc7e14768ae999a8f5309566bbe62004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/781e6124dc7e14768ae999a8f5309566bbe62004", + "reference": "781e6124dc7e14768ae999a8f5309566bbe62004", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "conflict": { + "friendsofphp/php-cs-fixer": "<3.46", + "phpcsstandards/php_codesniffer": "<3.8", + "symplify/coding-standard": "<12.1" + }, + "suggest": { + "ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter" + }, + "bin": [ + "bin/ecs" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer", + "keywords": [ + "Code style", + "automation", + "fixer", + "static analysis" + ], + "support": { + "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.6.0" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2025-09-10T14:21:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "contao/contao-rector": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/contao/dca/tl_category.php b/contao/dca/tl_category.php index 81952d17..3c257136 100644 --- a/contao/dca/tl_category.php +++ b/contao/dca/tl_category.php @@ -12,7 +12,7 @@ $GLOBALS['TL_DCA']['tl_category'] = [ 'config' => [ 'label' => &$GLOBALS['TL_LANG']['tl_news_archive']['categories'][0], - 'dataContainer' => 'Table', + 'dataContainer' => \Contao\DC_Table::class, 'enableVersioning' => true, 'onload_callback' => [ ['\HeimrichHannot\CategoriesBundle\Backend\Category', 'checkPermission'], diff --git a/contao/dca/tl_category_config.php b/contao/dca/tl_category_config.php index d56b6836..77d4873c 100644 --- a/contao/dca/tl_category_config.php +++ b/contao/dca/tl_category_config.php @@ -6,6 +6,8 @@ * @license LGPL-3.0-or-later */ +use Contao\System; + $GLOBALS['TL_DCA']['tl_category_config'] = [ 'config' => [ 'dataContainer' => 'Table', diff --git a/rector.php b/rector.php new file mode 100644 index 00000000..db938036 --- /dev/null +++ b/rector.php @@ -0,0 +1,38 @@ +withPaths([ + __DIR__ . '/src', +// __DIR__ . '/contao', + + ]) + ->withRules([ + AddVoidReturnTypeWhereNoReturnRector::class, + # In Vorbereitung für PHP 8.4: + // ExplicitNullableParamTypeRector::class + ]) + + ->withImportNames( + importShortClasses: false, + removeUnusedImports: true + ) + ->withComposerBased( + doctrine: true, + phpunit: true, + symfony: true, + ) + ->withSets([ + LevelSetList::UP_TO_PHP_82, + ContaoLevelSetList::UP_TO_CONTAO_53, + ContaoSetList::FQCN, + ContaoSetList::ANNOTATIONS_TO_ATTRIBUTES, + ]); \ No newline at end of file diff --git a/src/Backend/Category.php b/src/Backend/Category.php index 736ee360..48be549e 100644 --- a/src/Backend/Category.php +++ b/src/Backend/Category.php @@ -8,46 +8,55 @@ namespace HeimrichHannot\CategoriesBundle\Backend; +use Contao\Validator; +use Contao\Database; +use Contao\Input; use Contao\Backend; +use Contao\BackendUser; use Contao\Controller; use Contao\CoreBundle\Exception\AccessDeniedException; use Contao\DataContainer; use Contao\Environment; use Contao\Image; use Contao\PageModel; -use Contao\RequestToken; use Contao\StringUtil; use Contao\System; +use HeimrichHannot\UtilsBundle\Util\Utils; use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface; - class Category extends Backend { const PRIMARY_CATEGORY_SUFFIX = '_primary'; protected static $defaultPrimaryCategorySet = false; + public function __construct() + { + parent::__construct(); + $this->utils = System::getContainer()->get(Utils::class); + } + /** * Add a breadcrumb menu to the page tree. * * @throws AccessDeniedException * @throws \RuntimeException */ - public function addBreadcrumb() + public function addBreadcrumb(): void { $strKey = 'tl_category_node'; /** @var AttributeBagInterface $objSession */ - $objSession = \System::getContainer()->get('session')->getBag('contao_backend'); + $objSession = System::getContainer()->get('request_stack')->getSession()->getBag('contao_backend'); // Set a new node if (System::getContainer()->get('huh.request')->hasGet('cn')) { // Check the path - if (\Validator::isInsecurePath(System::getContainer()->get('huh.request')->getGet('cn', true))) { + if (Validator::isInsecurePath(System::getContainer()->get('huh.request')->getGet('cn', true))) { throw new \RuntimeException('Insecure path '.System::getContainer()->get('huh.request')->getGet('cn', true)); } $objSession->set($strKey, System::getContainer()->get('huh.request')->getGet('cn', true)); - \Controller::redirect(preg_replace('/&cn=[^&]*/', '', Environment::get('request'))); + Controller::redirect(preg_replace('/&cn=[^&]*/', '', (string) Environment::get('request'))); } $intNode = $objSession->get($strKey); @@ -57,7 +66,7 @@ public function addBreadcrumb() } // Check the path (thanks to Arnaud Buchoux) - if (\Validator::isInsecurePath($intNode)) { + if (Validator::isInsecurePath($intNode)) { throw new \RuntimeException('Insecure path '.$intNode); } @@ -67,7 +76,7 @@ public function addBreadcrumb() // Generate breadcrumb trail if ($intNode) { $intId = $intNode; - $objDatabase = \Database::getInstance(); + $objDatabase = Database::getInstance(); do { $objCategory = $objDatabase->prepare('SELECT * FROM tl_category WHERE id=?')->limit(1)->execute($intId); @@ -87,9 +96,9 @@ public function addBreadcrumb() // No link for the active page if ($objCategory->id == $intNode) { - $arrLinks[] = \Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title; + $arrLinks[] = Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title; } else { - $arrLinks[] = \Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title.''; + $arrLinks[] = Backend::addPageIcon($objCategory->row(), '', null, '', true).' '.$objCategory->title.''; } // FIXME: Implement permission check @@ -113,7 +122,7 @@ public function addBreadcrumb() $GLOBALS['TL_DCA']['tl_category']['list']['sorting']['root'] = [$intNode]; // Add root link - $arrLinks[] = \Image::getHtml('pagemounts.svg').' '.$GLOBALS['TL_LANG']['MSC']['filterAll'].''; + $arrLinks[] = Image::getHtml('pagemounts.svg').' '.$GLOBALS['TL_LANG']['MSC']['filterAll'].''; $arrLinks = array_reverse($arrLinks); // Insert breadcrumb menu @@ -136,7 +145,7 @@ public function addBreadcrumb() */ public static function getCategoryFieldDca($evalOverride = null, $label = null) { - \System::loadLanguageFile('tl_category'); + System::loadLanguageFile('tl_category'); $eval = [ 'tl_class' => 'w50 autoheight', @@ -160,8 +169,8 @@ public static function getCategoryFieldDca($evalOverride = null, $label = null) 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations']], + 'load_callback' => [Category::loadCategoriesFromAssociations(...)], + 'save_callback' => [Category::storeToCategoryAssociations(...)], 'eval' => $eval, 'sql' => "int(10) unsigned NOT NULL default '0'", ]; @@ -182,9 +191,9 @@ public static function getCategoryFieldDca($evalOverride = null, $label = null) * @param array $evalOverride * @param string $label */ - public static function addSingleCategoryFieldToDca($table, $name, $evalOverride = null, $label = null) + public static function addSingleCategoryFieldToDca($table, $name, $evalOverride = null, $label = null): void { - \System::loadLanguageFile('tl_category'); + System::loadLanguageFile('tl_category'); $eval = [ 'tl_class' => 'w50 autoheight clr', @@ -208,8 +217,8 @@ public static function addSingleCategoryFieldToDca($table, $name, $evalOverride 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations']], + 'load_callback' => [Category::loadCategoriesFromAssociations(...)], + 'save_callback' => [Category::storeToCategoryAssociations(...)], 'eval' => $eval, 'sql' => "int(10) unsigned NOT NULL default '0'", ]; @@ -233,7 +242,7 @@ public static function addSingleCategoryFieldToDca($table, $name, $evalOverride * @param array $evalOverride * @param string $label */ - public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverride = null, $label = null) + public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverride = null, $label = null): void { System::loadLanguageFile('tl_category'); @@ -262,10 +271,10 @@ public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverr 'filter' => true, 'inputType' => 'categoryTree', 'foreignKey' => 'tl_category.title', - 'load_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'loadCategoriesFromAssociations']], + 'load_callback' => [Category::loadCategoriesFromAssociations(...)], 'save_callback' => [ - ['HeimrichHannot\CategoriesBundle\Backend\Category', 'storePrimaryCategory'], - ['HeimrichHannot\CategoriesBundle\Backend\Category', 'storeToCategoryAssociations'], + Category::storePrimaryCategory(...), + Category::storeToCategoryAssociations(...), ], 'eval' => $eval, 'sql' => 'blob NULL', @@ -290,11 +299,12 @@ public static function addMultipleCategoriesFieldToDca($table, $name, $evalOverr public static function deleteCachedPropertyValuesByCategoryAndProperty($value, DataContainer $dc) { - if (null !== ($instance = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk($dc->table, $dc->id))) { + + if (null !== ($instance = $this->utils->model()->findModelInstanceByPk($dc->table, $dc->id))) { $valueOld = $instance->{$dc->field}; if ($value != $valueOld) { - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', 'property=?', @@ -312,11 +322,11 @@ public static function deleteCachedPropertyValuesByCategoryAndProperty($value, D public static function deleteCachedPropertyValuesByCategoryAndPropertyBool($value, DataContainer $dc) { - if (null !== ($instance = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk($dc->table, $dc->id))) { + if (null !== ($instance = $this->utils->model()->findModelInstanceByPk($dc->table, $dc->id))) { // compute name of the field being overridden $overrideField = lcfirst(str_replace('override', '', $dc->field)); - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', 'property=?', @@ -335,15 +345,15 @@ public function getPrimarizeOperation($row, $href, $label, $title, $icon) { $checked = ''; - if (!($field = \Input::get('category_field')) || !($table = \Input::get('category_table'))) { + if (!($field = Input::get('category_field')) || !($table = Input::get('category_table'))) { return ''; } - if (null === ($category = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk('tl_category', $row['id']))) { + if (null === ($category = $this->utils->model()->findModelInstanceByPk('tl_category', $row['id']))) { return ''; } - \Controller::loadDataContainer($table); + Controller::loadDataContainer($table); $dcaEval = $GLOBALS['TL_DCA'][$table]['fields'][$field]['eval']; @@ -356,32 +366,32 @@ public function getPrimarizeOperation($row, $href, $label, $title, $icon) $isParentCategory = System::getContainer()->get('huh.categories.manager')->hasChildren($row['id']); $checkAsDefaultPrimaryCategory = (!$isParentCategory || !$dcaEval['parentsUnselectable'] || $category->selectable) && !$primaryCategory && $dcaEval['forcePrimaryCategory'] && !static::$defaultPrimaryCategorySet; - if ($checkAsDefaultPrimaryCategory || $row['id'] === \Input::get('primaryCategory')) { + if ($checkAsDefaultPrimaryCategory || $row['id'] === Input::get('primaryCategory')) { static::$defaultPrimaryCategorySet = true; $checked = ' checked'; } - return ''.''; + return ''.''; } /** * Automatically add overridable fields to the dca (including palettes, ...). */ - public static function addOverridableFieldSelectors() + public static function addOverridableFieldSelectors(): void { $dca = &$GLOBALS['TL_DCA']['tl_category']; // add overridable fields foreach ($dca['fields'] as $field => $data) { if ($data['eval']['overridable'] ?? false) { - $overrideFieldName = 'override'.ucfirst($field); + $overrideFieldName = 'override'.ucfirst((string) $field); // boolean field $dca['fields'][$overrideFieldName] = [ 'label' => &$GLOBALS['TL_LANG']['tl_category'][$overrideFieldName], 'exclude' => true, 'inputType' => 'checkbox', - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\Category', 'deleteCachedPropertyValuesByCategoryAndPropertyBool']], + 'save_callback' => [Category::deleteCachedPropertyValuesByCategoryAndPropertyBool(...)], 'eval' => ['tl_class' => 'w50', 'submitOnChange' => true], 'sql' => "char(1) NOT NULL default ''", ]; @@ -395,18 +405,18 @@ public static function addOverridableFieldSelectors() } } - public function modifyDca(DataContainer $dc) + public function modifyDca(DataContainer $dc): void { - $modelUtil = System::getContainer()->get('huh.utils.model'); + $modelUtil = $this->utils->model(); - $category = $modelUtil->findModelInstanceByPk('tl_category', $dc->id); + $category = $modelUtil->findModelInstanceByPk('tl_category', $dc->id ?? 0); $dca = &$GLOBALS['TL_DCA']['tl_category']; if ($category) { if ($category->pid) { foreach ($dca['fields'] as $field => $data) { if (isset($data['eval']['overridable']) && $data['eval']['overridable']) { - $dca['palettes']['default'] = str_replace($field, 'override'.ucfirst($field), $dca['palettes']['default']); + $dca['palettes']['default'] = str_replace($field, 'override'.ucfirst((string) $field), $dca['palettes']['default']); } } } @@ -418,12 +428,12 @@ public function modifyDca(DataContainer $dc) // hide primarize operation if not in picker context // show only in picker - if (!\Input::get('picker')) { + if (!Input::get('picker')) { unset($dca['list']['operations']['primarize']); } } - public function deleteCategoryAssociations(DataContainer $dc, $undoId) + public function deleteCategoryAssociations(DataContainer $dc, $undoId): void { if (!$dc->id) { return; @@ -434,7 +444,7 @@ public function deleteCategoryAssociations(DataContainer $dc, $undoId) ); } - public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId) + public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId): void { $table = $dc->table; @@ -466,7 +476,7 @@ public function deleteEntityCategoryAssociations(DataContainer $dc, $undoId) */ public function storePrimaryCategory($value, DataContainer $dc) { - if ($primaryCategory = \Input::post($dc->field.static::PRIMARY_CATEGORY_SUFFIX)) { + if ($primaryCategory = Input::post($dc->field.static::PRIMARY_CATEGORY_SUFFIX)) { System::getContainer()->get('huh.utils.database')->update($dc->table, [ $dc->field.static::PRIMARY_CATEGORY_SUFFIX => $primaryCategory, ], "$dc->table.id=?", [$dc->id]); @@ -480,7 +490,7 @@ public function storePrimaryCategory($value, DataContainer $dc) */ public function storeToCategoryAssociations($value, DataContainer $dc) { - $manager = \System::getContainer()->get('huh.categories.manager'); + $manager = System::getContainer()->get('huh.categories.manager'); if ($value) { switch ($GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['fieldType']) { @@ -545,7 +555,7 @@ public function loadCategoriesFromAssociations($value, DataContainer $dc) */ public static function generateAlias($varValue, DataContainer $dc) { - if (null === ($category = System::getContainer()->get('huh.utils.model')->findModelInstanceByPk('tl_category', $dc->id))) { + if (null === ($category = $this->utils->model()->findModelInstanceByPk('tl_category', $dc->id))) { return ''; } @@ -554,9 +564,9 @@ public static function generateAlias($varValue, DataContainer $dc) return System::getContainer()->get('huh.utils.dca')->generateAlias($varValue, $dc->id, 'tl_category', $title); } - public function checkPermission() + public function checkPermission(): void { - $user = \BackendUser::getInstance(); + $user = BackendUser::getInstance(); if (!$user->isAdmin && !$user->hasAccess('manage', 'categories')) { Controller::redirect('contao/main.php?act=error'); @@ -592,11 +602,11 @@ public function pasteCategory(DataContainer $dc, $row, $table, $cr, $arrClipboar $imagePasteInto = Image::getHtml('pasteinto.svg', sprintf($GLOBALS['TL_LANG'][$table]['pasteinto'][1], $row['id'])); if ($row['id'] > 0) { - $return = $disablePA ? Image::getHtml('pasteafter_.svg').' ' : 'get('contao.csrf.token_manager')->getDefaultTokenValue().'&pid='.$row['id'].(!\is_array($arrClipboard['id']) ? '&id='.$arrClipboard['id'] : '')).'" title="'.StringUtil::specialchars(sprintf($GLOBALS['TL_LANG'][$table]['pasteafter'][1], $row['id'])).'" onclick="Backend.getScrollOffset()">'.$imagePasteAfter.' '; } - return $return.($disablePI ? Image::getHtml('pasteinto_.svg').' ' : 'get('contao.csrf.token_manager')->getDefaultTokenValue().'&pid='.$row['id'].(!\is_array($arrClipboard['id']) ? '&id='.$arrClipboard['id'] : '')).'" title="'.StringUtil::specialchars(sprintf($GLOBALS['TL_LANG'][$table]['pasteinto'][1], $row['id'])).'" onclick="Backend.getScrollOffset()">'.$imagePasteInto.' '); } @@ -615,7 +625,7 @@ public function generateLabel($row, $label, $dca, $attributes) } // add category breadcrumb link - $label = ' '.$label.''; + $label = ' '.$label.''; if ('edit' !== System::getContainer()->get('huh.request')->getGet('act') && null !== (System::getContainer())->get('huh.categories.config_manager')->findBy(['tl_category_config.pid=?'], [$row['id']])) { $label .= '– '.$GLOBALS['TL_LANG']['MSC']['categoriesBundle']['configsAvailable'].''; diff --git a/src/Backend/CategoryConfig.php b/src/Backend/CategoryConfig.php index a96e923e..c90b5711 100644 --- a/src/Backend/CategoryConfig.php +++ b/src/Backend/CategoryConfig.php @@ -8,6 +8,7 @@ namespace HeimrichHannot\CategoriesBundle\Backend; +use Contao\System; use Contao\Backend; use Contao\DataContainer; use HeimrichHannot\CategoriesBundle\Model\CategoryContextModel; @@ -29,11 +30,11 @@ public static function getContextsAsOptions() public static function deleteCachedPropertyValuesByCategoryAndContext($value, DataContainer $dc) { - if (null !== ($config = \System::getContainer()->get('huh.categories.config_manager')->findOneBy('id', $dc->id))) { + if (null !== ($config = System::getContainer()->get('huh.categories.config_manager')->findOneBy('id', $dc->id))) { $valueOld = $config->context; if ($value != $valueOld) { - \System::getContainer()->get('huh.categories.property_cache_manager')->delete( + System::getContainer()->get('huh.categories.property_cache_manager')->delete( [ 'category=?', '(context=? OR context=?)', diff --git a/src/Backend/CategoryContext.php b/src/Backend/CategoryContext.php index d419d726..5c83f925 100644 --- a/src/Backend/CategoryContext.php +++ b/src/Backend/CategoryContext.php @@ -18,7 +18,7 @@ class CategoryContext extends Backend { const CATEGORY_FIELD_CONTEXT_MAPPING_FIELD = 'categoryFieldContextMapping'; - public static function addFieldContextMappingFieldToDca($table, $categoryFieldTable, $label = null) + public static function addFieldContextMappingFieldToDca($table, $categoryFieldTable, $label = null): void { System::loadLanguageFile('tl_category_context'); Controller::loadDataContainer($table); @@ -27,7 +27,7 @@ public static function addFieldContextMappingFieldToDca($table, $categoryFieldTa 'label' => &$GLOBALS['TL_LANG']['tl_category_context'][static::CATEGORY_FIELD_CONTEXT_MAPPING_FIELD], 'exclude' => true, 'inputType' => 'multiColumnEditor', - 'save_callback' => [['HeimrichHannot\CategoriesBundle\Backend\CategoryContext', 'deleteCachedPropertyValuesByFieldOrContext']], + 'save_callback' => [CategoryContext::deleteCachedPropertyValuesByFieldOrContext(...)], 'eval' => [ 'tl_class' => 'long clr', 'multiColumnEditor' => [ @@ -42,7 +42,7 @@ public static function addFieldContextMappingFieldToDca($table, $categoryFieldTa 'context' => [ 'label' => &$GLOBALS['TL_LANG']['tl_category_context']['context'], 'inputType' => 'select', - 'options_callback' => ['HeimrichHannot\CategoriesBundle\Backend\CategoryConfig', 'getContextsAsOptions'], + 'options_callback' => CategoryConfig::getContextsAsOptions(...), 'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'groupStyle' => 'width: 200px'], ], ], diff --git a/src/CategoriesBundle.php b/src/CategoriesBundle.php index 49ad7240..3a38e4af 100644 --- a/src/CategoriesBundle.php +++ b/src/CategoriesBundle.php @@ -8,6 +8,7 @@ namespace HeimrichHannot\CategoriesBundle; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use HeimrichHannot\CategoriesBundle\DependencyInjection\CategoriesExtension; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -16,7 +17,7 @@ class CategoriesBundle extends Bundle /** * {@inheritdoc} */ - public function getContainerExtension(): CategoriesExtension|\Symfony\Component\DependencyInjection\Extension\ExtensionInterface|null + public function getContainerExtension(): CategoriesExtension|ExtensionInterface|null { return new CategoriesExtension(); } diff --git a/src/Command/NewsCategoriesMigrationCommand.php b/src/Command/NewsCategoriesMigrationCommand.php index f5fda30d..cdf5e5dc 100644 --- a/src/Command/NewsCategoriesMigrationCommand.php +++ b/src/Command/NewsCategoriesMigrationCommand.php @@ -8,8 +8,8 @@ namespace HeimrichHannot\CategoriesBundle\Command; +use Contao\CoreBundle\Framework\ContaoFramework; use Contao\CoreBundle\Command\AbstractLockedCommand; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; use Contao\Database; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Query\QueryBuilder; @@ -63,15 +63,10 @@ class NewsCategoriesMigrationCommand extends AbstractLockedCommand * @var bool */ protected $dryRun = false; - /** - * @var ContaoFrameworkInterface - */ - private $framework; - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(private readonly ContaoFramework $framework) { parent::__construct(); - $this->framework = $framework; } /** diff --git a/src/ContaoManager/Plugin.php b/src/ContaoManager/Plugin.php index d04bbcf5..6adc28a0 100644 --- a/src/ContaoManager/Plugin.php +++ b/src/ContaoManager/Plugin.php @@ -12,10 +12,7 @@ use Contao\ManagerPlugin\Bundle\BundlePluginInterface; use Contao\ManagerPlugin\Bundle\Config\BundleConfig; use Contao\ManagerPlugin\Bundle\Parser\ParserInterface; -use Contao\ManagerPlugin\Config\ContainerBuilder; -use Contao\ManagerPlugin\Config\ExtensionPluginInterface; use HeimrichHannot\CategoriesBundle\CategoriesBundle; -use HeimrichHannot\UtilsBundle\Container\ContainerUtil; class Plugin implements BundlePluginInterface { diff --git a/src/DataContainer/NewsContainer.php b/src/DataContainer/NewsContainer.php index f4e4ff43..8ea68419 100644 --- a/src/DataContainer/NewsContainer.php +++ b/src/DataContainer/NewsContainer.php @@ -8,6 +8,19 @@ namespace HeimrichHannot\CategoriesBundle\DataContainer; +use Psr\Log\LogLevel; +use Contao\CoreBundle\Monolog\ContaoContext; +use Contao\Environment; +use Contao\Feed; +use Contao\Date; +use Contao\Config; +use Contao\FeedItem; +use Contao\ContentModel; +use Contao\FilesModel; +use Contao\File; +use Contao\ArticleModel; +use Contao\NewsFeedModel; +use Contao\CoreBundle\ContaoCoreBundle; use Contao\Controller; use Contao\CoreBundle\InsertTag\InsertTagParser; use Contao\Database; @@ -18,23 +31,23 @@ class NewsContainer { - public function __construct(private InsertTagParser $parser, private Utils $utils) + public function __construct(private readonly InsertTagParser $parser, private readonly Utils $utils) { } - public function generateFeeds() + public function generateFeeds(): void { if (!class_exists('Contao\NewsFeedModel')) { return; } - $objFeed = \Contao\NewsFeedModel::findAll(); + $objFeed = NewsFeedModel::findAll(); if (null !== $objFeed) { while ($objFeed->next()) { $objFeed->feedName = $objFeed->alias ?: 'news'.$objFeed->id; $this->generateFiles($objFeed->row()); - System::log('Generated news feed "'.$objFeed->feedName.'.xml"', __METHOD__, TL_CRON); + System::getContainer()->get('monolog.logger.contao')->log(LogLevel::INFO, 'Generated news feed "'.$objFeed->feedName.'.xml"', ['contao' => new ContaoContext(__METHOD__, ContaoContext::CRON)]); } } } @@ -46,7 +59,7 @@ public function generateFeeds() * * @throws \Exception */ - public function generateFiles($arrFeed) + public function generateFiles($arrFeed): void { $arrArchives = StringUtil::deserialize($arrFeed['archives']); $modelUtil = $this->utils->model(); @@ -67,15 +80,13 @@ public function generateFiles($arrFeed) return; } - $arrFields = array_map(function ($val) { - return '"'.$val.'"'; - }, $arrFields); + $arrFields = array_map(fn($val) => '"'.$val.'"', $arrFields); $strType = ('atom' == $arrFeed['format']) ? 'generateAtom' : 'generateRss'; - $strLink = $arrFeed['feedBase'] ?: \Environment::get('base'); + $strLink = $arrFeed['feedBase'] ?: Environment::get('base'); $strFile = $arrFeed['feedName']; - $objFeed = new \Feed($strFile); + $objFeed = new Feed($strFile); $objFeed->link = $strLink; $objFeed->title = $arrFeed['title']; $objFeed->description = $arrFeed['description']; @@ -85,7 +96,7 @@ public function generateFiles($arrFeed) $db = Database::getInstance(); // Get the items - $time = \Date::floorToMinute(); + $time = Date::floorToMinute(); $query = 'SELECT n.* FROM tl_news n INNER JOIN tl_category_association a ON n.id = a.entity WHERE a.categoryField IN ('.implode(',', $arrFields).')'. ' AND a.category IN ('.implode(',', $arrCategories).') AND n.pid IN ('.implode(',', $arrArchives).')'. @@ -117,13 +128,13 @@ public function generateFiles($arrFeed) // Get the jumpTo URL if (!isset($arrUrls[$jumpTo])) { - $objParent = \PageModel::findWithDetails($jumpTo); + $objParent = PageModel::findWithDetails($jumpTo); // A jumpTo page is set but does no longer exist (see #5781) if (null === $objParent) { $arrUrls[$jumpTo] = false; } else { - $arrUrls[$jumpTo] = $objParent->getAbsoluteUrl((\Config::get('useAutoItem') && !\Config::get('disableAlias')) ? '/%s' : '/items/%s'); + $arrUrls[$jumpTo] = $objParent->getAbsoluteUrl((Config::get('useAutoItem') && !Config::get('disableAlias')) ? '/%s' : '/items/%s'); } } @@ -143,7 +154,7 @@ public function generateFiles($arrFeed) } $strUrl = $arrUrls[$jumpTo]; - $objItem = new \FeedItem(); + $objItem = new FeedItem(); // Add the categories to the title if ('title' == $arrFeed['categories_show']) { @@ -159,18 +170,18 @@ public function generateFiles($arrFeed) // Prepare the description if ('source_text' == $arrFeed['source']) { $strDescription = ''; - $objElement = \ContentModel::findPublishedByPidAndTable($objArticle->id, 'tl_news'); + $objElement = ContentModel::findPublishedByPidAndTable($objArticle->id, 'tl_news'); if (null !== $objElement) { // Overwrite the request (see #7756) - $strRequest = \Environment::get('request'); - \Environment::set('request', $objItem->link); + $strRequest = Environment::get('request'); + Environment::set('request', $objItem->link); while ($objElement->next()) { $strDescription .= Controller::getContentElement($objElement->current()); } - \Environment::set('request', $strRequest); + Environment::set('request', $strRequest); } } else { $strDescription = $objArticle->teaser; @@ -192,7 +203,7 @@ public function generateFiles($arrFeed) // Add the article image as enclosure if ($objArticle->addImage) { - $objFile = \FilesModel::findByUuid($objArticle->singleSRC); + $objFile = FilesModel::findByUuid($objArticle->singleSRC); if (null !== $objFile) { $objItem->addEnclosure($objFile->path, $strLink); @@ -204,7 +215,7 @@ public function generateFiles($arrFeed) $arrEnclosure = StringUtil::deserialize($objArticle->enclosure, true); if (\is_array($arrEnclosure)) { - $objFile = \FilesModel::findMultipleByUuids($arrEnclosure); + $objFile = FilesModel::findMultipleByUuids($arrEnclosure); if (null !== $objFile) { while ($objFile->next()) { @@ -219,10 +230,10 @@ public function generateFiles($arrFeed) } // Create the file - if (class_exists('Contao\CoreBundle\ContaoCoreBundle')) { - \File::putContent('web/share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); + if (class_exists(ContaoCoreBundle::class)) { + File::putContent('web/share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); } else { - \File::putContent('share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); + File::putContent('share/'.$strFile.'.xml', $this->parser->replace($objFeed->$strType())); } } @@ -257,20 +268,20 @@ protected function getLink($objItem, $strUrl, $strBase = '') // Link to an article case 'article': - if (null !== ($objArticle = \ArticleModel::findByPk($objItem->articleId, ['eager' => true])) && ($objPid = $objArticle->getRelated('pid')) instanceof PageModel) { + if (null !== ($objArticle = ArticleModel::findByPk($objItem->articleId, ['eager' => true])) && ($objPid = $objArticle->getRelated('pid')) instanceof PageModel) { /* @var PageModel $objPid */ - return ampersand($objPid->getAbsoluteUrl('/articles/'.($objArticle->alias ?: $objArticle->id))); + return StringUtil::ampersand($objPid->getAbsoluteUrl('/articles/'.($objArticle->alias ?: $objArticle->id))); } break; } // Backwards compatibility (see #8329) - if ('' != $strBase && !preg_match('#^https?://#', $strUrl)) { + if ('' != $strBase && !preg_match('#^https?://#', (string) $strUrl)) { $strUrl = $strBase.$strUrl; } // Link to the default page - return sprintf(preg_replace('/%(?!s)/', '%%', $strUrl), ($objItem->alias ?: $objItem->id)); + return sprintf(preg_replace('/%(?!s)/', '%%', (string) $strUrl), ($objItem->alias ?: $objItem->id)); } } diff --git a/src/DataContainer/NewsFeedContainer.php b/src/DataContainer/NewsFeedContainer.php index 14ea1180..63342aad 100644 --- a/src/DataContainer/NewsFeedContainer.php +++ b/src/DataContainer/NewsFeedContainer.php @@ -10,17 +10,11 @@ class NewsFeedContainer { - /** - * @var NewsContainer - */ - private $newsContainer; - - public function __construct(NewsContainer $newsContainer) + public function __construct(private readonly NewsContainer $newsContainer) { - $this->newsContainer = $newsContainer; } - public function generateFeed() + public function generateFeed(): void { $this->newsContainer->generateFeeds(); } diff --git a/src/EventListener/HookListener.php b/src/EventListener/HookListener.php index ab304bac..0ed1b407 100644 --- a/src/EventListener/HookListener.php +++ b/src/EventListener/HookListener.php @@ -33,9 +33,9 @@ class HookListener * HookListener constructor. */ public function __construct( - private RequestStack $requestStack, - private Utils $utils, - private CategoryManager $categoryManager + private readonly RequestStack $requestStack, + private readonly Utils $utils, + private readonly CategoryManager $categoryManager ) {} protected function getRequest(): ?Request @@ -73,7 +73,7 @@ public function adjustCategoryTree($buffer, $template) return $buffer; } - public function reloadCategoryTree($action, DataContainer $dc) + public function reloadCategoryTree($action, DataContainer $dc): void { switch ($action) { case 'reloadCategoryTree': @@ -82,15 +82,15 @@ public function reloadCategoryTree($action, DataContainer $dc) // Handle the keys in "edit multiple" mode if ('editAll' === $this->getRequest()?->query->get('act')) { - $id = preg_replace('/.*_([0-9a-zA-Z]+)$/', '$1', $field); - $field = preg_replace('/(.*)_[0-9a-zA-Z]+$/', '$1', $field); + $id = preg_replace('/.*_([0-9a-zA-Z]+)$/', '$1', (string) $field); + $field = preg_replace('/(.*)_[0-9a-zA-Z]+$/', '$1', (string) $field); } $dc->field = $field; // The field does not exist if (!isset($GLOBALS['TL_DCA'][$dc->table]['fields'][$field])) { - System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'Field "'.$field.'" does not exist in DCA "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, TL_ERROR)]); + System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'Field "'.$field.'" does not exist in DCA "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, ContaoContext::ERROR)]); throw new BadRequestHttpException('Bad request'); } @@ -107,7 +107,7 @@ public function reloadCategoryTree($action, DataContainer $dc) // The record does not exist if ($row->numRows < 1) { - System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'A record with the ID "'.$id.'" does not exist in table "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, TL_ERROR)]); + System::getContainer()->get('monolog.logger.contao')->log(LogLevel::ERROR, 'A record with the ID "'.$id.'" does not exist in table "'.$dc->table.'"', ['contao' => new ContaoContext(__METHOD__, ContaoContext::ERROR)]); throw new BadRequestHttpException('Bad request'); } @@ -157,7 +157,7 @@ protected function hideUnselectableCheckboxes(string $buffer, array $selectableC $objNode->filter('.tree_view input[name="picker[]"]')->each(function ($objElement) use ($selectableCategories) { $categoryId = $objElement->getAttribute('value'); - if (\System::getContainer()->get('huh.categories.manager')->hasChildren($categoryId) && !\in_array($categoryId, $selectableCategories)) { + if (System::getContainer()->get('huh.categories.manager')->hasChildren($categoryId) && !\in_array($categoryId, $selectableCategories)) { $objElement->replaceWith('
'); } }); @@ -197,9 +197,7 @@ protected static function replaceOldBePaths($strContext) { $router = System::getContainer()->get('router'); - $generate = function ($route) use ($router) { - return substr($router->generate($route), \strlen(Environment::get('path')) + 1); - }; + $generate = (fn($route) => substr((string) $router->generate($route), \strlen((string) Environment::get('path')) + 1)); $arrMapper = [ 'contao/confirm.php' => $generate('contao_backend_confirm'), diff --git a/src/EventListener/LoadDataContainerListener.php b/src/EventListener/LoadDataContainerListener.php index dbdbdc95..5c5818c6 100644 --- a/src/EventListener/LoadDataContainerListener.php +++ b/src/EventListener/LoadDataContainerListener.php @@ -8,19 +8,17 @@ namespace HeimrichHannot\CategoriesBundle\EventListener; -use Contao\CoreBundle\ServiceAnnotation\Hook; +use Contao\CoreBundle\DependencyInjection\Attribute\AsHook; use Contao\System; use HeimrichHannot\CategoriesBundle\Backend\Category; use HeimrichHannot\CategoriesBundle\Filter\Type\CategoryChoiceType; use HeimrichHannot\CategoriesBundle\Filter\Type\ParentCategoryChoiceType; use HeimrichHannot\FilterBundle\Filter\Type\ChoiceType; -/** - * @Hook("loadDataContainer") - */ +#[AsHook('loadDataContainer')] class LoadDataContainerListener { - public function __invoke(string $table) + public function __invoke(string $table): void { switch ($table) { case 'tl_filter_config_element': diff --git a/src/Filter/Choice/CategoriesChoice.php b/src/Filter/Choice/CategoriesChoice.php index d51120d8..73bc0ac1 100644 --- a/src/Filter/Choice/CategoriesChoice.php +++ b/src/Filter/Choice/CategoriesChoice.php @@ -8,7 +8,8 @@ namespace HeimrichHannot\CategoriesBundle\Filter\Choice; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use HeimrichHannot\CategoriesBundle\Model\CategoryModel; use Contao\StringUtil; use Contao\System; use HeimrichHannot\CategoriesBundle\Manager\CategoryManager; @@ -17,15 +18,9 @@ class CategoriesChoice extends FieldOptionsChoice { - /** - * @var CategoryManager - */ - private $categoryManager; - - public function __construct(ContaoFrameworkInterface $framework, CategoryManager $categoryManager) + public function __construct(ContaoFramework $framework, private readonly CategoryManager $categoryManager) { parent::__construct($framework); - $this->categoryManager = $categoryManager; } /** @@ -49,7 +44,7 @@ protected function getCategoryWidgetOptions(FilterConfigElementModel $element, a $isFrontend = System::getContainer()->get('huh.utils.container')->isFrontend(); - /** @var \HeimrichHannot\CategoriesBundle\Model\CategoryModel $category */ + /** @var CategoryModel $category */ foreach ($categories as $category) { $options[] = ['label' => ($category->frontendTitle ?: $category->title).($isFrontend ? '' : ' (ID '.$category->id.')'), 'value' => $category->id]; } diff --git a/src/Filter/Type/ParentCategoryChoiceType.php b/src/Filter/Type/ParentCategoryChoiceType.php index ce7c679e..5e046604 100644 --- a/src/Filter/Type/ParentCategoryChoiceType.php +++ b/src/Filter/Type/ParentCategoryChoiceType.php @@ -22,7 +22,7 @@ class ParentCategoryChoiceType extends AbstractType { const TYPE = 'parent_category_choice'; - public function buildQuery(FilterQueryBuilder $builder, FilterConfigElementModel $element) + public function buildQuery(FilterQueryBuilder $builder, FilterConfigElementModel $element): void { $parentCategoryIds = StringUtil::deserialize($element->parentCategories, true); /** @var CategoryModel[]|Collection|null $parentCategories */ diff --git a/src/Manager/CategoryConfigManager.php b/src/Manager/CategoryConfigManager.php index 2852e68c..1aef3011 100644 --- a/src/Manager/CategoryConfigManager.php +++ b/src/Manager/CategoryConfigManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryConfigModel; class CategoryConfigManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryConfigModel|null + * @return Collection|CategoryConfigModel|null */ public function findBy($column, $value, array $options = []) { diff --git a/src/Manager/CategoryContextManager.php b/src/Manager/CategoryContextManager.php index 3a63d3bf..5d926b42 100644 --- a/src/Manager/CategoryContextManager.php +++ b/src/Manager/CategoryContextManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryContextModel; class CategoryContextManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryContextModel|null + * @return Collection|CategoryContextModel|null */ public function findBy($column, $value, array $options = []) { diff --git a/src/Manager/CategoryManager.php b/src/Manager/CategoryManager.php index 5f01c8ff..53d338d1 100644 --- a/src/Manager/CategoryManager.php +++ b/src/Manager/CategoryManager.php @@ -8,9 +8,9 @@ namespace HeimrichHannot\CategoriesBundle\Manager; +use Contao\Database; use Contao\Controller; use Contao\CoreBundle\Framework\ContaoFramework; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; use Contao\Model\Collection; use Contao\StringUtil; use Contao\System; @@ -21,7 +21,7 @@ class CategoryManager { - public function __construct(private ContaoFramework $framework, private Utils $utils) + public function __construct(private readonly ContaoFramework $framework, private readonly Utils $utils) { $this->framework->initialize(); } @@ -237,7 +237,7 @@ public function computeContext($contextObj, string $categoryField): ?int * * @param $contextObj */ - public function addOverridablePropertiesToCategory(CategoryModel $category, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false) + public function addOverridablePropertiesToCategory(CategoryModel $category, $contextObj, string $categoryField, int $primaryCategory, bool $skipCache = false): void { Controller::loadDataContainer('tl_category'); @@ -446,7 +446,7 @@ public function findByIdOrAlias($idOrAlias, array $options = []) * @param int $intPid The parent ID * @param array $arrIds An array of categories * - * @return \Model\Collection|CategoryModel[]|CategoryModel|null A collection of models or null if there are no categories + * @return Collection|CategoryModel[]|CategoryModel|null A collection of models or null if there are no categories */ public function findCategoryAndSubcategoryByPidAndIds(int $pid, array $arrIds) { @@ -454,13 +454,13 @@ public function findCategoryAndSubcategoryByPidAndIds(int $pid, array $arrIds) return null; } - $objCategories = \Database::getInstance()->prepare('SELECT c1.*, (SELECT COUNT(*) FROM tl_category c2 WHERE c2.pid=c1.id AND c2.id IN ('.implode(',', array_map('intval', $arrIds)).')) AS subcategories FROM tl_category c1 WHERE c1.pid=? AND c1.id IN ('.implode(',', array_map('intval', $arrIds)).') ORDER BY sorting ASC')->execute($pid); + $objCategories = Database::getInstance()->prepare('SELECT c1.*, (SELECT COUNT(*) FROM tl_category c2 WHERE c2.pid=c1.id AND c2.id IN ('.implode(',', array_map('intval', $arrIds)).')) AS subcategories FROM tl_category c1 WHERE c1.pid=? AND c1.id IN ('.implode(',', array_map('intval', $arrIds)).') ORDER BY sorting ASC')->execute($pid); if ($objCategories->numRows < 1) { return null; } - return \Model\Collection::createFromDbResult($objCategories, 'tl_category'); + return Collection::createFromDbResult($objCategories, 'tl_category'); } /** diff --git a/src/Manager/CategoryPropertyCacheManager.php b/src/Manager/CategoryPropertyCacheManager.php index dfd5c710..006d7a3a 100644 --- a/src/Manager/CategoryPropertyCacheManager.php +++ b/src/Manager/CategoryPropertyCacheManager.php @@ -8,20 +8,21 @@ namespace HeimrichHannot\CategoriesBundle\Manager; -use Contao\CoreBundle\Framework\ContaoFrameworkInterface; +use Contao\CoreBundle\Framework\ContaoFramework; +use Contao\Model\Collection; use HeimrichHannot\CategoriesBundle\Model\CategoryPropertyCacheModel; class CategoryPropertyCacheManager { /** - * @var ContaoFrameworkInterface + * @var ContaoFramework */ protected $framework; /** * Constructor. */ - public function __construct(ContaoFrameworkInterface $framework) + public function __construct(ContaoFramework $framework) { $this->framework = $framework; } @@ -32,7 +33,7 @@ public function __construct(ContaoFrameworkInterface $framework) * @param mixed $column * @param mixed $value * - * @return \Contao\Model\Collection|CategoryPropertyCacheModel|null + * @return Collection|CategoryPropertyCacheModel|null */ public function findBy($column, $value, array $options = []) { @@ -65,7 +66,7 @@ public function add(string $property, string $categoryField, int $category, int } /** - * @return \Contao\Model\Collection|CategoryPropertyCacheModel|null + * @return Collection|CategoryPropertyCacheModel|null */ public function get(string $property, string $categoryField, int $category, int $context) { diff --git a/src/Model/CategoryConfigModel.php b/src/Model/CategoryConfigModel.php index ee7765d1..64599c7d 100644 --- a/src/Model/CategoryConfigModel.php +++ b/src/Model/CategoryConfigModel.php @@ -8,7 +8,9 @@ namespace HeimrichHannot\CategoriesBundle\Model; -class CategoryConfigModel extends \Model +use Contao\Model; + +class CategoryConfigModel extends Model { protected static $strTable = 'tl_category_config'; } diff --git a/src/Module/ModuleCategoriesMenu.php b/src/Module/ModuleCategoriesMenu.php index 86748c49..de1ffd3d 100644 --- a/src/Module/ModuleCategoriesMenu.php +++ b/src/Module/ModuleCategoriesMenu.php @@ -8,6 +8,8 @@ namespace HeimrichHannot\CategoriesBundle\Module; +use Symfony\Component\HttpFoundation\Request; +use Contao\Module; use Contao\BackendTemplate; use Contao\FrontendTemplate; use Contao\PageModel; @@ -15,7 +17,7 @@ use Contao\System; use HeimrichHannot\CategoriesBundle\Backend\Category; -class ModuleCategoriesMenu extends \Contao\Module +class ModuleCategoriesMenu extends Module { /** * Template. @@ -52,7 +54,7 @@ class ModuleCategoriesMenu extends \Contao\Module */ public function generate() { - if (TL_MODE == 'BE') { + if (System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest(System::getContainer()->get('request_stack')->getCurrentRequest() ?? Request::create(''))) { $objTemplate = new BackendTemplate('be_wildcard'); $objTemplate->wildcard = '### CATEGORIES MENU ###'; @@ -178,7 +180,7 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) 'title' => StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][1]), 'linkTitle' => StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][1]), 'link' => $GLOBALS['TL_LANG']['MSC']['cm_resetCategories'][0], - 'href' => ampersand(str_replace('/'.$strParam.'/%s', '', $strUrl)), + 'href' => StringUtil::ampersand(str_replace('/'.$strParam.'/%s', '', $strUrl)), ]; $count = 1; @@ -203,8 +205,8 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) ) ? ' cm_trail' : ''); $strTitle = $category->frontendTitle ?: $category->title; - if (\System::getContainer()->get('translator')->getCatalogue()->has($strTitle)) { - $strTitle = \System::getContainer()->get('translator')->trans($strTitle); + if (System::getContainer()->get('translator')->getCatalogue()->has($strTitle)) { + $strTitle = System::getContainer()->get('translator')->trans($strTitle); } $arrRow = $category->row(); @@ -214,7 +216,7 @@ protected function renderCategories($intPid, $arrIds, $strUrl, $intLevel = 1) $arrRow['title'] = StringUtil::specialchars($strTitle, true); $arrRow['linkTitle'] = StringUtil::specialchars($strTitle, true); $arrRow['link'] = $strTitle; - $arrRow['href'] = ampersand(str_replace('%s', ($GLOBALS['TL_CONFIG']['disableAlias'] ? $category->id : $category->alias), $strUrl)); + $arrRow['href'] = StringUtil::ampersand(str_replace('%s', ($GLOBALS['TL_CONFIG']['disableAlias'] ? $category->id : $category->alias), $strUrl)); $arrCategories[] = $arrRow; } diff --git a/src/Picker/CategoryPickerProvider.php b/src/Picker/CategoryPickerProvider.php index b36e1bf9..016e04fc 100644 --- a/src/Picker/CategoryPickerProvider.php +++ b/src/Picker/CategoryPickerProvider.php @@ -40,7 +40,7 @@ public function supportsValue(PickerConfig $config): bool return is_numeric($config->getValue()); } - return false !== strpos($config->getValue(), '{{category_url::'); + return str_contains($config->getValue(), '{{category_url::'); } /** @@ -79,7 +79,7 @@ public function getDcaAttributes(PickerConfig $config): array return $attributes; } - if ($value && false !== strpos($value, '{{category_url::')) { + if ($value && str_contains($value, '{{category_url::')) { $attributes['value'] = str_replace(['{{category_url::', '}}'], '', $value); } diff --git a/src/Twig/CategoryExtension.php b/src/Twig/CategoryExtension.php index 16b6a4bb..2d18f9b2 100644 --- a/src/Twig/CategoryExtension.php +++ b/src/Twig/CategoryExtension.php @@ -18,9 +18,9 @@ class CategoryExtension extends AbstractExtension public function getFilters() { return [ - new TwigFilter('category', [$this, 'getCategory']), - new TwigFilter('contextualCategory', [$this, 'getContextualCategory']), - new TwigFilter('categories', [$this, 'getCategories']), + new TwigFilter('category', $this->getCategory(...)), + new TwigFilter('contextualCategory', $this->getContextualCategory(...)), + new TwigFilter('categories', $this->getCategories(...)), ]; } diff --git a/src/Widget/CategoryTree.php b/src/Widget/CategoryTree.php index b4aa0f44..ba44ce95 100644 --- a/src/Widget/CategoryTree.php +++ b/src/Widget/CategoryTree.php @@ -8,6 +8,7 @@ namespace HeimrichHannot\CategoriesBundle\Widget; +use Contao\Image; use Contao\FormHidden; use Contao\StringUtil; use Contao\System; @@ -81,7 +82,7 @@ public function generate() if (null !== $objCategories) { while ($objCategories->next()) { $arrSet[] = $objCategories->id; - $arrValues[$objCategories->id] = \Image::getHtml('iconPLAIN.svg').' '.$objCategories->title; + $arrValues[$objCategories->id] = Image::getHtml('iconPLAIN.svg').' '.$objCategories->title; } } } @@ -118,7 +119,7 @@ public function generate() $readonly = $dca['eval']['readonly'] ?? false; $return .= ' -

'.(($dca['eval']['disabled'] ?? false) || $readonly ? '' : ''.$GLOBALS['TL_LANG']['MSC']['changeSelection'].'').'

+

'.(($dca['eval']['disabled'] ?? false) || $readonly ? '' : ''.$GLOBALS['TL_LANG']['MSC']['changeSelection'].'').'