From ba63b8d35fde6a33677a384c1c1418e0e7b47812 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:21:42 -0300 Subject: [PATCH 1/6] chore: bump php dependencies Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- composer.lock | 182 ++++++++++++++++++----- vendor-bin/coding-standard/composer.lock | 24 +-- vendor-bin/php-coveralls/composer.lock | 40 ++--- vendor-bin/phpunit/composer.lock | 130 +++++++--------- vendor-bin/psalm/composer.lock | 111 +++++++------- 5 files changed, 292 insertions(+), 195 deletions(-) diff --git a/composer.lock b/composer.lock index f6013cf919..94e348a53d 100644 --- a/composer.lock +++ b/composer.lock @@ -492,12 +492,12 @@ "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "50fef0ff2189206a5228b81044f1730c2aa4b396" + "reference": "134c1cdd11e8ed6c8814a370a4ab03e567bd9659" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/50fef0ff2189206a5228b81044f1730c2aa4b396", - "reference": "50fef0ff2189206a5228b81044f1730c2aa4b396", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/134c1cdd11e8ed6c8814a370a4ab03e567bd9659", + "reference": "134c1cdd11e8ed6c8814a370a4ab03e567bd9659", "shasum": "" }, "require": { @@ -505,8 +505,10 @@ "psr/clock": "^1.0", "psr/container": "^2.0.2", "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0.3", "psr/log": "^3.0.2" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -530,9 +532,9 @@ "description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API", "support": { "issues": "https://github.com/nextcloud-deps/ocp/issues", - "source": "https://github.com/nextcloud-deps/ocp/tree/stable32" + "source": "https://github.com/nextcloud-deps/ocp/tree/master" }, - "time": "2026-03-31T01:18:57+00:00" + "time": "2026-04-23T01:28:52+00:00" }, { "name": "psr/clock", @@ -685,6 +687,111 @@ }, "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-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", @@ -741,12 +848,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da" + "reference": "9a1d6c95c513ebdc27e74ab3cd0fed99b7035c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/958bc6ccdb194912236265e4f36256e55bb0c9da", - "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9a1d6c95c513ebdc27e74ab3cd0fed99b7035c2e", + "reference": "9a1d6c95c513ebdc27e74ab3cd0fed99b7035c2e", "shasum": "" }, "conflict": { @@ -802,7 +909,6 @@ "auth0/wordpress": "<=5.5", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", - "avideo/avideo": "<=26", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<=3.371.3", "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", @@ -861,7 +967,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<=0.28.6", + "ci4-cms-erp/ci4ms": "<0.31.5", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -877,7 +983,7 @@ "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", + "composer/composer": "<2.2.27|>=2.3,<2.9.6", "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -894,7 +1000,7 @@ "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<=4.17.7|>=5,<=5.9.13", + "craftcms/cms": "<=4.17.8|>=5,<5.9.15", "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", @@ -1029,7 +1135,7 @@ "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.10", + "flarum/core": "<=1.8.15|>=2.0.0.0-beta1,<=2.0.0.0-beta8", "flarum/flarum": "<0.1.0.0-beta8", "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", @@ -1056,7 +1162,7 @@ "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<=2.3.4", + "froxlor/froxlor": "<2.3.6", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC4", @@ -1075,6 +1181,7 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", + "goodoneuz/pay-uz": "<=2.2.24", "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", @@ -1137,6 +1244,7 @@ "jasig/phpcas": "<1.3.3", "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", + "joedolson/my-calendar": "<3.7.7", "joelbutcher/socialstream": "<5.6|>=6,<6.2", "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", @@ -1156,18 +1264,19 @@ "juzaweb/cms": "<=3.4.2", "jweiland/events2": "<8.3.8|>=9,<9.0.6", "jweiland/kk-downloader": "<1.2.2", + "kantorge/yaffa": "<=2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.50", + "khodakhah/nodcms": "<=3.4.1", + "kimai/kimai": "<=2.53", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", "koillection/koillection": "<1.6.12", - "krayin/laravel-crm": "<=1.3", + "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", @@ -1179,6 +1288,7 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.7", "laravel/socialite": ">=1,<2.0.10", @@ -1220,6 +1330,7 @@ "manogi/nova-tiptap": "<=3.2.6", "mantisbt/mantisbt": "<2.28.1", "marcwillmann/turn": "<0.3.3", + "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", @@ -1300,9 +1411,9 @@ "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<3.7.5", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<=3.7.12|>=4,<=4.0.11", + "october/october": "<3.7.14|>=4,<4.1.10", + "october/rain": "<=3.7.13|>=4,<=4.1.9", + "october/system": "<3.7.16|>=4,<4.1.16", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -1310,7 +1421,7 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.16.1", + "openmage/magento-lts": "<20.17", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", @@ -1359,10 +1470,10 @@ "phpoffice/phpexcel": "<=1.8.2", "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<=2.0.51|>=3,<=3.0.49", + "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", + "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", @@ -1381,7 +1492,7 @@ "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.32.1", + "pocketmine/pocketmine-mp": "<5.42.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -1397,7 +1508,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", - "processwire/processwire": "<=3.0.246", + "processwire/processwire": "<=3.0.255", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", @@ -1421,20 +1532,21 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.20.1", + "redaxo/source": "<5.21", "remdex/livehelperchat": "<4.29", "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", - "rhukster/dom-sanitizer": "<1.0.7", + "rhukster/dom-sanitizer": "<1.0.10", "rmccue/requests": ">=1.6,<1.8", "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", + "s9y/serendipity": "<2.6", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", "saloonphp/saloon": "<4", @@ -1455,7 +1567,7 @@ "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", - "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/assets": "<2.4.5|>=3,<3.1.3", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", @@ -1508,9 +1620,9 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.16|>=6,<6.7.2", + "statamic/cms": "<5.73.20|>=6,<6.13", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.64", + "studio-42/elfinder": "<2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", @@ -1664,6 +1776,7 @@ "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", + "webonyx/graphql-php": "<=15.31.4", "webpa/webpa": "<3.1.2", "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", @@ -1683,12 +1796,12 @@ "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", "wpmetabox/meta-box": "<5.11.2", - "wwbn/avideo": "<=26", + "wwbn/avideo": "<=29", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", "yansongda/pay": "<=3.7.19", - "yeswiki/yeswiki": "<4.6", + "yeswiki/yeswiki": "<=4.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -1783,13 +1896,12 @@ "type": "tidelift" } ], - "time": "2026-04-03T04:48:53+00:00" + "time": "2026-04-22T21:20:32+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { - "jeidison/signer-php": 20, "nextcloud/ocp": 20, "roave/security-advisories": 20 }, diff --git a/vendor-bin/coding-standard/composer.lock b/vendor-bin/coding-standard/composer.lock index 761d7d8721..e52f41a465 100644 --- a/vendor-bin/coding-standard/composer.lock +++ b/vendor-bin/coding-standard/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "kubawerlos/php-cs-fixer-custom-fixers", - "version": "v3.36.1", + "version": "v3.37.0", "source": { "type": "git", "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", - "reference": "ec9776e80f5ea9bf0d8ec16d662e431bfab19a24" + "reference": "c31fb2aa359dcb25fb48cc6f600810ad284343be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/ec9776e80f5ea9bf0d8ec16d662e431bfab19a24", - "reference": "ec9776e80f5ea9bf0d8ec16d662e431bfab19a24", + "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/c31fb2aa359dcb25fb48cc6f600810ad284343be", + "reference": "c31fb2aa359dcb25fb48cc6f600810ad284343be", "shasum": "" }, "require": { @@ -49,7 +49,7 @@ "description": "A set of custom fixers for PHP CS Fixer", "support": { "issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues", - "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.36.1" + "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.37.0" }, "funding": [ { @@ -57,7 +57,7 @@ "type": "github" } ], - "time": "2026-03-07T11:35:13+00:00" + "time": "2026-04-16T16:49:13+00:00" }, { "name": "nextcloud/coding-standard", @@ -106,16 +106,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.94.2", + "version": "v3.95.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "80fd29f44a736136a2f05bae5464816a444b91d1" + "reference": "f81ccf51ca60cc9dd21358ffba0e79ebd2ebb78a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/80fd29f44a736136a2f05bae5464816a444b91d1", - "reference": "80fd29f44a736136a2f05bae5464816a444b91d1", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/f81ccf51ca60cc9dd21358ffba0e79ebd2ebb78a", + "reference": "f81ccf51ca60cc9dd21358ffba0e79ebd2ebb78a", "shasum": "" }, "require": { @@ -152,9 +152,9 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/shim/issues", - "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.94.2" + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.95.1" }, - "time": "2026-02-20T16:14:17+00:00" + "time": "2026-04-12T17:00:34+00:00" } ], "aliases": [], diff --git a/vendor-bin/php-coveralls/composer.lock b/vendor-bin/php-coveralls/composer.lock index cc833b53a7..bcf321a429 100644 --- a/vendor-bin/php-coveralls/composer.lock +++ b/vendor-bin/php-coveralls/composer.lock @@ -1039,16 +1039,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -1098,7 +1098,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -1118,20 +1118,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -1180,7 +1180,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -1200,11 +1200,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -1265,7 +1265,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -1289,16 +1289,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -1350,7 +1350,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -1370,7 +1370,7 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/service-contracts", diff --git a/vendor-bin/phpunit/composer.lock b/vendor-bin/phpunit/composer.lock index d4127855f8..0c74451a4a 100644 --- a/vendor-bin/phpunit/composer.lock +++ b/vendor-bin/phpunit/composer.lock @@ -882,23 +882,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.x-dev", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "11775ba4125a1e8ab6ab9c21e0607d9a484744dd" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/11775ba4125a1e8ab6ab9c21e0607d9a484744dd", - "reference": "11775ba4125a1e8ab6ab9c21e0607d9a484744dd", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.4.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=8.1", "phpunit/php-file-iterator": "^4.1.0", "phpunit/php-text-template": "^3.0.1", @@ -910,7 +910,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^10.5.40" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -948,27 +948,15 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", - "type": "tidelift" } ], - "time": "2025-12-19T18:25:59+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1269,12 +1257,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "27afcca2d30d647e3e44d496fe39718d994ad96c" + "reference": "80db391841ae01c1eb8b73239c1ff6979cf9cf0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/27afcca2d30d647e3e44d496fe39718d994ad96c", - "reference": "27afcca2d30d647e3e44d496fe39718d994ad96c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/80db391841ae01c1eb8b73239c1ff6979cf9cf0c", + "reference": "80db391841ae01c1eb8b73239c1ff6979cf9cf0c", "shasum": "" }, "require": { @@ -1354,7 +1342,7 @@ "type": "other" } ], - "time": "2026-03-31T14:31:44+00:00" + "time": "2026-04-23T12:32:34+00:00" }, { "name": "psr/http-client", @@ -1746,16 +1734,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.x-dev", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "8d8209833d5f3f3eb8da4401a975302c58da4e64" + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/8d8209833d5f3f3eb8da4401a975302c58da4e64", - "reference": "8d8209833d5f3f3eb8da4401a975302c58da4e64", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", "shasum": "" }, "require": { @@ -1811,7 +1799,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" }, "funding": [ { @@ -1831,7 +1819,7 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:31:40+00:00" + "time": "2026-01-24T09:25:16+00:00" }, { "name": "sebastian/complexity", @@ -1984,23 +1972,23 @@ }, { "name": "sebastian/environment", - "version": "6.1.x-dev", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "dd79e32fa7fb850456bbea2e8b984b0768dbce7a" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dd79e32fa7fb850456bbea2e8b984b0768dbce7a", - "reference": "dd79e32fa7fb850456bbea2e8b984b0768dbce7a", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -2036,40 +2024,28 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1" + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", - "type": "tidelift" } ], - "time": "2025-09-26T09:48:52+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.x-dev", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "674f8e4778fa027ec7b098e09ec6637b723bfbc2" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/674f8e4778fa027ec7b098e09ec6637b723bfbc2", - "reference": "674f8e4778fa027ec7b098e09ec6637b723bfbc2", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { @@ -2126,7 +2102,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { @@ -2146,7 +2122,7 @@ "type": "tidelift" } ], - "time": "2025-09-26T11:20:41+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", @@ -2647,12 +2623,12 @@ "source": { "type": "git", "url": "https://github.com/smalot/pdfparser.git", - "reference": "a6061664644f16074321322dffe43289f1bbb0d3" + "reference": "2cfa0d92bd557875c9f52a75fde0e8392302a354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smalot/pdfparser/zipball/a6061664644f16074321322dffe43289f1bbb0d3", - "reference": "a6061664644f16074321322dffe43289f1bbb0d3", + "url": "https://api.github.com/repos/smalot/pdfparser/zipball/2cfa0d92bd557875c9f52a75fde0e8392302a354", + "reference": "2cfa0d92bd557875c9f52a75fde0e8392302a354", "shasum": "" }, "require": { @@ -2691,7 +2667,7 @@ "issues": "https://github.com/smalot/pdfparser/issues", "source": "https://github.com/smalot/pdfparser/tree/master" }, - "time": "2026-03-27T07:31:19+00:00" + "time": "2026-04-17T11:37:58+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2699,12 +2675,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a" + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/bbd66f9d55454b9b7a66a9cebe77523806a3288a", - "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", "shasum": "" }, "require": { @@ -2763,7 +2739,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2026-04-13T15:52:40+00:00" }, { "name": "symfony/polyfill-ctype", @@ -2771,12 +2747,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -2827,7 +2803,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/1.x" }, "funding": [ { @@ -2847,7 +2823,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -2855,12 +2831,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -2913,7 +2889,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" }, "funding": [ { @@ -2933,7 +2909,7 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/yaml", @@ -2941,12 +2917,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883" + "reference": "563e765f912f7bbf939c1ceb472b2564ede7873d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c58fdf7b3d6c2995368264c49e4e8b05bcff2883", - "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883", + "url": "https://api.github.com/repos/symfony/yaml/zipball/563e765f912f7bbf939c1ceb472b2564ede7873d", + "reference": "563e765f912f7bbf939c1ceb472b2564ede7873d", "shasum": "" }, "require": { @@ -3009,7 +2985,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { "name": "theseer/tokenizer", diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index df9520798a..cb6682fb07 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -600,24 +600,27 @@ }, { "name": "amphp/serialization", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/amphp/serialization.git", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "phpunit/phpunit": "^9 || ^8 || ^7" + "amphp/php-cs-fixer-config": "^2", + "ext-json": "*", + "ext-zlib": "*", + "phpunit/phpunit": "^9", + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -652,22 +655,28 @@ ], "support": { "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/master" + "source": "https://github.com/amphp/serialization/tree/v1.1.0" }, - "time": "2020-03-25T21:39:07+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2026-04-05T15:59:53+00:00" }, { "name": "amphp/socket", - "version": "v2.3.1", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/amphp/socket.git", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1" + "reference": "dadb63c5d3179fd83803e29dfeac27350e619314" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1", + "url": "https://api.github.com/repos/amphp/socket/zipball/dadb63c5d3179fd83803e29dfeac27350e619314", + "reference": "dadb63c5d3179fd83803e29dfeac27350e619314", "shasum": "" }, "require": { @@ -676,17 +685,17 @@ "amphp/dns": "^2", "ext-openssl": "*", "kelunik/certificate": "^1.1", - "league/uri": "^6.5 | ^7", - "league/uri-interfaces": "^2.3 | ^7", + "league/uri": "^7", + "league/uri-interfaces": "^7", "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "revolt/event-loop": "^1" }, "require-dev": { "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "amphp/process": "^2", "phpunit/phpunit": "^9", - "psalm/phar": "5.20" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -730,7 +739,7 @@ ], "support": { "issues": "https://github.com/amphp/socket/issues", - "source": "https://github.com/amphp/socket/tree/v2.3.1" + "source": "https://github.com/amphp/socket/tree/v2.4.0" }, "funding": [ { @@ -738,7 +747,7 @@ "type": "github" } ], - "time": "2024-04-21T14:33:03+00:00" + "time": "2026-04-19T15:09:56+00:00" }, { "name": "amphp/sync", @@ -2562,16 +2571,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -2621,7 +2630,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -2641,20 +2650,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -2703,7 +2712,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -2723,11 +2732,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -2788,7 +2797,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -2812,16 +2821,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -2873,7 +2882,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -2893,20 +2902,20 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -2953,7 +2962,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -2973,7 +2982,7 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { "name": "symfony/service-contracts", @@ -3273,16 +3282,16 @@ }, { "name": "webmozart/assert", - "version": "2.1.6", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8" + "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ff31ad6efc62e66e518fbab1cde3453d389bcdc8", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4", + "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4", "shasum": "" }, "require": { @@ -3329,9 +3338,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.6" + "source": "https://github.com/webmozarts/assert/tree/2.3.0" }, - "time": "2026-02-27T10:28:38+00:00" + "time": "2026-04-11T10:33:05+00:00" } ], "aliases": [], From 514f526ae2910fdeb23778befe49c3128d90e84a Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:28:52 -0300 Subject: [PATCH 2/6] fix: downgrade minimum PHP version to 8.1 Nextcloud 32 have PHP8.1 as minimum supported version Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- composer.json | 2 +- tests/integration/composer.json | 2 +- vendor-bin/coding-standard/composer.json | 2 +- vendor-bin/openapi-extractor/composer.json | 2 +- vendor-bin/php-coveralls/composer.json | 2 +- vendor-bin/phpunit/composer.json | 2 +- vendor-bin/psalm/composer.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 085c2a5985..f5fbc216ea 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "cweagans/composer-patches": true }, "platform": { - "php": "8.2" + "php": "8.1" } }, "scripts": { diff --git a/tests/integration/composer.json b/tests/integration/composer.json index cc0b59c836..3c64b11221 100644 --- a/tests/integration/composer.json +++ b/tests/integration/composer.json @@ -15,7 +15,7 @@ "php-http/discovery": true }, "platform": { - "php": "8.2" + "php": "8.1" } } } diff --git a/vendor-bin/coding-standard/composer.json b/vendor-bin/coding-standard/composer.json index c53c60f5e5..ea155befec 100644 --- a/vendor-bin/coding-standard/composer.json +++ b/vendor-bin/coding-standard/composer.json @@ -5,7 +5,7 @@ }, "config": { "platform": { - "php": "8.2" + "php": "8.1" } } } diff --git a/vendor-bin/openapi-extractor/composer.json b/vendor-bin/openapi-extractor/composer.json index 0fe7ec5860..39ed7889c0 100644 --- a/vendor-bin/openapi-extractor/composer.json +++ b/vendor-bin/openapi-extractor/composer.json @@ -4,7 +4,7 @@ }, "config": { "platform": { - "php": "8.2" + "php": "8.1" } } } diff --git a/vendor-bin/php-coveralls/composer.json b/vendor-bin/php-coveralls/composer.json index 142a0ee17d..4763d97fae 100644 --- a/vendor-bin/php-coveralls/composer.json +++ b/vendor-bin/php-coveralls/composer.json @@ -4,7 +4,7 @@ }, "config": { "platform": { - "php": "8.2" + "php": "8.1" } } } diff --git a/vendor-bin/phpunit/composer.json b/vendor-bin/phpunit/composer.json index b91cf3fbce..872c562d93 100644 --- a/vendor-bin/phpunit/composer.json +++ b/vendor-bin/phpunit/composer.json @@ -15,7 +15,7 @@ "cweagans/composer-patches": true }, "platform": { - "php": "8.2" + "php": "8.1" } }, "extra": { diff --git a/vendor-bin/psalm/composer.json b/vendor-bin/psalm/composer.json index 854020d9a6..fd8b19813b 100644 --- a/vendor-bin/psalm/composer.json +++ b/vendor-bin/psalm/composer.json @@ -1,7 +1,7 @@ { "config": { "platform": { - "php": "8.2.27" + "php": "8.1" }, "sort-packages": true }, From d1540446b725af509c272ec55a71e70d796ed2d8 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:18:13 -0300 Subject: [PATCH 3/6] chore: align dependencies with PHP 8.1 Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- composer.json | 1 - composer.lock | 73 +- psalm.xml | 2 +- vendor-bin/coding-standard/composer.lock | 4 +- vendor-bin/openapi-extractor/composer.lock | 4 +- vendor-bin/php-coveralls/composer.lock | 148 +- vendor-bin/psalm/composer.json | 2 +- vendor-bin/psalm/composer.lock | 1723 +++----------------- 8 files changed, 325 insertions(+), 1632 deletions(-) diff --git a/composer.json b/composer.json index f5fbc216ea..b5c6c5fcc4 100644 --- a/composer.json +++ b/composer.json @@ -62,7 +62,6 @@ }, "require": { "cweagans/composer-patches": "^2.0", - "jeidison/signer-php": "^1.0", "phpseclib/phpseclib": "^3.0" } } diff --git a/composer.lock b/composer.lock index 94e348a53d..0cd1272f35 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "683fc6c9ae20a480af7b531acfea05bb", + "content-hash": "86643c2fbb8bd69c1cfea0bc10c78404", "packages": [ { "name": "cweagans/composer-configurable-plugin", @@ -129,75 +129,6 @@ ], "time": "2025-10-30T23:44:22+00:00" }, - { - "name": "jeidison/signer-php", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/jeidison/signer-php.git", - "reference": "47c8d011558c9995a1a46674be1911d9087cfd73" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jeidison/signer-php/zipball/47c8d011558c9995a1a46674be1911d9087cfd73", - "reference": "47c8d011558c9995a1a46674be1911d9087cfd73", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-fileinfo": "*", - "ext-openssl": "*", - "ext-zlib": "*", - "php": "^8.2" - }, - "require-dev": { - "deptrac/deptrac": "^4.6", - "infection/infection": "^0.29", - "laravel/pint": "^1.20", - "pestphp/pest": "^3.0", - "roave/security-advisories": "dev-latest", - "symfony/var-dumper": "^6.4.2", - "vimeo/psalm": "^6.15" - }, - "bin": [ - "bin/signer-sign", - "bin/signer-inspect", - "bin/signer-doctor" - ], - "type": "library", - "autoload": { - "psr-4": { - "SignerPHP\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeidison Farias" - } - ], - "description": "Open-source PHP library for PDF digital signing with multiple signatures, RFC3161 timestamping, PAdES profiles, and PDF protection", - "keywords": [ - "digital-signature", - "docmdp", - "icp-brasil", - "multiple-signatures", - "pades", - "pdf", - "php", - "rfc3161", - "signer", - "timestamp" - ], - "support": { - "issues": "https://github.com/jeidison/signer-php/issues", - "source": "https://github.com/jeidison/signer-php/tree/v1.0.1" - }, - "time": "2026-03-17T00:40:40+00:00" - }, { "name": "paragonie/constant_time_encoding", "version": "v3.1.3", @@ -1910,7 +1841,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2" + "php": "8.1" }, "plugin-api-version": "2.9.0" } diff --git a/psalm.xml b/psalm.xml index d0fa2c9718..1e8d2aa467 100644 --- a/psalm.xml +++ b/psalm.xml @@ -5,7 +5,7 @@ findUnusedBaselineEntry="true" findUnusedCode="false" resolveFromConfigFile="true" - phpVersion="8.2" + phpVersion="8.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor-bin/psalm/vendor/vimeo/psalm/config.xsd" diff --git a/vendor-bin/coding-standard/composer.lock b/vendor-bin/coding-standard/composer.lock index e52f41a465..ca4783f6a5 100644 --- a/vendor-bin/coding-standard/composer.lock +++ b/vendor-bin/coding-standard/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5961527649ac94c66d6190eda1a5fb24", + "content-hash": "4bfe22682a6caffa58692de60ab3c847", "packages": [], "packages-dev": [ { @@ -165,7 +165,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2" + "php": "8.1" }, "plugin-api-version": "2.9.0" } diff --git a/vendor-bin/openapi-extractor/composer.lock b/vendor-bin/openapi-extractor/composer.lock index 2753c4e1ab..fe35df210a 100644 --- a/vendor-bin/openapi-extractor/composer.lock +++ b/vendor-bin/openapi-extractor/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bc6dd750e2c1df245094c18d72bb9a92", + "content-hash": "99bfb35af8f1ffd93e7911b351ff56d6", "packages": [], "packages-dev": [ { @@ -243,7 +243,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2" + "php": "8.1" }, "plugin-api-version": "2.9.0" } diff --git a/vendor-bin/php-coveralls/composer.lock b/vendor-bin/php-coveralls/composer.lock index bcf321a429..51fcc9fff7 100644 --- a/vendor-bin/php-coveralls/composer.lock +++ b/vendor-bin/php-coveralls/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8475b522bbf8e4b212e0021d48145135", + "content-hash": "d46db7498570b021e97227718a6c2199", "packages": [], "packages-dev": [ { @@ -725,34 +725,34 @@ }, { "name": "symfony/config", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b" + "reference": "ce9cb0c0d281aaf188b802d4968e42bfb60701e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2d19dde43fa2ff720b9a40763ace7226594f503b", - "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b", + "url": "https://api.github.com/repos/symfony/config/zipball/ce9cb0c0d281aaf188b802d4968e42bfb60701e9", + "reference": "ce9cb0c0d281aaf188b802d4968e42bfb60701e9", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1|^8.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<6.4", + "symfony/finder": "<5.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", + "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": "^6.4|^7.0|^8.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -780,7 +780,7 @@ "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/v7.4.8" + "source": "https://github.com/symfony/config/tree/v6.4.34" }, "funding": [ { @@ -800,51 +800,51 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-24T17:34:50+00:00" }, { "name": "symfony/console", - "version": "v7.4.8", + "version": "v6.4.36", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "url": "https://api.github.com/repos/symfony/console/zipball/9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -878,7 +878,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.8" + "source": "https://github.com/symfony/console/tree/v6.4.36" }, "funding": [ { @@ -898,7 +898,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-03-27T15:30:51+00:00" }, { "name": "symfony/deprecation-contracts", @@ -969,25 +969,25 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/01ffe0411b842f93c571e5c391f289c3fdd498c3", + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { @@ -1015,7 +1015,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.8" + "source": "https://github.com/symfony/filesystem/tree/v6.4.34" }, "funding": [ { @@ -1035,7 +1035,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-24T17:51:06+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1461,20 +1461,20 @@ }, { "name": "symfony/stopwatch", - "version": "v7.4.8", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89" + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/70a852d72fec4d51efb1f48dcd968efcaf5ccb89", - "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898", + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -1503,7 +1503,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.4.8" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.24" }, "funding": [ { @@ -1523,27 +1523,26 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/string", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "114ac57257d75df748eda23dd003878080b8e688" + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", - "reference": "114ac57257d75df748eda23dd003878080b8e688", + "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -1551,11 +1550,10 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -1594,7 +1592,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.34" }, "funding": [ { @@ -1614,32 +1612,32 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-08T20:44:54+00:00" }, { "name": "symfony/yaml", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883" + "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c58fdf7b3d6c2995368264c49e4e8b05bcff2883", - "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7bca30dabed7900a08c5ad4f1d6483f881a64d0f", + "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -1670,7 +1668,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.8" + "source": "https://github.com/symfony/yaml/tree/v6.4.34" }, "funding": [ { @@ -1690,7 +1688,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-06T18:32:11+00:00" } ], "aliases": [], @@ -1701,7 +1699,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2" + "php": "8.1" }, "plugin-api-version": "2.9.0" } diff --git a/vendor-bin/psalm/composer.json b/vendor-bin/psalm/composer.json index fd8b19813b..7b6a493905 100644 --- a/vendor-bin/psalm/composer.json +++ b/vendor-bin/psalm/composer.json @@ -6,6 +6,6 @@ "sort-packages": true }, "require-dev": { - "vimeo/psalm": "6.16.1" + "vimeo/psalm": "^5.26" } } diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index cb6682fb07..e52bfaea9e 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -4,708 +4,43 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d78b96465b8eec4ff3c52ea66a61d206", + "content-hash": "24e50d119b792c01443b321af8546b81", "packages": [], "packages-dev": [ { "name": "amphp/amp", - "version": "v3.1.1", + "version": "v2.6.5", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", - "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "url": "https://api.github.com/repos/amphp/amp/zipball/d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", "shasum": "" }, "require": { - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "5.23.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php", - "src/Future/functions.php", - "src/Internal/functions.php" - ], - "psr-4": { - "Amp\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "support": { - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-08-27T21:42:00+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46", - "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/parser": "^1.1", - "amphp/pipeline": "^1", - "amphp/serialization": "^1", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2.3" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.22.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php", - "src/Internal/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v2.1.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-03-16T17:10:27+00:00" - }, - { - "name": "amphp/cache", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/cache.git", - "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c", - "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/serialization": "^1", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Cache\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - } - ], - "description": "A fiber-aware cache API based on Amp and Revolt.", - "homepage": "https://amphp.org/cache", - "support": { - "issues": "https://github.com/amphp/cache/issues", - "source": "https://github.com/amphp/cache/tree/v2.0.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-04-19T03:38:06+00:00" - }, - { - "name": "amphp/dns", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/dns.git", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/cache": "^2", - "amphp/parser": "^1", - "amphp/process": "^2", - "daverandom/libdns": "^2.0.2", - "ext-filter": "*", - "ext-json": "*", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.20" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Dns\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Wright", - "email": "addr@daverandom.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "Async DNS resolution for Amp.", - "homepage": "https://github.com/amphp/dns", - "keywords": [ - "amp", - "amphp", - "async", - "client", - "dns", - "resolve" - ], - "support": { - "issues": "https://github.com/amphp/dns/issues", - "source": "https://github.com/amphp/dns/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-01-19T15:43:40+00:00" - }, - { - "name": "amphp/parallel", - "version": "v2.3.3", - "source": { - "type": "git", - "url": "https://github.com/amphp/parallel.git", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/cache": "^2", - "amphp/parser": "^1", - "amphp/pipeline": "^1", - "amphp/process": "^2", - "amphp/serialization": "^1", - "amphp/socket": "^2", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" - }, - "type": "library", - "autoload": { - "files": [ - "src/Context/functions.php", - "src/Context/Internal/functions.php", - "src/Ipc/functions.php", - "src/Worker/functions.php" - ], - "psr-4": { - "Amp\\Parallel\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - } - ], - "description": "Parallel processing component for Amp.", - "homepage": "https://github.com/amphp/parallel", - "keywords": [ - "async", - "asynchronous", - "concurrent", - "multi-processing", - "multi-threading" - ], - "support": { - "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.3" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-11-15T06:23:42+00:00" - }, - { - "name": "amphp/parser", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/parser.git", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Parser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A generator parser to make streaming parsers simple.", - "homepage": "https://github.com/amphp/parser", - "keywords": [ - "async", - "non-blocking", - "parser", - "stream" - ], - "support": { - "issues": "https://github.com/amphp/parser/issues", - "source": "https://github.com/amphp/parser/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T19:16:53+00:00" - }, - { - "name": "amphp/pipeline", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/amphp/pipeline.git", - "reference": "7b52598c2e9105ebcddf247fc523161581930367" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367", - "reference": "7b52598c2e9105ebcddf247fc523161581930367", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "php": ">=8.1", - "revolt/event-loop": "^1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Pipeline\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Asynchronous iterators and operators.", - "homepage": "https://amphp.org/pipeline", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "iterator", - "non-blocking" - ], - "support": { - "issues": "https://github.com/amphp/pipeline/issues", - "source": "https://github.com/amphp/pipeline/tree/v1.2.3" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2025-03-16T16:33:53+00:00" - }, - { - "name": "amphp/process", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/amphp/process.git", - "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", - "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Process\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A fiber-aware process manager based on Amp and Revolt.", - "homepage": "https://amphp.org/process", - "support": { - "issues": "https://github.com/amphp/process/issues", - "source": "https://github.com/amphp/process/tree/v2.0.3" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-04-19T03:13:44+00:00" - }, - { - "name": "amphp/serialization", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/serialization.git", - "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", - "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "ext-json": "*", - "ext-zlib": "*", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Serialization\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Serialization tools for IPC and data storage in PHP.", - "homepage": "https://github.com/amphp/serialization", - "keywords": [ - "async", - "asynchronous", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/v1.1.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-04-05T15:59:53+00:00" - }, - { - "name": "amphp/socket", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/socket.git", - "reference": "dadb63c5d3179fd83803e29dfeac27350e619314" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/dadb63c5d3179fd83803e29dfeac27350e619314", - "reference": "dadb63c5d3179fd83803e29dfeac27350e619314", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/dns": "^2", - "ext-openssl": "*", - "kelunik/certificate": "^1.1", - "league/uri": "^7", - "league/uri-interfaces": "^7", - "php": ">=8.1", - "revolt/event-loop": "^1" + "php": ">=7.1" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "amphp/process": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "autoload": { "files": [ - "src/functions.php", - "src/Internal/functions.php", - "src/SocketAddress/functions.php" + "lib/functions.php", + "lib/Internal/functions.php" ], "psr-4": { - "Amp\\Socket\\": "src" + "Amp\\": "lib" } }, "notification-url": "https://packagist.org/downloads/", @@ -715,31 +50,38 @@ "authors": [ { "name": "Daniel Lowrey", - "email": "rdlowrey@gmail.com" + "email": "rdlowrey@php.net" }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, { "name": "Niklas Keller", "email": "me@kelunik.com" } ], - "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", - "homepage": "https://github.com/amphp/socket", + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", "keywords": [ - "amp", "async", - "encryption", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", "non-blocking", - "sockets", - "tcp", - "tls" + "promise" ], "support": { - "issues": "https://github.com/amphp/socket/issues", - "source": "https://github.com/amphp/socket/tree/v2.4.0" + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.5" }, "funding": [ { @@ -747,42 +89,41 @@ "type": "github" } ], - "time": "2026-04-19T15:09:56+00:00" + "time": "2025-09-03T19:41:28+00:00" }, { - "name": "amphp/sync", - "version": "v2.3.0", + "name": "amphp/byte-stream", + "version": "v1.8.2", "source": { "type": "git", - "url": "https://github.com/amphp/sync.git", - "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1" + "url": "https://github.com/amphp/byte-stream.git", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", - "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/pipeline": "^1", - "amphp/serialization": "^1", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "amphp/amp": "^2", + "php": ">=7.1" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.23" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" }, "type": "library", "autoload": { "files": [ - "src/functions.php" + "lib/functions.php" ], "psr-4": { - "Amp\\Sync\\": "src" + "Amp\\ByteStream\\": "lib" } }, "notification-url": "https://packagist.org/downloads/", @@ -797,24 +138,21 @@ { "name": "Niklas Keller", "email": "me@kelunik.com" - }, - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" } ], - "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", - "homepage": "https://github.com/amphp/sync", + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", "keywords": [ + "amp", + "amphp", "async", - "asynchronous", - "mutex", - "semaphore", - "synchronization" + "io", + "non-blocking", + "stream" ], "support": { - "issues": "https://github.com/amphp/sync/issues", - "source": "https://github.com/amphp/sync/tree/v2.3.0" + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -822,7 +160,7 @@ "type": "github" } ], - "time": "2024-08-03T19:31:26+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "composer/pcre", @@ -1046,102 +384,6 @@ ], "time": "2024-05-06T16:37:16+00:00" }, - { - "name": "danog/advanced-json-rpc", - "version": "v3.2.3", - "source": { - "type": "git", - "url": "https://github.com/danog/php-advanced-json-rpc.git", - "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/ae703ea7b4811797a10590b6078de05b3b33dd91", - "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^5", - "php": ">=8.1", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0 || ^6" - }, - "replace": { - "felixfbecker/php-advanced-json-rpc": "^3" - }, - "require-dev": { - "phpunit/phpunit": "^9" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - }, - { - "name": "Daniil Gentili", - "email": "daniil@daniil.it" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/danog/php-advanced-json-rpc/issues", - "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.3" - }, - "time": "2026-01-12T21:07:10+00:00" - }, - { - "name": "daverandom/libdns", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/DaveRandom/LibDNS.git", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "Required for IDN support" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "LibDNS\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "DNS protocol implementation written in pure PHP", - "keywords": [ - "dns" - ], - "support": { - "issues": "https://github.com/DaveRandom/LibDNS/issues", - "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" - }, - "time": "2024-04-12T12:12:48+00:00" - }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", @@ -1228,36 +470,31 @@ "time": "2026-02-07T07:09:04+00:00" }, { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.3", + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", "source": { "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", "shasum": "" }, "require": { - "php": ">=7.1" + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" }, "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" + "phpunit/phpunit": "^7.0 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "psr-4": { - "LanguageServerProtocol\\": "src/" + "AdvancedJsonRpc\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1270,101 +507,34 @@ "email": "felix.b@outlook.com" } ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" - }, - "time": "2024-04-30T00:40:11+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-deprecation-rules": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], + "description": "A more advanced JSONRPC implementation", "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2025-08-14T07:29:31+00:00" + "time": "2021-06-11T22:34:44+00:00" }, { - "name": "kelunik/certificate", - "version": "v1.1.3", + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.3", "source": { "type": "git", - "url": "https://github.com/kelunik/certificate.git", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", "shasum": "" }, "require": { - "ext-openssl": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" }, "type": "library", "extra": { @@ -1374,168 +544,64 @@ }, "autoload": { "psr-4": { - "Kelunik\\Certificate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Access certificate details and transform between different formats.", - "keywords": [ - "DER", - "certificate", - "certificates", - "openssl", - "pem", - "x509" - ], - "support": { - "issues": "https://github.com/kelunik/certificate/issues", - "source": "https://github.com/kelunik/certificate/tree/v1.1.3" - }, - "time": "2023-02-03T21:26:53+00:00" - }, - { - "name": "league/uri", - "version": "7.8.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.8.1", - "php": "^8.1", - "psr/http-factory": "^1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-dom": "to convert the URI into an HTML anchor tag", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", - "league/uri-components": "to provide additional tools to manipulate URI objects components", - "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" + "LanguageServerProtocol\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "ISC" ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Felix Becker", + "email": "felix.b@outlook.com" } ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", + "description": "PHP classes for the Language Server Protocol", "keywords": [ - "URN", - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc2141", - "rfc3986", - "rfc3987", - "rfc6570", - "rfc8141", - "uri", - "uri-template", - "url", - "ws" + "language", + "microsoft", + "php", + "server" ], "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.8.1" + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-15T20:22:25+00:00" + "time": "2024-04-30T00:40:11+00:00" }, { - "name": "league/uri-interfaces", - "version": "7.8.1", + "name": "fidry/cpu-core-counter", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-message": "^1.1 || ^2.0" + "php": "^7.2 || ^8.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", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1544,58 +610,39 @@ ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", - "homepage": "https://uri.thephpleague.com", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" + "CPU", + "core" ], "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.8.1" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { - "url": "https://github.com/sponsors/nyamsprod", + "url": "https://github.com/theofidry", "type": "github" } ], - "time": "2026-03-08T20:05:35+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v5.0.1", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "980674efdda65913492d29a8fd51c82270dd37bb" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/980674efdda65913492d29a8fd51c82270dd37bb", - "reference": "980674efdda65913492d29a8fd51c82270dd37bb", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -1631,43 +678,36 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.1" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2026-02-22T16:28:03+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v4.19.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.4" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -1689,9 +729,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2025-12-06T11:45:25+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1748,16 +788,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "6.0.3", + "version": "5.6.7", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" + "reference": "31a105931bc8ffa3a123383829772e832fd8d903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", + "reference": "31a105931bc8ffa3a123383829772e832fd8d903", "shasum": "" }, "require": { @@ -1765,8 +805,8 @@ "ext-filter": "*", "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^2.0", - "phpstan/phpdoc-parser": "^2.0", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { @@ -1776,8 +816,7 @@ "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26", - "shipmonk/dead-code-detector": "^0.5.1" + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -1807,44 +846,44 @@ "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/6.0.3" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7" }, - "time": "2026-03-18T20:49:53+00:00" + "time": "2026-03-18T20:47:46+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "2.0.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^2.0" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^9.5", - "psalm/phar": "^4" + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -1865,9 +904,9 @@ "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/2.0.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2026-01-06T21:53:42+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -1969,114 +1008,6 @@ }, "time": "2021-11-05T16:47:00+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", @@ -2127,103 +1058,31 @@ }, "time": "2024-09-11T13:17:53+00:00" }, - { - "name": "revolt/event-loop", - "version": "v1.0.8", - "source": { - "type": "git", - "url": "https://github.com/revoltphp/event-loop.git", - "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", - "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.15" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Revolt\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "ceesjank@gmail.com" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Rock-solid event loop for concurrent PHP applications.", - "keywords": [ - "async", - "asynchronous", - "concurrency", - "event", - "event-loop", - "non-blocking", - "scheduler" - ], - "support": { - "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" - }, - "time": "2025-08-27T21:33:23+00:00" - }, { "name": "sebastian/diff", - "version": "6.0.2", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2256,7 +1115,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -2264,7 +1123,7 @@ "type": "github" } ], - "time": "2024-07-03T04:53:05+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "spatie/array-to-xml", @@ -2336,47 +1195,47 @@ }, { "name": "symfony/console", - "version": "v7.4.8", + "version": "v6.4.36", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "url": "https://api.github.com/repos/symfony/console/zipball/9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2410,7 +1269,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.8" + "source": "https://github.com/symfony/console/tree/v6.4.36" }, "funding": [ { @@ -2430,7 +1289,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-03-27T15:30:51+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2501,25 +1360,25 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/01ffe0411b842f93c571e5c391f289c3fdd498c3", + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { @@ -2547,7 +1406,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.8" + "source": "https://github.com/symfony/filesystem/tree/v6.4.34" }, "funding": [ { @@ -2567,7 +1426,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-24T17:51:06+00:00" }, { "name": "symfony/polyfill-ctype", @@ -2904,86 +1763,6 @@ ], "time": "2026-04-10T17:25:58+00:00" }, - { - "name": "symfony/polyfill-php84", - "version": "v1.36.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", - "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.36.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2026-04-10T18:47:49+00:00" - }, { "name": "symfony/service-contracts", "version": "v3.6.1", @@ -3073,23 +1852,22 @@ }, { "name": "symfony/string", - "version": "v7.4.8", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "114ac57257d75df748eda23dd003878080b8e688" + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", - "reference": "114ac57257d75df748eda23dd003878080b8e688", + "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -3097,11 +1875,10 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3140,7 +1917,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.34" }, "funding": [ { @@ -3160,30 +1937,28 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-02-08T20:44:54+00:00" }, { "name": "vimeo/psalm", - "version": "6.16.1", + "version": "5.26.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac" + "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", + "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/parallel": "^2.3", + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^2.0 || ^3.0", - "danog/advanced-json-rpc": "^3.1", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -3192,26 +1967,27 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/language-server-protocol": "^1.5.3", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^5.0", - "nikic/php-parser": "^5.0.0", - "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.17", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^6.0 || ^7.0 || ^8.0", - "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", - "symfony/polyfill-php84": "^1.31.0" + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "nikic/php-parser": "4.17.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "amphp/phpunit-util": "^3", + "amphp/phpunit-util": "^2.0", "bamarni/composer-bin-plugin": "^1.4", "brianium/paratest": "^6.9", - "danog/class-finder": "^0.4.8", - "dg/bypass-finals": "^1.5", "ext-curl": "*", "mockery/mockery": "^1.5", "nunomaduro/mock-final-classes": "^1.1", @@ -3219,10 +1995,10 @@ "phpstan/phpdoc-parser": "^1.6", "phpunit/phpunit": "^9.6", "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.19", + "psalm/plugin-phpunit": "^0.18", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^6.0 || ^7.0 || ^8.0" + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -3233,7 +2009,6 @@ "psalm-language-server", "psalm-plugin", "psalm-refactor", - "psalm-review", "psalter" ], "type": "project", @@ -3243,9 +2018,7 @@ "dev-2.x": "2.x-dev", "dev-3.x": "3.x-dev", "dev-4.x": "4.x-dev", - "dev-5.x": "5.x-dev", - "dev-6.x": "6.x-dev", - "dev-master": "7.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -3260,10 +2033,6 @@ "authors": [ { "name": "Matthew Brown" - }, - { - "name": "Daniil Gentili", - "email": "daniil@daniil.it" } ], "description": "A static analysis tool for finding errors in PHP applications", @@ -3278,27 +2047,27 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2026-03-19T10:56:09+00:00" + "time": "2024-09-08T18:53:08+00:00" }, { "name": "webmozart/assert", - "version": "2.3.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4", - "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", "ext-date": "*", "ext-filter": "*", - "php": "^8.2" + "php": "^7.2 || ^8.0" }, "suggest": { "ext-intl": "", @@ -3308,7 +2077,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-feature/2-0": "2.0-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -3324,10 +2093,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -3338,9 +2103,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.3.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2026-04-11T10:33:05+00:00" + "time": "2025-10-29T15:56:20+00:00" } ], "aliases": [], @@ -3351,7 +2116,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2.27" + "php": "8.1" }, "plugin-api-version": "2.9.0" } From 33329dc227fa2288c8fbbf110cd915ff48debcaf Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:18:13 -0300 Subject: [PATCH 4/6] fix: force jsignpdf and remove phpnative engine Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- appinfo/info.xml | 2 +- lib/Handler/SignEngine/PhpNativeHandler.php | 406 ---------------- lib/Handler/SignEngine/Pkcs12Handler.php | 9 +- .../Version12000Date20260423141000.php | 34 ++ lib/ResponseDefinitions.php | 2 +- lib/Service/Install/ConfigureCheckService.php | 5 - lib/Service/Install/InstallService.php | 9 - lib/Settings/Admin.php | 4 - src/tests/views/Settings/Settings.spec.ts | 4 +- .../views/Settings/SignatureEngine.spec.ts | 79 --- src/types/index.ts | 3 +- src/types/openapi/openapi-full.ts | 2 +- src/views/Settings/Settings.vue | 2 - src/views/Settings/SignatureEngine.vue | 94 ---- .../SignEngine/PhpNativeHandlerTest.php | 454 ------------------ .../php/Unit/Service/SignFileServiceTest.php | 4 +- 16 files changed, 42 insertions(+), 1071 deletions(-) delete mode 100644 lib/Handler/SignEngine/PhpNativeHandler.php create mode 100644 lib/Migration/Version12000Date20260423141000.php delete mode 100644 src/tests/views/Settings/SignatureEngine.spec.ts delete mode 100644 src/views/Settings/SignatureEngine.vue delete mode 100644 tests/php/Unit/Handler/SignEngine/PhpNativeHandlerTest.php diff --git a/appinfo/info.xml b/appinfo/info.xml index 730d3a8992..2410c6ec27 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -25,7 +25,7 @@ Developed with ❤️ by [LibreCode](https://librecode.coop). Help us transform * [Donate with GitHub Sponsor: ![Donate using GitHub Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/libresign) ]]> - 12.4.2 + 12.4.3 agpl LibreCode diff --git a/lib/Handler/SignEngine/PhpNativeHandler.php b/lib/Handler/SignEngine/PhpNativeHandler.php deleted file mode 100644 index aee4ad8cde..0000000000 --- a/lib/Handler/SignEngine/PhpNativeHandler.php +++ /dev/null @@ -1,406 +0,0 @@ -beforeSign(); - $signedContent = $this->getSignedContent(); - $this->getInputFile()->putContent($signedContent); - return $this->getInputFile(); - } - - #[\Override] - public function getSignedContent(): string { - $pdfContent = $this->getInputFile()->getContent(); - $certificate = CertificateCredentialsDto::fromContent( - $this->getCertificate(), - $this->getPassword(), - ); - $service = new PdfSigningService( - new OpenSslCertificateValidator(), - new NativePdfSigningEngine(), - ); - - $visibleElements = $this->getVisibleElements(); - $metadata = $this->buildMetadata(); - $timestamp = $this->buildTimestampOptions(); - $certificationLevel = $this->resolveCertificationLevel(empty($visibleElements)); - - if (empty($visibleElements)) { - return $service->sign(SignPdfRequestDto::fromRequired( - new PdfContentDto($pdfContent), - $certificate, - new SigningOptionsDto( - metadata: $metadata, - timestamp: $timestamp, - certificationLevel: $certificationLevel, - useDefaultAppearance: false, - ), - )); - } - - $applyOnce = $certificationLevel; - // signer-php expects screen/top-left coords (Y=0 at top, grows downward). - // LibreSign stores PDF bottom-left coords (Y=0 at bottom, lly < ury). - // Conversion: screen_y = pageHeight - pdf_y - // Page dimensions come from FileEntity::getMetadata()['d'] (0-based array of ['w','h']). - $pageDimensions = $this->getSignatureParams()['PageDimensions'] ?? []; - foreach ($visibleElements as $element) { - $fileElement = $element->getFileElement(); - $llx = (float)($fileElement->getLlx() ?? 0); - $lly = (float)($fileElement->getLly() ?? 0); - $urx = (float)($fileElement->getUrx() ?? 0); - $ury = (float)($fileElement->getUry() ?? 0); - $width = (int)($urx - $llx); - $height = (int)($ury - $lly); - // signer-php uses 0-based page index; LibreSign stores 1-based - $pageIndex = max(0, $fileElement->getPage() - 1); - $pageHeight = $this->resolvePageHeight($pageDimensions, $pageIndex); - $appearance = $this->buildAppearanceForElement( - llx: $llx, - lly: $lly, - urx: $urx, - ury: $ury, - pageHeight: $pageHeight, - pageIndex: $pageIndex, - width: $width, - height: $height, - signatureImagePath: $element->getTempFile(), - ); - $pdfContent = $service->sign(SignPdfRequestDto::fromRequired( - new PdfContentDto($pdfContent), - $certificate, - new SigningOptionsDto( - metadata: $metadata, - appearance: $appearance, - timestamp: $timestamp, - // DocMDP only applies once (the first signature certifies) - certificationLevel: $applyOnce, - ), - )); - $applyOnce = null; - } - - return $pdfContent; - } - - private function buildAppearanceForElement( - float $llx, - float $lly, - float $urx, - float $ury, - float $pageHeight, - int $pageIndex, - int $width, - int $height, - string $signatureImagePath = '', - ): SignatureAppearanceDto { - $renderMode = $this->signatureTextService->getRenderMode(); - - // n0 layer: background stamp is always placed full-bbox when enabled. - $imagePath = $this->signatureBackgroundService->isEnabled() - ? $this->signatureBackgroundService->getImagePath() - : null; - - // GRAPHIC_AND_DESCRIPTION: user's drawn image goes into the n2 xObject layer - // on the left half of the bbox so it does not distort or cover the description text. - // Background (if enabled) still occupies the full n0 layer behind everything. - // GRAPHIC_ONLY: user's drawn image occupies the full bbox in n2; no description text. - $userImgPath = null; - $userImgRect = null; - if ($renderMode === SignerElementsService::RENDER_MODE_GRAPHIC_AND_DESCRIPTION) { - if ($signatureImagePath !== '' && is_file($signatureImagePath)) { - $userImgPath = $signatureImagePath; - $userImgRect = [0.0, 0.0, (float)$width / 2.0, (float)$height]; - } - } elseif ($renderMode === SignerElementsService::RENDER_MODE_GRAPHIC_ONLY) { - if ($signatureImagePath !== '' && is_file($signatureImagePath)) { - $userImgPath = $signatureImagePath; - $userImgRect = null; // full bbox - } - } - - return new SignatureAppearanceDto( - backgroundImagePath: $imagePath, - rect: [ - $llx, - $pageHeight - $ury, // screen top = pageH - PDF ury - $urx, - $pageHeight - $lly, // screen bottom = pageH - PDF lly - ], - page: $pageIndex, - xObject: $this->buildXObject($width, $height, $renderMode), - signatureImagePath: $userImgPath, - signatureImageFrame: $userImgRect, - ); - } - - #[\Override] - public function readCertificate(): array { - $result = $this->certificateEngineFactory - ->getEngine() - ->readCertificate( - $this->getCertificate(), - $this->getPassword() - ); - - if (!is_array($result)) { - throw new \RuntimeException('Failed to read certificate data'); - } - - return $result; - } - - private function buildMetadata(): SignatureMetadataDto { - $params = $this->getSignatureParams(); - $name = !empty($params['SignerCommonName']) ? (string)$params['SignerCommonName'] : null; - $email = !empty($params['SignerEmail']) ? (string)$params['SignerEmail'] : null; - - return new SignatureMetadataDto( - actor: ($name !== null || $email !== null) - ? new SignatureActorDto(name: $name, contactInfo: $email) - : null, - ); - } - - private function resolvePageHeight(array $pageDimensions, int $pageIndex): float { - $pageHeight = $pageDimensions[$pageIndex]['h'] ?? null; - if (!is_numeric($pageHeight) || (float)$pageHeight <= 0.0) { - throw new \RuntimeException(sprintf('Missing or invalid PageDimensions for page index %d.', $pageIndex)); - } - return (float)$pageHeight; - } - - private function buildTimestampOptions(): ?TimestampOptionsDto { - $tsaUrl = $this->appConfig->getValueString(Application::APP_ID, 'tsa_url', ''); - if (empty($tsaUrl)) { - return null; - } - - $username = null; - $password = null; - $authType = $this->appConfig->getValueString(Application::APP_ID, 'tsa_auth_type', 'none'); - if ($authType === 'basic') { - $username = $this->appConfig->getValueString(Application::APP_ID, 'tsa_username', '') ?: null; - $password = $this->appConfig->getValueString(Application::APP_ID, 'tsa_password', '') ?: null; - } - - return new TimestampOptionsDto( - tsaUrl: $tsaUrl, - username: $username, - password: $password, - ); - } - - private function resolveCertificationLevel(bool $noVisibleElements): ?CertificationLevel { - if (!$this->docMdpConfigService->isEnabled()) { - return null; - } - - // DocMDP values mirror CertificationLevel: 1=NoChanges, 2=FormFilling, 3=FormFillAndAnnotations - $level = $this->docMdpConfigService->getLevel()->value; - // Only certify on invisible signatures or on the first visible element - if ($noVisibleElements || !$this->hasExistingSignatures($this->getInputFile()->getContent())) { - return CertificationLevel::fromInt($level); - } - - return null; - } - - private function hasExistingSignatures(string $pdfContent): bool { - return (bool)preg_match('/\/ByteRange\s*\[|\/Type\s*\/Sig\b|\/DocMDP\b|\/Perms\b/', $pdfContent); - } - - /** - * Builds the xObject (n2 layer) for all render modes using only PDF text operators. - * - * DESCRIPTION_ONLY → description text, full width. - * GRAPHIC_AND_DESCRIPTION → description text, right half only - * (user image is in imagePath/n0, handled natively by signer-php). - * SIGNAME_AND_DESCRIPTION → signer name as large text on the left half - * + description text on the right half. - * No image generation: pure PDF text operators. - */ - private function buildXObject(int $width, int $height, string $renderMode): SignatureAppearanceXObjectDto { - // GRAPHIC_ONLY: only the background/signature image is shown; no text in n2. - if ($renderMode === SignerElementsService::RENDER_MODE_GRAPHIC_ONLY) { - return new SignatureAppearanceXObjectDto(stream: '', resources: []); - } - - $params = $this->getSignatureParams(); - $serverTimezone = new \DateTimeZone(date_default_timezone_get()); - $now = new \DateTime('now', $serverTimezone); - $params['ServerSignatureDate'] = $now->format('Y.m.d H:i:s \U\T\C'); - - $textData = $this->signatureTextService->parse(context: $params); - $parsed = trim((string)($textData['parsed'] ?? '')); - - $descFontSize = (float)($textData['templateFontSize'] ?? $this->signatureTextService->getTemplateFontSize()); - $descLineHeight = $descFontSize * 1.0; - $leftPadding = max(2.0, $descFontSize * 0.15); - - $isDescriptionOnly = $renderMode === SignerElementsService::RENDER_MODE_DESCRIPTION_ONLY; - $textStartX = $isDescriptionOnly ? $leftPadding : ((float)$width / 2.0) + $leftPadding; - $availableWidth = $isDescriptionOnly ? (float)$width : (float)$width / 2.0; - - $stream = ''; - - // Left half: signer name as large text operators (SIGNAME_AND_DESCRIPTION only). - // No image generation — the name is drawn directly with PDF text commands. - if ($renderMode === SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION) { - $commonName = !empty($params['SignerCommonName']) - ? (string)$params['SignerCommonName'] - : ($this->readCertificate()['subject']['CN'] ?? ''); - if ($commonName !== '') { - $nameFontSize = $this->signatureTextService->getSignatureFontSize(); - $leftHalfW = (float)$width / 2.0; - $nameLines = $this->wrapTextForPdf($commonName, $leftHalfW - $leftPadding * 2, $nameFontSize); - $nameLineCount = count($nameLines); - $totalNameHeight = $nameLineCount * $nameFontSize * 1.0; - $nameStartY = ((float)$height + $totalNameHeight) / 2.0 - $nameFontSize; - $nameStartY = max(0.0, $nameStartY); - $nameY = $nameStartY; - $estimatedCharWidth = $nameFontSize * 0.52; - foreach ($nameLines as $nameLine) { - $lineWidth = strlen($nameLine) * $estimatedCharWidth; - $nameX = max($leftPadding, ($leftHalfW - $lineWidth) / 2.0); - $escaped = $this->escapePdfText($nameLine); - $stream .= "BT\n"; - $stream .= sprintf("/F1 %.2F Tf\n", $nameFontSize); - $stream .= "0 0 0 rg\n"; - $stream .= sprintf("%.2F %.2F Td\n", $nameX, $nameY); - $stream .= sprintf("(%s) Tj\n", $escaped); - $stream .= "ET\n"; - $nameY -= $nameFontSize * 1.0; - } - } - } - - // Right half (or full width): description text. - $currentY = (float)$height - $descFontSize - 2.0; - foreach (explode(PHP_EOL, $parsed) as $line) { - $wrappedLines = $this->wrapTextForPdf($line, $availableWidth, $descFontSize); - foreach ($wrappedLines as $wrappedLine) { - if ($currentY < 0) { - break 2; - } - $escaped = $this->escapePdfText($wrappedLine); - $stream .= "BT\n"; - $stream .= sprintf("/F1 %.2F Tf\n", $descFontSize); - $stream .= "0 0 0 rg\n"; - $stream .= sprintf("%.2F %.2F Td\n", $textStartX, $currentY); - $stream .= sprintf("(%s) Tj\n", $escaped); - $stream .= "ET\n"; - $currentY -= $descLineHeight; - } - } - - return new SignatureAppearanceXObjectDto( - stream: $stream, - resources: [ - 'Font' => [ - 'F1' => [ - 'Type' => '/Font', - 'Subtype' => '/Type1', - 'BaseFont' => '/Helvetica', - ], - ], - ], - ); - } - - /** - * @return string[] - */ - private function wrapTextForPdf(string $line, float $availableWidth, float $fontSize): array { - $trimmed = trim($line); - if ($trimmed === '') { - return ['']; - } - - $estimatedCharWidth = max(1.0, $fontSize * 0.52); - $maxChars = max(1, (int)floor($availableWidth / $estimatedCharWidth)); - if (strlen($trimmed) <= $maxChars) { - return [$trimmed]; - } - - $result = []; - $current = ''; - foreach (preg_split('/\s+/', $trimmed) ?: [] as $word) { - if ($word === '') { - continue; - } - - $candidate = $current === '' ? $word : $current . ' ' . $word; - if (strlen($candidate) <= $maxChars) { - $current = $candidate; - continue; - } - - if ($current !== '') { - $result[] = $current; - $current = ''; - } - - while (strlen($word) > $maxChars) { - $result[] = substr($word, 0, $maxChars); - $word = substr($word, $maxChars); - } - - $current = $word; - } - - if ($current !== '') { - $result[] = $current; - } - - return $result; - } - - private function escapePdfText(string $value): string { - $value = str_replace('\\', '\\\\', $value); - $value = str_replace('(', '\\(', $value); - $value = str_replace(')', '\\)', $value); - - return $value; - } -} diff --git a/lib/Handler/SignEngine/Pkcs12Handler.php b/lib/Handler/SignEngine/Pkcs12Handler.php index c9335f3682..17dd5b789a 100644 --- a/lib/Handler/SignEngine/Pkcs12Handler.php +++ b/lib/Handler/SignEngine/Pkcs12Handler.php @@ -30,7 +30,6 @@ class Pkcs12Handler extends SignEngineHandler { protected string $certificate = ''; private array $signaturesFromPoppler = []; private ?JSignPdfHandler $jSignPdfHandler = null; - private ?PhpNativeHandler $phpNativeHandler = null; private string $rootCertificatePem = ''; private bool $isLibreSignFile = false; @@ -496,12 +495,8 @@ private function der2pem($derData) { } private function getHandler(): SignEngineHandler { - $sign_engine = $this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf'); - $property = lcfirst($sign_engine) . 'Handler'; - if (!property_exists($this, $property)) { - throw new LibresignException($this->l10n->t('Invalid Sign engine.'), 400); - } - $classHandler = 'OCA\\Libresign\\Handler\\SignEngine\\' . ucfirst($property); + $property = 'jSignPdfHandler'; + $classHandler = JSignPdfHandler::class; if (!$this->$property instanceof $classHandler) { $this->$property = \OCP\Server::get($classHandler); } diff --git a/lib/Migration/Version12000Date20260423141000.php b/lib/Migration/Version12000Date20260423141000.php new file mode 100644 index 0000000000..c0a6df7c91 --- /dev/null +++ b/lib/Migration/Version12000Date20260423141000.php @@ -0,0 +1,34 @@ +appConfig->deleteKey(Application::APP_ID, 'signature_engine'); + } +} diff --git a/lib/ResponseDefinitions.php b/lib/ResponseDefinitions.php index 096b026be3..6fb58d5129 100644 --- a/lib/ResponseDefinitions.php +++ b/lib/ResponseDefinitions.php @@ -307,7 +307,7 @@ * } * @psalm-type LibresignAdminSigningMode = 'sync'|'async' * @psalm-type LibresignAdminWorkerType = 'local'|'external' - * @psalm-type LibresignAdminSignatureEngine = 'JSignPdf'|'PhpNative' + * @psalm-type LibresignAdminSignatureEngine = 'JSignPdf' * @psalm-type LibresignDocMdpLevelOption = array{ * value: int, * label: string, diff --git a/lib/Service/Install/ConfigureCheckService.php b/lib/Service/Install/ConfigureCheckService.php index d4bf39a243..14284830b9 100644 --- a/lib/Service/Install/ConfigureCheckService.php +++ b/lib/Service/Install/ConfigureCheckService.php @@ -165,11 +165,6 @@ public function checkJSignPdf(): array { return $this->result['jsignpdf']; } - $signatureEngine = $this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf'); - if ($signatureEngine !== 'JSignPdf') { - return []; - } - $jsignpdJarPath = $this->appConfig->getValueString(Application::APP_ID, 'jsignpdf_jar_path'); if ($jsignpdJarPath) { $resultOfVerify = $this->verify('jsignpdf'); diff --git a/lib/Service/Install/InstallService.php b/lib/Service/Install/InstallService.php index 2bf04671b6..3f42b19e2b 100644 --- a/lib/Service/Install/InstallService.php +++ b/lib/Service/Install/InstallService.php @@ -359,10 +359,6 @@ private function writeAppSignature(): void { } public function installJava(?bool $async = false): void { - $signatureEngine = $this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf'); - if ($signatureEngine !== 'JSignPdf') { - return; - } $this->setResource('java'); if ($async) { $this->runAsync(); @@ -461,11 +457,6 @@ public function uninstallJava(): void { } public function installJSignPdf(?bool $async = false): void { - $signatureEngine = $this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf'); - if ($signatureEngine !== 'JSignPdf') { - return; - } - if (!extension_loaded('zip')) { throw new RuntimeException('Zip extension is not available'); } diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 411b28d16a..bc537ca9d0 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -118,10 +118,6 @@ public function getPriority(): int { /** @return LibresignAdminSignatureEngine */ private function getSignatureEngineInitialState(): string { - $engine = $this->appConfig->getValueString(Application::APP_ID, 'signature_engine', 'JSignPdf'); - if ($engine === 'PhpNative') { - return $engine; - } return 'JSignPdf'; } diff --git a/src/tests/views/Settings/Settings.spec.ts b/src/tests/views/Settings/Settings.spec.ts index 54e19825f1..62329e62a0 100644 --- a/src/tests/views/Settings/Settings.spec.ts +++ b/src/tests/views/Settings/Settings.spec.ts @@ -15,7 +15,6 @@ describe('Settings.vue', () => { stubs: { SupportProject: { template: '
' }, CertificateEngine: true, - SignatureEngine: true, DownloadBinaries: true, ConfigureCheck: true, RootCertificateCfssl: true, @@ -43,7 +42,7 @@ describe('Settings.vue', () => { }) expect(wrapper.find('.support-project-stub').exists()).toBe(true) - expect(wrapper.findAllComponents({ name: 'SignatureEngine' })).toHaveLength(1) + expect(wrapper.findAllComponents({ name: 'SignatureEngine' })).toHaveLength(0) expect(wrapper.findAllComponents({ name: 'Reminders' })).toHaveLength(1) }) @@ -53,7 +52,6 @@ describe('Settings.vue', () => { stubs: { SupportProject: true, CertificateEngine: true, - SignatureEngine: true, DownloadBinaries: true, ConfigureCheck: true, RootCertificateCfssl: true, diff --git a/src/tests/views/Settings/SignatureEngine.spec.ts b/src/tests/views/Settings/SignatureEngine.spec.ts deleted file mode 100644 index c5542df7e4..0000000000 --- a/src/tests/views/Settings/SignatureEngine.spec.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 LibreSign contributors - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -import { beforeEach, describe, expect, it, vi } from 'vitest' -import { mount } from '@vue/test-utils' - -import SignatureEngine from '../../../views/Settings/SignatureEngine.vue' - -const { loadStateMock, emitMock } = vi.hoisted(() => ({ - loadStateMock: vi.fn(), - emitMock: vi.fn(), -})) - -vi.mock('@nextcloud/initial-state', () => ({ - loadState: (...args: unknown[]) => loadStateMock(...args), -})) - -vi.mock('@nextcloud/event-bus', () => ({ - emit: (...args: unknown[]) => emitMock(...args), -})) - -vi.mock('@nextcloud/l10n', () => globalThis.mockNextcloudL10n()) - -const OCP = { - AppConfig: { - setValue: vi.fn(), - }, -} - -;(globalThis as typeof globalThis & { OCP: typeof OCP }).OCP = OCP - -describe('SignatureEngine.vue', () => { - beforeEach(() => { - vi.clearAllMocks() - loadStateMock.mockImplementation((_app: string, _key: string, fallback: unknown) => fallback) - }) - - function createWrapper() { - return mount(SignatureEngine, { - global: { - stubs: { - NcSettingsSection: { template: '
' }, - NcSelect: true, - }, - }, - }) - } - - it('maps the initial state to the selected option', () => { - loadStateMock.mockImplementation((_app: string, key: string, fallback: unknown) => { - if (key === 'signature_engine') return 'PhpNative' - return fallback - }) - - const wrapper = createWrapper() - - expect(wrapper.vm.selectedOption).toEqual({ id: 'PhpNative', label: 'Native' }) - }) - - it('updates the selected engine through the computed setter', () => { - const wrapper = createWrapper() - - wrapper.vm.selectedOption = { id: 'PhpNative', label: 'Native' } - - expect(wrapper.vm.selectedEngineId).toBe('PhpNative') - }) - - it('persists the engine and emits the change event on success', async () => { - OCP.AppConfig.setValue.mockImplementation((_app: string, _key: string, _value: string, callbacks: { success: () => void }) => callbacks.success()) - const wrapper = createWrapper() - - await wrapper.vm.saveEngine({ id: 'PhpNative', label: 'Native' }) - - expect(OCP.AppConfig.setValue).toHaveBeenCalledWith('libresign', 'signature_engine', 'PhpNative', expect.any(Object)) - expect(emitMock).toHaveBeenCalledWith('libresign:signature-engine:changed', 'PhpNative') - }) -}) diff --git a/src/types/index.ts b/src/types/index.ts index a12fa7f3d6..3e4c5e42d4 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -92,7 +92,6 @@ export type FileStatusText = FileListEntry['statusText'] export type SelectedFileView = Pick export type SigningModeState = 'sync' | 'async' export type WorkerTypeState = 'local' | 'external' -export type SignatureEngineId = 'JSignPdf' | 'PhpNative' export type CertificateEngineId = 'openssl' | 'cfssl' | 'none' export type AdminDocMdpLevelOption = { @@ -107,7 +106,7 @@ export type AdminDocMdpConfigState = { } export type AdminInitialState = { docmdp_config: AdminDocMdpConfigState - signature_engine: SignatureEngineId + signature_engine: 'JSignPdf' signing_mode: SigningModeState worker_type: WorkerTypeState parallel_workers: string diff --git a/src/types/openapi/openapi-full.ts b/src/types/openapi/openapi-full.ts index cb21c1a4b1..d9bc905961 100644 --- a/src/types/openapi/openapi-full.ts +++ b/src/types/openapi/openapi-full.ts @@ -1573,7 +1573,7 @@ export type components = { data: components["schemas"]["ActiveSigningItem"][]; }; /** @enum {string} */ - AdminSignatureEngine: "JSignPdf" | "PhpNative"; + AdminSignatureEngine: "JSignPdf"; /** @enum {string} */ AdminSigningMode: "sync" | "async"; /** @enum {string} */ diff --git a/src/views/Settings/Settings.vue b/src/views/Settings/Settings.vue index 6bab780442..39f888c422 100644 --- a/src/views/Settings/Settings.vue +++ b/src/views/Settings/Settings.vue @@ -7,7 +7,6 @@
- @@ -51,7 +50,6 @@ import LegalInformation from './LegalInformation.vue' import Reminders from './Reminders.vue' import RootCertificateCfssl from './RootCertificateCfssl.vue' import RootCertificateOpenSsl from './RootCertificateOpenSsl.vue' -import SignatureEngine from './SignatureEngine.vue' import SignatureFlow from './SignatureFlow.vue' import SignatureHashAlgorithm from './SignatureHashAlgorithm.vue' import SignatureStamp from './SignatureStamp.vue' diff --git a/src/views/Settings/SignatureEngine.vue b/src/views/Settings/SignatureEngine.vue deleted file mode 100644 index 4f7ada2e47..0000000000 --- a/src/views/Settings/SignatureEngine.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - diff --git a/tests/php/Unit/Handler/SignEngine/PhpNativeHandlerTest.php b/tests/php/Unit/Handler/SignEngine/PhpNativeHandlerTest.php deleted file mode 100644 index 8c82431770..0000000000 --- a/tests/php/Unit/Handler/SignEngine/PhpNativeHandlerTest.php +++ /dev/null @@ -1,454 +0,0 @@ -appConfig = $this->getMockAppConfigWithReset(); - $this->docMdpConfigService = $this->createMock(DocMdpConfigService::class); - $this->signatureTextService = $this->createMock(SignatureTextService::class); - $this->signatureBackgroundService = $this->createMock(SignatureBackgroundService::class); - $this->certificateEngineFactory = $this->createMock(CertificateEngineFactory::class); - } - - public function testBuildAppearanceSkipsBackgroundWhenDisabled(): void { - $handler = $this->getHandler(); - - $this->signatureBackgroundService - ->expects($this->once()) - ->method('isEnabled') - ->willReturn(false); - $this->signatureBackgroundService - ->expects($this->never()) - ->method('getImagePath'); - - $appearance = $this->callPrivateMethod( - $handler, - 'buildAppearanceForElement', - 10.0, - 20.0, - 110.0, - 70.0, - 800.0, - 0, - 100, - 50, - ); - - $this->assertInstanceOf(SignatureAppearanceDto::class, $appearance); - $this->assertNull($appearance->backgroundImagePath); - } - - public function testBuildAppearanceConvertsPdfCoordinatesToScreenCoordinates(): void { - $handler = $this->getHandler(); - - $this->signatureBackgroundService->method('isEnabled')->willReturn(false); - - $appearance = $this->callPrivateMethod( - $handler, - 'buildAppearanceForElement', - 10.0, - 20.0, - 110.0, - 70.0, - 800.0, - 1, - 100, - 50, - ); - - $this->assertSame([10.0, 730.0, 110.0, 780.0], $appearance->rect); - $this->assertSame(1, $appearance->page); - $this->assertNotNull($appearance->xObject); - $this->assertStringContainsString('Signed by', $appearance->xObject->stream); - } - - public function testResolvePageHeightThrowsWhenDimensionsAreMissing(): void { - $handler = $this->getHandler(); - - $this->expectException(\RuntimeException::class); - $this->expectExceptionMessage('Missing or invalid PageDimensions for page index 0.'); - - $this->callPrivateMethod($handler, 'resolvePageHeight', [], 0); - } - - #[DataProvider('providerWrapTextForPdf')] - public function testWrapTextForPdf(string $line, float $availableWidth, float $fontSize, array $expected): void { - $handler = $this->getHandler(); - $actual = $this->callPrivateMethod($handler, 'wrapTextForPdf', $line, $availableWidth, $fontSize); - $this->assertSame($expected, $actual); - } - - public static function providerWrapTextForPdf(): array { - return [ - 'empty string returns single empty element' => [ - '', 100.0, 10.0, [''], - ], - 'short text that fits in one line' => [ - 'hello', 100.0, 10.0, ['hello'], - ], - 'multiple words wrapped at word boundaries' => [ - // fontSize=10 → estimatedCharWidth=5.2; availableWidth=20 → maxChars=3 - // 'ab cd ef' → ['ab', 'cd', 'ef'] - 'ab cd ef', 20.0, 10.0, ['ab', 'cd', 'ef'], - ], - 'single long word is hard-split at maxChars' => [ - // maxChars=floor(15/5.2)=2: 'abcdefgh' → ['ab','cd','ef','gh'] - 'abcdefgh', 15.0, 10.0, ['ab', 'cd', 'ef', 'gh'], - ], - ]; - } - - #[DataProvider('providerEscapePdfText')] - public function testEscapePdfText(string $input, string $expected): void { - $handler = $this->getHandler(); - $actual = $this->callPrivateMethod($handler, 'escapePdfText', $input); - $this->assertSame($expected, $actual); - } - - public static function providerEscapePdfText(): array { - return [ - 'plain text is unchanged' => ['hello world', 'hello world'], - 'backslash is doubled' => ['back\\slash', 'back\\\\slash'], - 'opening parenthesis is escaped' => ['open(paren', 'open\\(paren'], - 'closing parenthesis is escaped' => ['close)paren', 'close\\)paren'], - 'multiple special chars in one string' => ['a\\b(c)d', 'a\\\\b\\(c\\)d'], - ]; - } - - #[DataProvider('providerHasExistingSignatures')] - public function testHasExistingSignatures(string $pdfContent, bool $expected): void { - $handler = $this->getHandler(); - $actual = $this->callPrivateMethod($handler, 'hasExistingSignatures', $pdfContent); - $this->assertSame($expected, $actual); - } - - public static function providerHasExistingSignatures(): array { - return [ - 'ByteRange marker signals existing signature' => ['/ByteRange [0 0 0 0]', true], - '/Type /Sig signals existing signature' => ['/Type /Sig ', true], - '/DocMDP signals existing signature' => ['/DocMDP ', true], - '/Perms signals existing signature' => ['/Perms ', true], - 'plain PDF content has no signature' => ['%PDF-1.4 startxref 0 %%EOF', false], - ]; - } - - #[DataProvider('providerBuildTimestampOptions')] - public function testBuildTimestampOptions( - string $tsaUrl, - string $authType, - string $username, - string $password, - bool $expectNull, - ?string $expectedUrl, - ?string $expectedUsername, - ?string $expectedPassword, - ): void { - $this->appConfig->setValueString('libresign', 'tsa_url', $tsaUrl); - $this->appConfig->setValueString('libresign', 'tsa_auth_type', $authType); - $this->appConfig->setValueString('libresign', 'tsa_username', $username); - $this->appConfig->setValueString('libresign', 'tsa_password', $password); - - $handler = $this->getHandler(); - $result = $this->callPrivateMethod($handler, 'buildTimestampOptions'); - - if ($expectNull) { - $this->assertNull($result); - return; - } - - $this->assertInstanceOf(TimestampOptionsDto::class, $result); - $this->assertSame($expectedUrl, $result->tsaUrl); - $this->assertSame($expectedUsername, $result->username); - $this->assertSame($expectedPassword, $result->password); - } - - public static function providerBuildTimestampOptions(): array { - return [ - 'no TSA URL returns null' => [ - '', 'none', '', '', true, null, null, null, - ], - 'TSA URL with no auth returns DTO without credentials' => [ - 'http://tsa.example.com', 'none', 'ignored', 'ignored', - false, 'http://tsa.example.com', null, null, - ], - 'TSA URL with basic auth returns DTO with credentials' => [ - 'http://tsa.example.com', 'basic', 'alice', 's3cr3t', - false, 'http://tsa.example.com', 'alice', 's3cr3t', - ], - 'basic auth with empty username and password returns null credentials in DTO' => [ - 'http://tsa.example.com', 'basic', '', '', - false, 'http://tsa.example.com', null, null, - ], - ]; - } - - #[DataProvider('providerResolveCertificationLevel')] - public function testResolveCertificationLevel( - bool $docMdpEnabled, - bool $noVisibleElements, - string $pdfContent, - bool $expectNull, - ): void { - $this->docMdpConfigService->method('isEnabled')->willReturn($docMdpEnabled); - if ($docMdpEnabled) { - $this->docMdpConfigService->method('getLevel') - ->willReturn(DocMdpLevel::CERTIFIED_FORM_FILLING); - } - - $handler = $this->getHandler(); - - if (!$noVisibleElements) { - $inputFile = $this->createMock(File::class); - $inputFile->method('getContent')->willReturn($pdfContent); - $handler->setInputFile($inputFile); - } - - $result = $this->callPrivateMethod($handler, 'resolveCertificationLevel', $noVisibleElements); - - if ($expectNull) { - $this->assertNull($result); - } else { - $this->assertInstanceOf(CertificationLevel::class, $result); - } - } - - public static function providerResolveCertificationLevel(): array { - return [ - 'DocMDP disabled always returns null' => [ - false, true, '', true, - ], - 'DocMDP enabled with no visible elements certifies' => [ - true, true, '', false, - ], - 'DocMDP enabled, visible elements, clean PDF certifies first signature' => [ - true, false, '%PDF-1.4 startxref 0 %%EOF', false, - ], - 'DocMDP enabled, visible elements, PDF already signed skips certification' => [ - true, false, '/ByteRange [0 0 0 0]', true, - ], - ]; - } - - public function testBuildAppearanceForElementSetsSignatureImageInGraphicAndDescriptionMode(): void { - $imagePath = realpath(__DIR__ . '/../../../../../img/app-dark.png'); - $this->assertNotFalse($imagePath, 'Test image must exist'); - - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_GRAPHIC_AND_DESCRIPTION); - $this->signatureBackgroundService->method('isEnabled')->willReturn(false); - - $appearance = $this->callPrivateMethod( - $handler, - 'buildAppearanceForElement', - 10.0, 20.0, 110.0, 70.0, 800.0, 0, 100, 50, - $imagePath, - ); - - $this->assertInstanceOf(SignatureAppearanceDto::class, $appearance); - $this->assertSame($imagePath, $appearance->signatureImagePath); - // Frame positions the image on the left half: [0, 0, width/2, height] - $this->assertSame([0.0, 0.0, 50.0, 50.0], $appearance->signatureImageFrame); - } - - public function testBuildAppearanceForElementDoesNotSetSignatureImageWhenNoFile(): void { - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_GRAPHIC_AND_DESCRIPTION); - $this->signatureBackgroundService->method('isEnabled')->willReturn(false); - - $appearance = $this->callPrivateMethod( - $handler, - 'buildAppearanceForElement', - 10.0, 20.0, 110.0, 70.0, 800.0, 0, 100, 50, - '', // empty path - ); - - $this->assertNull($appearance->signatureImagePath); - $this->assertNull($appearance->signatureImageFrame); - } - - public function testBuildXObjectDescriptionOnlyPositionsTextAtLeftPadding(): void { - // leftPadding = max(2.0, 10.0 * 0.15) = 2.0; currentY = 50 - 10 - 2 = 38.0 - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_DESCRIPTION_ONLY); - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 100, 50, SignerElementsService::RENDER_MODE_DESCRIPTION_ONLY, - ); - - // Description text must begin at X = leftPadding = 2.00 (full width, not offset to right half) - $this->assertStringContainsString('2.00 38.00 Td', $xObject->stream); - $this->assertStringNotContainsString('52.00 ', $xObject->stream); - } - - public function testBuildXObjectGraphicAndDescriptionPositionsTextAtRightHalf(): void { - // textStartX = width/2 + leftPadding = 50 + 2 = 52.0; currentY = 50 - 10 - 2 = 38.0 - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_GRAPHIC_AND_DESCRIPTION); - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 100, 50, SignerElementsService::RENDER_MODE_GRAPHIC_AND_DESCRIPTION, - ); - - // Text must start at the right half (X = 52.00), not at leftPadding alone - $this->assertStringContainsString('52.00 38.00 Td', $xObject->stream); - // Ensure text is NOT starting at leftPadding only (would be \n2.00 ... in DESCRIPTION_ONLY) - $this->assertStringNotContainsString("\n2.00 38.00 Td", $xObject->stream); - } - - public function testBuildXObjectSignameAndDescriptionIncludesNameAndDescriptionBlocks(): void { - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION); - $handler->setSignatureParams(['SignerCommonName' => 'Test User']); - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 200, 80, SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION, - ); - - // Name block uses the larger signature font (20.0) - $this->assertStringContainsString('/F1 20.00 Tf', $xObject->stream); - $this->assertStringContainsString('(Test User) Tj', $xObject->stream); - // Description block uses the description font (10.0) - $this->assertStringContainsString('/F1 10.00 Tf', $xObject->stream); - // Description text positioned on the right half (X = 200/2 + 2 = 102.0) - $this->assertStringContainsString('102.00 ', $xObject->stream); - } - - /** - * Regression: GRAPHIC_ONLY mode must not render any text in the n2 xObject layer. - * Before the fix, the method fell through to the description block and wrote text - * into the stamp. - */ - public function testBuildXObjectGraphicOnlyReturnsEmptyStream(): void { - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_GRAPHIC_ONLY); - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 100, 50, SignerElementsService::RENDER_MODE_GRAPHIC_ONLY, - ); - - $this->assertSame('', $xObject->stream); - $this->assertSame([], $xObject->resources); - } - - /** - * Regression: GRAPHIC_ONLY mode must assign the user's drawn image to the full bbox - * (signatureImageFrame = null). Before the fix only GRAPHIC_AND_DESCRIPTION set - * signatureImagePath, leaving GRAPHIC_ONLY with no image (blank stamp). - */ - public function testBuildAppearanceForElementSetsSignatureImageInGraphicOnlyMode(): void { - $imagePath = realpath(__DIR__ . '/../../../../../img/app-dark.png'); - $this->assertNotFalse($imagePath, 'Test image must exist'); - - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_GRAPHIC_ONLY); - $this->signatureBackgroundService->method('isEnabled')->willReturn(false); - - $appearance = $this->callPrivateMethod( - $handler, - 'buildAppearanceForElement', - 10.0, 20.0, 110.0, 70.0, 800.0, 0, 100, 50, - $imagePath, - ); - - $this->assertInstanceOf(SignatureAppearanceDto::class, $appearance); - // Image must fill the entire stamp bbox (no split) - $this->assertSame($imagePath, $appearance->signatureImagePath); - $this->assertNull($appearance->signatureImageFrame); - } - - /** - * Regression: in SIGNAME_AND_DESCRIPTION the signer name must be horizontally - * centred within the left half of the stamp, not pinned to leftPadding (left edge). - * - * Layout math for width=200, height=80, fontSize=20, name="Al": - * leftHalfW = 100.0 - * lineWidth = strlen("Al") * (20 * 0.52) = 2 * 10.4 = 20.8 - * nameX = max(2.0, (100 - 20.8) / 2) = 39.6 → "39.60" - * totalNameHeight = 1 * 20 * 1.0 = 20 (lineHeight factor = 1.0) - * nameStartY = (80 + 20) / 2 - 20 = 30.0 → "30.00" - * Old (broken) code always used leftPadding=2.0 → "2.00 30.00 Td" - */ - public function testBuildXObjectSignameAndDescriptionCentersNameInLeftHalf(): void { - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION); - $handler->setSignatureParams(['SignerCommonName' => 'Al']); - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 200, 80, SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION, - ); - - // Centred position must appear - $this->assertStringContainsString('39.60 30.00 Td', $xObject->stream); - // Old left-aligned position must NOT appear - $this->assertStringNotContainsString('2.00 30.00 Td', $xObject->stream); - } - - public function testBuildXObjectSignameAndDescriptionWithEmptyNameOmitsNameBlock(): void { - // When SignerCommonName is absent and certificate has no CN, no name block should appear - $engine = $this->createMock(\OCA\Libresign\Handler\CertificateEngine\IEngineHandler::class); - $engine->method('readCertificate')->willReturn(['subject' => ['CN' => '']]); - $this->certificateEngineFactory->method('getEngine')->willReturn($engine); - - $handler = $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION); - $handler->setSignatureParams([]); // no SignerCommonName - $handler->setCertificate('cert'); - $handler->setPassword('pass'); - - $xObject = $this->callPrivateMethod( - $handler, 'buildXObject', 200, 80, SignerElementsService::RENDER_MODE_SIGNAME_AND_DESCRIPTION, - ); - - // Large font (20.0) must NOT appear when there is no name to render - $this->assertStringNotContainsString('/F1 20.00 Tf', $xObject->stream); - // The stream may be empty or contain only description lines, but no name Tj - $this->assertStringNotContainsString('() Tj', $xObject->stream); - } - - private function getHandler(): PhpNativeHandler { - return $this->getHandlerWithMode(SignerElementsService::RENDER_MODE_DESCRIPTION_ONLY); - } - - private function getHandlerWithMode(string $renderMode): PhpNativeHandler { - $this->signatureTextService->method('getRenderMode') - ->willReturn($renderMode); - $this->signatureTextService->method('parse') - ->willReturn([ - 'parsed' => 'Signed by', - 'templateFontSize' => 10.0, - ]); - $this->signatureTextService->method('getTemplateFontSize') - ->willReturn(10.0); - $this->signatureTextService->method('getSignatureFontSize') - ->willReturn(20.0); - - return new PhpNativeHandler( - $this->appConfig, - $this->docMdpConfigService, - $this->signatureTextService, - $this->signatureBackgroundService, - $this->certificateEngineFactory, - ); - } - - private function callPrivateMethod(object $instance, string $methodName, mixed ...$args): mixed { - $method = new \ReflectionMethod($instance, $methodName); - $method->setAccessible(true); - return $method->invoke($instance, ...$args); - } -} diff --git a/tests/php/Unit/Service/SignFileServiceTest.php b/tests/php/Unit/Service/SignFileServiceTest.php index f39bfdf37a..3b95d6b712 100644 --- a/tests/php/Unit/Service/SignFileServiceTest.php +++ b/tests/php/Unit/Service/SignFileServiceTest.php @@ -366,9 +366,7 @@ public function testEnqueueParallelSigningJobsStoresCredentialsWhenPasswordless( $this->assertSame(1, $enqueued); } - public function testGetPdfToSignThrowsWhenPhpNativeAndJavaPathIsMissing(): void { - $this->appConfig->setValueString('libresign', 'signature_engine', 'PhpNative'); - + public function testGetPdfToSignThrowsWhenJavaPathIsMissing(): void { $service = $this->getService(['getSignedFile', 'getSigners']); $libreSignFile = new File(); $libreSignFile->setId(10); From bd149d0702c8f7eb86aa63cf73093b0f6e28d0ef Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:29:11 -0300 Subject: [PATCH 5/6] fix: update openapi documentation Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- openapi-full.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openapi-full.json b/openapi-full.json index 9ab790941c..d0d9b6a59f 100644 --- a/openapi-full.json +++ b/openapi-full.json @@ -204,8 +204,7 @@ "AdminSignatureEngine": { "type": "string", "enum": [ - "JSignPdf", - "PhpNative" + "JSignPdf" ] }, "AdminSigningMode": { From 33eaca74ab3a6b250a06aad7873cfdad5b04aa61 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:29:26 -0300 Subject: [PATCH 6/6] chore: drop support to PHP Native engine It's icompatible with Nextcloud 32 Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- lib/Handler/SignEngine/Pkcs12Handler.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/Handler/SignEngine/Pkcs12Handler.php b/lib/Handler/SignEngine/Pkcs12Handler.php index 17dd5b789a..2baac2b2f5 100644 --- a/lib/Handler/SignEngine/Pkcs12Handler.php +++ b/lib/Handler/SignEngine/Pkcs12Handler.php @@ -495,12 +495,10 @@ private function der2pem($derData) { } private function getHandler(): SignEngineHandler { - $property = 'jSignPdfHandler'; - $classHandler = JSignPdfHandler::class; - if (!$this->$property instanceof $classHandler) { - $this->$property = \OCP\Server::get($classHandler); + if (!$this->jSignPdfHandler instanceof JSignPdfHandler) { + $this->jSignPdfHandler = \OCP\Server::get(JSignPdfHandler::class); } - return $this->$property; + return $this->jSignPdfHandler; } #[\Override]