diff --git a/assets/controllers/user_highlight_tooltip_controller.js b/assets/controllers/user_highlight_tooltip_controller.js
index 3ae32e5..a1084cb 100644
--- a/assets/controllers/user_highlight_tooltip_controller.js
+++ b/assets/controllers/user_highlight_tooltip_controller.js
@@ -118,6 +118,43 @@ export default class extends Controller {
}
};
window.addEventListener('resize', this._onResize);
+
+ this._onHashChange = () => {
+ this._scrollToHashHighlight();
+ };
+ window.addEventListener('hashchange', this._onHashChange);
+ this._scrollToHashHighlight();
+ }
+
+ /**
+ * Browsers are inconsistent about scrolling to #highlight- (inline marks, alias spans,
+ * late layout). Mirror native intent after paint.
+ */
+ _scrollToHashHighlight() {
+ const hash = window.location.hash;
+ if (!hash?.startsWith('#highlight-')) {
+ return;
+ }
+ const id = decodeURIComponent(hash.slice(1));
+ if (!/^highlight-[a-f0-9]{64}$/i.test(id)) {
+ return;
+ }
+ const run = () => {
+ const node = document.getElementById(id);
+ if (!(node instanceof HTMLElement)) {
+ return;
+ }
+ const next = node.nextElementSibling;
+ const target =
+ node.classList.contains('user-highlight__fragment-target') &&
+ next?.classList?.contains('user-highlight__marker')
+ ? next
+ : node;
+ target.scrollIntoView({ block: 'start', inline: 'nearest' });
+ };
+ requestAnimationFrame(() => {
+ requestAnimationFrame(run);
+ });
}
disconnect() {
@@ -126,6 +163,9 @@ export default class extends Controller {
this.element.removeEventListener('focusin', this._onFocus);
this.element.removeEventListener('focusout', this._onBlur);
window.removeEventListener('resize', this._onResize);
+ if (this._onHashChange) {
+ window.removeEventListener('hashchange', this._onHashChange);
+ }
this._cancelHide();
this.tip.remove();
}
diff --git a/assets/styles/article.css b/assets/styles/article.css
index 9b1b080..6fbddf4 100644
--- a/assets/styles/article.css
+++ b/assets/styles/article.css
@@ -448,10 +448,25 @@
-webkit-box-decoration-break: clone;
}
-.article-main mark.user-highlight__marker {
+.article-main mark.user-highlight__marker,
+.article-main .user-highlight__fragment-target {
scroll-margin-top: calc(var(--site-fixed-header-offset, 140px) + 0.75rem);
}
+/* Invisible #highlight-{eid} anchors (same group as an older mark) — zero visual footprint. */
+.article-main .user-highlight__fragment-target {
+ display: inline;
+ font-size: 0;
+ line-height: 0;
+ width: 0.01em;
+ height: 0;
+ overflow: hidden;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ vertical-align: baseline;
+}
+
/* When `content` is not a substring of `context` (rare) */
.user-highlight__marker-orphan {
margin: 0.5rem 0 0;
diff --git a/composer.json b/composer.json
index 6944814..8fd181a 100644
--- a/composer.json
+++ b/composer.json
@@ -6,7 +6,7 @@
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
- "php": ">=8.3.13",
+ "php": "^8.3",
"ext-ctype": "*",
"ext-iconv": "*",
"ext-openssl": "*",
@@ -23,31 +23,31 @@
"phpstan/phpdoc-parser": "^2.0",
"runtime/frankenphp-symfony": "^0.2.0",
"swentel/nostr-php": "^1.9.4",
- "symfony/asset": "7.1.*",
- "symfony/asset-mapper": "7.1.*",
- "symfony/console": "7.1.*",
- "symfony/dotenv": "7.1.*",
+ "symfony/asset": "7.3.*",
+ "symfony/asset-mapper": "7.3.*",
+ "symfony/console": "7.3.*",
+ "symfony/dotenv": "7.3.*",
"symfony/flex": "^2",
- "symfony/form": "7.1.*",
- "symfony/framework-bundle": "7.1.*",
- "symfony/html-sanitizer": "7.1.*",
- "symfony/http-foundation": "7.1.*",
- "symfony/intl": "7.1.*",
- "symfony/monolog-bridge": "7.1.*",
+ "symfony/form": "7.3.*",
+ "symfony/framework-bundle": "7.3.*",
+ "symfony/html-sanitizer": "7.3.*",
+ "symfony/http-foundation": "7.3.*",
+ "symfony/intl": "7.3.*",
+ "symfony/monolog-bridge": "7.3.*",
"symfony/monolog-bundle": "^3.11",
- "symfony/process": "7.1.*",
- "symfony/property-access": "7.1.*",
- "symfony/property-info": "7.1.*",
- "symfony/runtime": "7.1.*",
- "symfony/security-bundle": "7.1.*",
- "symfony/serializer": "7.1.*",
+ "symfony/process": "7.3.*",
+ "symfony/property-access": "7.3.*",
+ "symfony/property-info": "7.3.*",
+ "symfony/runtime": "7.3.*",
+ "symfony/security-bundle": "7.3.*",
+ "symfony/serializer": "7.3.*",
"symfony/stimulus-bundle": "^2.22",
- "symfony/translation": "7.1.*",
- "symfony/twig-bundle": "7.1.*",
+ "symfony/translation": "7.3.*",
+ "symfony/twig-bundle": "7.3.*",
"symfony/ux-icons": "^2.22",
"symfony/ux-live-component": "^2.21",
- "symfony/workflow": "7.1.*",
- "symfony/yaml": "7.1.*",
+ "symfony/workflow": "7.3.*",
+ "symfony/yaml": "7.3.*",
"twig/extra-bundle": "^2.12|^3.0",
"twig/markdown-extra": "^3.21",
"twig/string-extra": "^3.21",
@@ -101,7 +101,7 @@
"extra": {
"symfony": {
"allow-contrib": false,
- "require": "7.1.*",
+ "require": "7.3.*",
"docker": true
},
"runtime": {
@@ -110,11 +110,11 @@
},
"require-dev": {
"phpunit/phpunit": "^9.5",
- "symfony/browser-kit": "7.1.*",
- "symfony/css-selector": "7.1.*",
+ "symfony/browser-kit": "7.3.*",
+ "symfony/css-selector": "7.3.*",
"symfony/maker-bundle": "^1.63",
"symfony/phpunit-bridge": "^7.2",
- "symfony/stopwatch": "7.1.*",
- "symfony/web-profiler-bundle": "7.1.*"
+ "symfony/stopwatch": "7.3.*",
+ "symfony/web-profiler-bundle": "7.3.*"
}
}
diff --git a/composer.lock b/composer.lock
index 57d3523..ea248b0 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": "de0f61141e3ff937c3c241e6b3315a88",
+ "content-hash": "37decb6d8e5656d920a95981bfb25c0e",
"packages": [
{
"name": "bitwasp/bech32",
@@ -54,16 +54,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.7",
+ "version": "1.5.11",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "d665d22c417056996c59019579f1967dfe5c1e82"
+ "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82",
- "reference": "d665d22c417056996c59019579f1967dfe5c1e82",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/68ff39175e8e94a4bb1d259407ce51a6a60f09e6",
+ "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6",
"shasum": ""
},
"require": {
@@ -110,7 +110,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.7"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.11"
},
"funding": [
{
@@ -120,26 +120,22 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2025-05-26T15:08:54+00:00"
+ "time": "2026-03-30T09:16:10+00:00"
},
{
"name": "composer/semver",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -191,7 +187,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.3"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -201,13 +197,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "dflydev/dot-access-data",
@@ -286,16 +278,16 @@
},
{
"name": "doctrine/collections",
- "version": "2.3.0",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
- "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d"
+ "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d",
- "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2",
+ "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2",
"shasum": ""
},
"require": {
@@ -304,11 +296,11 @@
"symfony/polyfill-php84": "^1.30"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
+ "doctrine/coding-standard": "^14",
"ext-json": "*",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^10.5"
+ "phpstan/phpstan": "^2.1.30",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4"
},
"type": "library",
"autoload": {
@@ -352,7 +344,7 @@
],
"support": {
"issues": "https://github.com/doctrine/collections/issues",
- "source": "https://github.com/doctrine/collections/tree/2.3.0"
+ "source": "https://github.com/doctrine/collections/tree/2.6.0"
},
"funding": [
{
@@ -368,20 +360,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-22T10:17:19+00:00"
+ "time": "2026-01-15T10:01:58+00:00"
},
{
"name": "doctrine/dbal",
- "version": "4.3.1",
+ "version": "4.4.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "ac336c95ea9e13433d56ca81c308b39db0e1a2a7"
+ "reference": "61e730f1658814821a85f2402c945f3883407dec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/ac336c95ea9e13433d56ca81c308b39db0e1a2a7",
- "reference": "ac336c95ea9e13433d56ca81c308b39db0e1a2a7",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/61e730f1658814821a85f2402c945f3883407dec",
+ "reference": "61e730f1658814821a85f2402c945f3883407dec",
"shasum": ""
},
"require": {
@@ -391,17 +383,17 @@
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "13.0.0",
+ "doctrine/coding-standard": "14.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.2",
- "phpstan/phpstan": "2.1.17",
- "phpstan/phpstan-phpunit": "2.0.6",
+ "phpstan/phpstan": "2.1.30",
+ "phpstan/phpstan-phpunit": "2.0.7",
"phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "11.5.23",
- "slevomat/coding-standard": "8.16.2",
- "squizlabs/php_codesniffer": "3.13.1",
- "symfony/cache": "^6.3.8|^7.0",
- "symfony/console": "^5.4|^6.3|^7.0"
+ "phpunit/phpunit": "11.5.50",
+ "slevomat/coding-standard": "8.27.1",
+ "squizlabs/php_codesniffer": "4.0.1",
+ "symfony/cache": "^6.3.8|^7.0|^8.0",
+ "symfony/console": "^5.4|^6.3|^7.0|^8.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -458,7 +450,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/4.3.1"
+ "source": "https://github.com/doctrine/dbal/tree/4.4.3"
},
"funding": [
{
@@ -474,33 +466,33 @@
"type": "tidelift"
}
],
- "time": "2025-07-22T10:09:51+00:00"
+ "time": "2026-03-20T08:52:12+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "1.1.5",
+ "version": "1.1.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
- "phpunit/phpunit": "<=7.5 || >=13"
+ "phpunit/phpunit": "<=7.5 || >=14"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^13",
- "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "doctrine/coding-standard": "^9 || ^12 || ^14",
+ "phpstan/phpstan": "1.4.10 || 2.1.30",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
@@ -520,26 +512,27 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.6"
},
- "time": "2025-04-07T20:06:18+00:00"
+ "time": "2026-02-07T07:09:04+00:00"
},
{
"name": "doctrine/doctrine-bundle",
- "version": "2.15.0",
+ "version": "2.18.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
- "reference": "d88294521a1bca943240adca65fa19ca8a7288c6"
+ "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/d88294521a1bca943240adca65fa19ca8a7288c6",
- "reference": "d88294521a1bca943240adca65fa19ca8a7288c6",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546",
+ "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546",
"shasum": ""
},
"require": {
"doctrine/dbal": "^3.7.0 || ^4.0",
+ "doctrine/deprecations": "^1.0",
"doctrine/persistence": "^3.1 || ^4",
"doctrine/sql-formatter": "^1.0.1",
"php": "^8.1",
@@ -547,7 +540,6 @@
"symfony/config": "^6.4 || ^7.0",
"symfony/console": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
- "symfony/deprecation-contracts": "^2.1 || ^3",
"symfony/doctrine-bridge": "^6.4.3 || ^7.0.3",
"symfony/framework-bundle": "^6.4 || ^7.0",
"symfony/service-contracts": "^2.5 || ^3"
@@ -562,18 +554,17 @@
"require-dev": {
"doctrine/annotations": "^1 || ^2",
"doctrine/cache": "^1.11 || ^2.0",
- "doctrine/coding-standard": "^13",
- "doctrine/deprecations": "^1.0",
+ "doctrine/coding-standard": "^14",
"doctrine/orm": "^2.17 || ^3.1",
"friendsofphp/proxy-manager-lts": "^1.0",
"phpstan/phpstan": "2.1.1",
"phpstan/phpstan-phpunit": "2.0.3",
"phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "^9.6.22",
+ "phpunit/phpunit": "^10.5.53 || ^12.3.10",
"psr/log": "^1.1.4 || ^2.0 || ^3.0",
"symfony/doctrine-messenger": "^6.4 || ^7.0",
+ "symfony/expression-language": "^6.4 || ^7.0",
"symfony/messenger": "^6.4 || ^7.0",
- "symfony/phpunit-bridge": "^7.2",
"symfony/property-info": "^6.4 || ^7.0",
"symfony/security-bundle": "^6.4 || ^7.0",
"symfony/stopwatch": "^6.4 || ^7.0",
@@ -583,7 +574,7 @@
"symfony/var-exporter": "^6.4.1 || ^7.0.1",
"symfony/web-profiler-bundle": "^6.4 || ^7.0",
"symfony/yaml": "^6.4 || ^7.0",
- "twig/twig": "^2.13 || ^3.0.4"
+ "twig/twig": "^2.14.7 || ^3.0.4"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
@@ -628,7 +619,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
- "source": "https://github.com/doctrine/DoctrineBundle/tree/2.15.0"
+ "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.2"
},
"funding": [
{
@@ -644,32 +635,32 @@
"type": "tidelift"
}
],
- "time": "2025-06-16T19:53:58+00:00"
+ "time": "2025-12-20T21:35:32+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
- "version": "3.4.2",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
- "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9"
+ "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
- "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
+ "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b",
+ "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b",
"shasum": ""
},
"require": {
- "doctrine/doctrine-bundle": "^2.4",
+ "doctrine/doctrine-bundle": "^2.4 || ^3.0",
"doctrine/migrations": "^3.2",
"php": "^7.2 || ^8.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
- "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0"
+ "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"require-dev": {
"composer/semver": "^3.0",
- "doctrine/coding-standard": "^12",
+ "doctrine/coding-standard": "^12 || ^14",
"doctrine/orm": "^2.6 || ^3",
"phpstan/phpstan": "^1.4 || ^2",
"phpstan/phpstan-deprecation-rules": "^1 || ^2",
@@ -677,8 +668,8 @@
"phpstan/phpstan-strict-rules": "^1.1 || ^2",
"phpstan/phpstan-symfony": "^1.3 || ^2",
"phpunit/phpunit": "^8.5 || ^9.5",
- "symfony/phpunit-bridge": "^6.3 || ^7",
- "symfony/var-exporter": "^5.4 || ^6 || ^7"
+ "symfony/phpunit-bridge": "^6.3 || ^7 || ^8",
+ "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8"
},
"type": "symfony-bundle",
"autoload": {
@@ -713,7 +704,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
- "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2"
+ "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0"
},
"funding": [
{
@@ -729,20 +720,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-11T17:36:26+00:00"
+ "time": "2025-11-15T19:02:59+00:00"
},
{
"name": "doctrine/event-manager",
- "version": "2.0.1",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
- "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e"
+ "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e",
- "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/dda33921b198841ca8dbad2eaa5d4d34769d18cf",
+ "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf",
"shasum": ""
},
"require": {
@@ -752,10 +743,10 @@
"doctrine/common": "<2.9"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "^1.8.8",
- "phpunit/phpunit": "^10.5",
- "vimeo/psalm": "^5.24"
+ "doctrine/coding-standard": "^14",
+ "phpdocumentor/guides-cli": "^1.4",
+ "phpstan/phpstan": "^2.1.32",
+ "phpunit/phpunit": "^10.5.58"
},
"type": "library",
"autoload": {
@@ -804,7 +795,7 @@
],
"support": {
"issues": "https://github.com/doctrine/event-manager/issues",
- "source": "https://github.com/doctrine/event-manager/tree/2.0.1"
+ "source": "https://github.com/doctrine/event-manager/tree/2.1.1"
},
"funding": [
{
@@ -820,37 +811,36 @@
"type": "tidelift"
}
],
- "time": "2024-05-22T20:47:39+00:00"
+ "time": "2026-01-29T07:11:08+00:00"
},
{
"name": "doctrine/inflector",
- "version": "2.0.10",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25 || ^5.4"
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
},
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ "Doctrine\\Inflector\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -895,7 +885,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.10"
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
},
"funding": [
{
@@ -911,7 +901,7 @@
"type": "tidelift"
}
],
- "time": "2024-02-18T20:23:39+00:00"
+ "time": "2025-08-10T19:31:58+00:00"
},
{
"name": "doctrine/instantiator",
@@ -1062,16 +1052,16 @@
},
{
"name": "doctrine/migrations",
- "version": "3.9.1",
+ "version": "3.9.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
- "reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999"
+ "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/migrations/zipball/0f1e0c960ac29866d648a4f50142a74fe1cb6999",
- "reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999",
+ "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec",
+ "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec",
"shasum": ""
},
"require": {
@@ -1081,29 +1071,29 @@
"doctrine/event-manager": "^1.2 || ^2.0",
"php": "^8.1",
"psr/log": "^1.1.3 || ^2 || ^3",
- "symfony/console": "^5.4 || ^6.0 || ^7.0",
- "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0",
- "symfony/var-exporter": "^6.2 || ^7.0"
+ "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0"
},
"conflict": {
"doctrine/orm": "<2.12 || >=4"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
+ "doctrine/coding-standard": "^14",
"doctrine/orm": "^2.13 || ^3",
"doctrine/persistence": "^2 || ^3 || ^4",
"doctrine/sql-formatter": "^1.0",
"ext-pdo_sqlite": "*",
"fig/log-test": "^1",
- "phpstan/phpstan": "^1.10",
- "phpstan/phpstan-deprecation-rules": "^1.1",
- "phpstan/phpstan-phpunit": "^1.3",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpstan/phpstan-symfony": "^1.3",
- "phpunit/phpunit": "^10.3",
- "symfony/cache": "^5.4 || ^6.0 || ^7.0",
- "symfony/process": "^5.4 || ^6.0 || ^7.0",
- "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-phpunit": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpstan/phpstan-symfony": "^2",
+ "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0",
+ "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"suggest": {
"doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.",
@@ -1145,7 +1135,7 @@
],
"support": {
"issues": "https://github.com/doctrine/migrations/issues",
- "source": "https://github.com/doctrine/migrations/tree/3.9.1"
+ "source": "https://github.com/doctrine/migrations/tree/3.9.7"
},
"funding": [
{
@@ -1161,20 +1151,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T07:19:23+00:00"
+ "time": "2026-04-23T19:33:20+00:00"
},
{
"name": "doctrine/orm",
- "version": "3.5.0",
+ "version": "3.6.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "6deec3655ba3e8f15280aac11e264225854d2369"
+ "reference": "e88cd591f0786089dee22b972c28aa2076df51c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/6deec3655ba3e8f15280aac11e264225854d2369",
- "reference": "6deec3655ba3e8f15280aac11e264225854d2369",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/e88cd591f0786089dee22b972c28aa2076df51c0",
+ "reference": "e88cd591f0786089dee22b972c28aa2076df51c0",
"shasum": ""
},
"require": {
@@ -1190,20 +1180,18 @@
"ext-ctype": "*",
"php": "^8.1",
"psr/cache": "^1 || ^2 || ^3",
- "symfony/console": "^5.4 || ^6.0 || ^7.0",
- "symfony/var-exporter": "^6.3.9 || ^7.0"
+ "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^13.0",
+ "doctrine/coding-standard": "^14.0",
"phpbench/phpbench": "^1.0",
- "phpdocumentor/guides-cli": "^1.4",
"phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "2.0.3",
+ "phpstan/phpstan": "2.1.23",
"phpstan/phpstan-deprecation-rules": "^2",
- "phpunit/phpunit": "^10.4.0",
+ "phpunit/phpunit": "^10.5.0 || ^11.5",
"psr/log": "^1 || ^2 || ^3",
- "squizlabs/php_codesniffer": "3.12.0",
- "symfony/cache": "^5.4 || ^6.2 || ^7.0"
+ "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
@@ -1249,44 +1237,43 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/3.5.0"
+ "source": "https://github.com/doctrine/orm/tree/3.6.3"
},
- "time": "2025-07-01T17:40:53+00:00"
+ "time": "2026-04-02T06:53:27+00:00"
},
{
"name": "doctrine/persistence",
- "version": "4.0.0",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
- "reference": "45004aca79189474f113cbe3a53847c2115a55fa"
+ "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/persistence/zipball/45004aca79189474f113cbe3a53847c2115a55fa",
- "reference": "45004aca79189474f113cbe3a53847c2115a55fa",
+ "url": "https://api.github.com/repos/doctrine/persistence/zipball/49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b",
+ "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b",
"shasum": ""
},
"require": {
+ "doctrine/deprecations": "^1",
"doctrine/event-manager": "^1 || ^2",
"php": "^8.1",
"psr/cache": "^1.0 || ^2.0 || ^3.0"
},
- "conflict": {
- "doctrine/common": "<2.10"
- },
"require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "1.12.7",
- "phpstan/phpstan-phpunit": "^1",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "^9.6",
- "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0"
+ "doctrine/coding-standard": "^14",
+ "phpstan/phpstan": "2.1.30",
+ "phpstan/phpstan-phpunit": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.58 || ^12",
+ "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Persistence\\": "src/Persistence"
+ "Doctrine\\Persistence\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1330,7 +1317,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
- "source": "https://github.com/doctrine/persistence/tree/4.0.0"
+ "source": "https://github.com/doctrine/persistence/tree/4.2.0"
},
"funding": [
{
@@ -1346,30 +1333,30 @@
"type": "tidelift"
}
],
- "time": "2024-11-01T21:49:07+00:00"
+ "time": "2026-04-26T12:12:52+00:00"
},
{
"name": "doctrine/sql-formatter",
- "version": "1.5.2",
+ "version": "1.5.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/sql-formatter.git",
- "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8"
+ "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8",
- "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8",
+ "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/9563949f5cd3bd12a17d12fb980528bc141c5806",
+ "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
- "ergebnis/phpunit-slow-test-detector": "^2.14",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^10.5"
+ "doctrine/coding-standard": "^14",
+ "ergebnis/phpunit-slow-test-detector": "^2.20",
+ "phpstan/phpstan": "^2.1.31",
+ "phpunit/phpunit": "^10.5.58"
},
"bin": [
"bin/sql-formatter"
@@ -1399,9 +1386,9 @@
],
"support": {
"issues": "https://github.com/doctrine/sql-formatter/issues",
- "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2"
+ "source": "https://github.com/doctrine/sql-formatter/tree/1.5.4"
},
- "time": "2025-01-24T11:45:48+00:00"
+ "time": "2026-02-08T16:21:46+00:00"
},
{
"name": "dsbaars/chacha20",
@@ -1552,20 +1539,20 @@
},
{
"name": "genkgo/php-asn1",
- "version": "v2.8.0",
+ "version": "v2.9.0",
"source": {
"type": "git",
"url": "https://github.com/genkgo/php-asn1.git",
- "reference": "4de712c68bbf51c00551cb45f55642e30fed1fdb"
+ "reference": "dc535345d0ecc69181c6a1e17e57a625bd01f891"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/genkgo/php-asn1/zipball/4de712c68bbf51c00551cb45f55642e30fed1fdb",
- "reference": "4de712c68bbf51c00551cb45f55642e30fed1fdb",
+ "url": "https://api.github.com/repos/genkgo/php-asn1/zipball/dc535345d0ecc69181c6a1e17e57a625bd01f891",
+ "reference": "dc535345d0ecc69181c6a1e17e57a625bd01f891",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"php-coveralls/php-coveralls": "~2.0",
@@ -1626,26 +1613,26 @@
],
"support": {
"issues": "https://github.com/genkgo/php-asn1/issues",
- "source": "https://github.com/genkgo/php-asn1/tree/v2.8.0"
+ "source": "https://github.com/genkgo/php-asn1/tree/v2.9.0"
},
- "time": "2025-02-12T20:20:53+00:00"
+ "time": "2026-01-06T11:43:05+00:00"
},
{
"name": "laminas/laminas-diactoros",
- "version": "3.6.0",
+ "version": "3.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f"
+ "reference": "60c182916b2749480895601649563970f3f12ec4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b068eac123f21c0e592de41deeb7403b88e0a89f",
- "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4",
+ "reference": "60c182916b2749480895601649563970f3f12ec4",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"psr/http-factory": "^1.1",
"psr/http-message": "^1.1 || ^2.0"
},
@@ -1662,11 +1649,11 @@
"ext-gd": "*",
"ext-libxml": "*",
"http-interop/http-factory-tests": "^2.2.0",
- "laminas/laminas-coding-standard": "~3.0.0",
+ "laminas/laminas-coding-standard": "~3.1.0",
"php-http/psr7-integration-tests": "^1.4.0",
"phpunit/phpunit": "^10.5.36",
- "psalm/plugin-phpunit": "^0.19.0",
- "vimeo/psalm": "^5.26.1"
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13"
},
"type": "library",
"extra": {
@@ -1716,20 +1703,20 @@
"type": "community_bridge"
}
],
- "time": "2025-05-05T16:03:34+00:00"
+ "time": "2025-10-12T15:31:36+00:00"
},
{
"name": "league/commonmark",
- "version": "2.7.1",
+ "version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "10732241927d3971d28e7ea7b5712721fa2296ca"
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca",
- "reference": "10732241927d3971d28e7ea7b5712721fa2296ca",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b",
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b",
"shasum": ""
},
"require": {
@@ -1754,9 +1741,9 @@
"phpstan/phpstan": "^1.8.2",
"phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
- "symfony/finder": "^5.3 | ^6.0 | ^7.0",
- "symfony/process": "^5.4 | ^6.0 | ^7.0",
- "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0",
"unleashedtech/php-coding-standard": "^3.1.1",
"vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
@@ -1766,7 +1753,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.8-dev"
+ "dev-main": "2.9-dev"
}
},
"autoload": {
@@ -1823,7 +1810,7 @@
"type": "tidelift"
}
],
- "time": "2025-07-20T12:47:49+00:00"
+ "time": "2026-03-19T13:16:38+00:00"
},
{
"name": "league/config",
@@ -1998,33 +1985,38 @@
},
{
"name": "league/uri",
- "version": "7.5.1",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430"
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430",
- "reference": "81fb5145d2644324614cc532b28efd0215bda430",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4",
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.5",
- "php": "^8.1"
+ "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",
- "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
- "league/uri-components": "Needed to easily manipulate URI objects components",
+ "ext-uri": "to use the PHP native URI class",
+ "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
+ "league/uri-components": "to provide additional tools to manipulate URI objects components",
+ "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -2052,6 +2044,7 @@
"description": "URI manipulation library",
"homepage": "https://uri.thephpleague.com",
"keywords": [
+ "URN",
"data-uri",
"file-uri",
"ftp",
@@ -2064,9 +2057,11 @@
"psr-7",
"query-string",
"querystring",
+ "rfc2141",
"rfc3986",
"rfc3987",
"rfc6570",
+ "rfc8141",
"uri",
"uri-template",
"url",
@@ -2076,7 +2071,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.5.1"
+ "source": "https://github.com/thephpleague/uri/tree/7.8.1"
},
"funding": [
{
@@ -2084,26 +2079,25 @@
"type": "github"
}
],
- "time": "2024-12-08T08:40:02+00:00"
+ "time": "2026-03-15T20:22:25+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.5.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742"
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
- "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928",
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^8.1",
- "psr/http-factory": "^1",
"psr/http-message": "^1.1 || ^2.0"
},
"suggest": {
@@ -2111,6 +2105,7 @@
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
},
"type": "library",
@@ -2135,7 +2130,7 @@
"homepage": "https://nyamsprod.com"
}
],
- "description": "Common interfaces and classes for URI representation and interaction",
+ "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
"homepage": "https://uri.thephpleague.com",
"keywords": [
"data-uri",
@@ -2160,7 +2155,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1"
},
"funding": [
{
@@ -2168,7 +2163,7 @@
"type": "github"
}
],
- "time": "2024-12-08T08:18:47+00:00"
+ "time": "2026-03-08T20:05:35+00:00"
},
{
"name": "masterminds/html5",
@@ -2446,25 +2441,27 @@
},
{
"name": "nette/schema",
- "version": "v1.3.2",
+ "version": "v1.3.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "da801d52f0354f70a638673c4a0f04e16529431d"
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
- "reference": "da801d52f0354f70a638673c4a0f04e16529431d",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
"shasum": ""
},
"require": {
"nette/utils": "^4.0",
- "php": "8.1 - 8.4"
+ "php": "8.1 - 8.5"
},
"require-dev": {
- "nette/tester": "^2.5.2",
- "phpstan/phpstan-nette": "^1.0",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -2474,6 +2471,9 @@
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -2502,35 +2502,37 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.3.2"
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
},
- "time": "2024-10-06T23:10:23+00:00"
+ "time": "2026-02-23T03:47:12+00:00"
},
{
"name": "nette/utils",
- "version": "v4.0.7",
+ "version": "v4.1.3",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2"
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2",
- "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2",
+ "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
"shasum": ""
},
"require": {
- "php": "8.0 - 8.4"
+ "php": "8.2 - 8.5"
},
"conflict": {
"nette/finder": "<3",
"nette/schema": "<1.2.2"
},
"require-dev": {
- "jetbrains/phpstorm-attributes": "dev-master",
+ "jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
"nette/tester": "^2.5",
- "phpstan/phpstan": "^1.0",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -2544,10 +2546,13 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-master": "4.1-dev"
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -2588,9 +2593,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.7"
+ "source": "https://github.com/nette/utils/tree/v4.1.3"
},
- "time": "2025-06-03T04:55:08+00:00"
+ "time": "2026-02-13T03:05:33+00:00"
},
{
"name": "nostriphant/nip-19",
@@ -2636,6 +2641,84 @@
},
"time": "2024-11-26T15:37:43+00:00"
},
+ {
+ "name": "nyholm/psr7",
+ "version": "1.8.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Nyholm/psr7.git",
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "provide": {
+ "php-http/message-factory-implementation": "1.0",
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "http-interop/http-factory-tests": "^0.9",
+ "php-http/message-factory": "^1.0",
+ "php-http/psr7-integration-tests": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
+ "symfony/error-handler": "^4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nyholm\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com"
+ },
+ {
+ "name": "Martijn van der Ven",
+ "email": "martijn@vanderven.se"
+ }
+ ],
+ "description": "A fast PHP7 implementation of PSR-7",
+ "homepage": "https://tnyholm.se",
+ "keywords": [
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/Nyholm/psr7/issues",
+ "source": "https://github.com/Nyholm/psr7/tree/1.8.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Zegnat",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nyholm",
+ "type": "github"
+ }
+ ],
+ "time": "2024-09-09T07:06:30+00:00"
+ },
{
"name": "oscarotero/html-parser",
"version": "v0.1.8",
@@ -2781,16 +2864,16 @@
},
{
"name": "paragonie/sodium_compat",
- "version": "v2.1.0",
+ "version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/sodium_compat.git",
- "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb"
+ "reference": "4714da6efdc782c06690bc72ce34fae7941c2d9f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a673d5f310477027cead2e2f2b6db5d8368157cb",
- "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb",
+ "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/4714da6efdc782c06690bc72ce34fae7941c2d9f",
+ "reference": "4714da6efdc782c06690bc72ce34fae7941c2d9f",
"shasum": ""
},
"require": {
@@ -2798,8 +2881,10 @@
"php-64bit": "*"
},
"require-dev": {
- "phpunit/phpunit": "^7|^8|^9",
- "vimeo/psalm": "^4|^5"
+ "infection/infection": "^0",
+ "nikic/php-fuzzer": "^0",
+ "phpunit/phpunit": "^7|^8|^9|^10|^11",
+ "vimeo/psalm": "^4|^5|^6"
},
"suggest": {
"ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
@@ -2813,7 +2898,10 @@
"autoload": {
"files": [
"autoload.php"
- ]
+ ],
+ "psr-4": {
+ "ParagonIE\\Sodium\\": "namespaced/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2866,9 +2954,9 @@
],
"support": {
"issues": "https://github.com/paragonie/sodium_compat/issues",
- "source": "https://github.com/paragonie/sodium_compat/tree/v2.1.0"
+ "source": "https://github.com/paragonie/sodium_compat/tree/v2.5.0"
},
- "time": "2024-09-04T12:51:01+00:00"
+ "time": "2025-12-30T16:12:18+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -2925,16 +3013,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.6.2",
+ "version": "5.6.7",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
+ "reference": "31a105931bc8ffa3a123383829772e832fd8d903"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903",
+ "reference": "31a105931bc8ffa3a123383829772e832fd8d903",
"shasum": ""
},
"require": {
@@ -2944,7 +3032,7 @@
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.7",
"phpstan/phpdoc-parser": "^1.7|^2.0",
- "webmozart/assert": "^1.9.1"
+ "webmozart/assert": "^1.9.1 || ^2"
},
"require-dev": {
"mockery/mockery": "~1.3.5 || ~1.6.0",
@@ -2983,22 +3071,22 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7"
},
- "time": "2025-04-13T19:20:35+00:00"
+ "time": "2026-03-18T20:47:46+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.10.0",
+ "version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
+ "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195",
+ "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195",
"shasum": ""
},
"require": {
@@ -3041,22 +3129,22 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0"
},
- "time": "2024-11-09T15:12:26+00:00"
+ "time": "2025-11-21T15:09:14+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.2.0",
+ "version": "2.3.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8"
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8",
- "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a",
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a",
"shasum": ""
},
"require": {
@@ -3088,32 +3176,32 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2"
},
- "time": "2025-07-13T07:04:09+00:00"
+ "time": "2026-01-25T14:56:51+00:00"
},
{
"name": "phrity/comparison",
- "version": "1.4.0",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-comparison.git",
- "reference": "aedd44d59db08de7d6c31812d1490c22aab35c92"
+ "reference": "cf80abb822537eeaaeb4142157cd667ca6372a13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/phrity-comparison/zipball/aedd44d59db08de7d6c31812d1490c22aab35c92",
- "reference": "aedd44d59db08de7d6c31812d1490c22aab35c92",
+ "url": "https://api.github.com/repos/sirn-se/phrity-comparison/zipball/cf80abb822537eeaaeb4142157cd667ca6372a13",
+ "reference": "cf80abb822537eeaaeb4142157cd667ca6372a13",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
"phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0",
- "squizlabs/php_codesniffer": "^3.5"
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
},
"type": "library",
"autoload": {
@@ -3144,36 +3232,95 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-comparison/issues",
- "source": "https://github.com/sirn-se/phrity-comparison/tree/1.4.0"
+ "source": "https://github.com/sirn-se/phrity-comparison/tree/1.4.1"
+ },
+ "time": "2025-12-05T07:38:30+00:00"
+ },
+ {
+ "name": "phrity/http",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sirn-se/phrity-http.git",
+ "reference": "1e7eee67359287b94aae2b7d40b730d5f5394943"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sirn-se/phrity-http/zipball/1e7eee67359287b94aae2b7d40b730d5f5394943",
+ "reference": "1e7eee67359287b94aae2b7d40b730d5f5394943",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "require-dev": {
+ "guzzlehttp/psr7": "^2.0",
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phrity\\Http\\": "src/"
+ }
},
- "time": "2025-05-26T20:12:39+00:00"
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sören Jensen",
+ "email": "sirn@sirn.se",
+ "homepage": "https://phrity.sirn.se"
+ }
+ ],
+ "description": "Utilities and interfaces for handling HTTP.",
+ "homepage": "https://phrity.sirn.se/http",
+ "keywords": [
+ "HTTP Factories",
+ "HTTP Serializer",
+ "http",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/sirn-se/phrity-http/issues",
+ "source": "https://github.com/sirn-se/phrity-http/tree/1.1.0"
+ },
+ "time": "2025-12-22T20:22:29+00:00"
},
{
"name": "phrity/net-stream",
- "version": "2.3.0",
+ "version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-net-stream.git",
- "reference": "0ecc50a8ee7a708033d391ed60878b0bd5397bf8"
+ "reference": "a0726a8dddf11a4cd3a9e45d17e145d78e948f43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/0ecc50a8ee7a708033d391ed60878b0bd5397bf8",
- "reference": "0ecc50a8ee7a708033d391ed60878b0bd5397bf8",
+ "url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/a0726a8dddf11a4cd3a9e45d17e145d78e948f43",
+ "reference": "a0726a8dddf11a4cd3a9e45d17e145d78e948f43",
"shasum": ""
},
"require": {
"php": "^8.1",
"phrity/util-errorhandler": "^1.1",
+ "phrity/util-interpolator": "^1.1",
"psr/http-factory": "^1.0",
- "psr/http-message": "^1.1 | ^2.0"
+ "psr/http-message": "^1.1 || ^2.0"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
"phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0 || ^13.0",
"phrity/net-uri": "^2.0",
- "squizlabs/php_codesniffer": "^3.5"
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^4.0"
},
"type": "library",
"autoload": {
@@ -3205,22 +3352,22 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-net-stream/issues",
- "source": "https://github.com/sirn-se/phrity-net-stream/tree/2.3.0"
+ "source": "https://github.com/sirn-se/phrity-net-stream/tree/2.4.0"
},
- "time": "2025-05-22T08:28:09+00:00"
+ "time": "2026-03-25T18:16:40+00:00"
},
{
"name": "phrity/net-uri",
- "version": "2.2.0",
+ "version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-net-uri.git",
- "reference": "08de4cf07e439c4708f572249659f09198ac99f0"
+ "reference": "0737de026b75177ae302ac9fdbbd0ffc2610f3b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/phrity-net-uri/zipball/08de4cf07e439c4708f572249659f09198ac99f0",
- "reference": "08de4cf07e439c4708f572249659f09198ac99f0",
+ "url": "https://api.github.com/repos/sirn-se/phrity-net-uri/zipball/0737de026b75177ae302ac9fdbbd0ffc2610f3b8",
+ "reference": "0737de026b75177ae302ac9fdbbd0ffc2610f3b8",
"shasum": ""
},
"require": {
@@ -3231,11 +3378,11 @@
"psr/http-message": "^1.1 | ^2.0"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
"phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
"phrity/util-errorhandler": "^1.1",
- "squizlabs/php_codesniffer": "^3.5"
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
},
"suggest": {
"ext-intl": "Enables IDN conversion for non-ASCII domains"
@@ -3267,32 +3414,84 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-net-uri/issues",
- "source": "https://github.com/sirn-se/phrity-net-uri/tree/2.2.0"
+ "source": "https://github.com/sirn-se/phrity-net-uri/tree/2.2.1"
},
- "time": "2025-05-25T13:05:13+00:00"
+ "time": "2025-12-05T10:39:22+00:00"
+ },
+ {
+ "name": "phrity/util-accessor",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sirn-se/phrity-util-accessor.git",
+ "reference": "e9741da6b532fa2da7f627fce60fa77f00f6e354"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sirn-se/phrity-util-accessor/zipball/e9741da6b532fa2da7f627fce60fa77f00f6e354",
+ "reference": "e9741da6b532fa2da7f627fce60fa77f00f6e354",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "phrity/util-transformer": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phrity\\Util\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sören Jensen",
+ "email": "sirn@sirn.se",
+ "homepage": "https://phrity.sirn.se"
+ }
+ ],
+ "description": "Utility to handle access to a data set by using access paths. Similar to and partly compatible with xpath and json-pointer.",
+ "homepage": "https://phrity.sirn.se/util-accessor",
+ "keywords": [
+ "accessor"
+ ],
+ "support": {
+ "issues": "https://github.com/sirn-se/phrity-util-accessor/issues",
+ "source": "https://github.com/sirn-se/phrity-util-accessor/tree/1.3.1"
+ },
+ "time": "2025-12-05T21:18:15+00:00"
},
{
"name": "phrity/util-errorhandler",
- "version": "1.2.0",
+ "version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-util-errorhandler.git",
- "reference": "61813189e4525fde4aecad3df849829d526d6f76"
+ "reference": "70a669cc22db2eed6a109ec66fd95168a4332c9b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/phrity-util-errorhandler/zipball/61813189e4525fde4aecad3df849829d526d6f76",
- "reference": "61813189e4525fde4aecad3df849829d526d6f76",
+ "url": "https://api.github.com/repos/sirn-se/phrity-util-errorhandler/zipball/70a669cc22db2eed6a109ec66fd95168a4332c9b",
+ "reference": "70a669cc22db2eed6a109ec66fd95168a4332c9b",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
"phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0",
- "squizlabs/php_codesniffer": "^3.5"
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
},
"type": "library",
"autoload": {
@@ -3319,38 +3518,154 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-util-errorhandler/issues",
- "source": "https://github.com/sirn-se/phrity-util-errorhandler/tree/1.2.0"
+ "source": "https://github.com/sirn-se/phrity-util-errorhandler/tree/1.2.2"
+ },
+ "time": "2025-12-05T21:25:36+00:00"
+ },
+ {
+ "name": "phrity/util-interpolator",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sirn-se/phrity-util-interpolator.git",
+ "reference": "18b0362d2aff60984c530808333c5e64c80c3e50"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sirn-se/phrity-util-interpolator/zipball/18b0362d2aff60984c530808333c5e64c80c3e50",
+ "reference": "18b0362d2aff60984c530808333c5e64c80c3e50",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "phrity/util-accessor": "^1.3",
+ "phrity/util-transformer": "^1.3"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phrity\\Util\\Interpolator\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sören Jensen",
+ "email": "sirn@sirn.se",
+ "homepage": "https://phrity.sirn.se"
+ }
+ ],
+ "description": "Interpolator class and trait.",
+ "homepage": "https://phrity.sirn.se/util-interpolator",
+ "keywords": [
+ "interpolate",
+ "interpolator"
+ ],
+ "support": {
+ "issues": "https://github.com/sirn-se/phrity-util-interpolator/issues",
+ "source": "https://github.com/sirn-se/phrity-util-interpolator/tree/1.1.1"
+ },
+ "time": "2025-12-05T21:35:25+00:00"
+ },
+ {
+ "name": "phrity/util-transformer",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sirn-se/phrity-util-transformer.git",
+ "reference": "3fd4d7fa4077deafe5130c4b9ee8146b5488abe3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sirn-se/phrity-util-transformer/zipball/3fd4d7fa4077deafe5130c4b9ee8146b5488abe3",
+ "reference": "3fd4d7fa4077deafe5130c4b9ee8146b5488abe3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0",
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^3.5 || ^4.0",
+ "symfony/property-access": "^6.0 || ^7.0 || ^8.0",
+ "symfony/serializer": "^6.0 || ^7.0 || ^8.0",
+ "symfony/translation-contracts": "^3.0",
+ "symfony/uid": "^6.0 || ^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phrity\\Util\\Transformer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sören Jensen",
+ "email": "sirn@sirn.se",
+ "homepage": "https://phrity.sirn.se"
+ }
+ ],
+ "description": "Type transformers, normalizers and resolvers.",
+ "homepage": "https://phrity.sirn.se/util-transformer",
+ "keywords": [
+ "normalizer",
+ "resolver",
+ "transformer",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/sirn-se/phrity-util-transformer/issues",
+ "source": "https://github.com/sirn-se/phrity-util-transformer/tree/1.3.1"
},
- "time": "2025-05-26T18:26:51+00:00"
+ "time": "2025-12-05T22:07:04+00:00"
},
{
"name": "phrity/websocket",
- "version": "3.5.0",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/websocket-php.git",
- "reference": "df3b4dbe3a8741159ae5cb5735476ebc4813d909"
+ "reference": "01f15374987d8281dba0ca511f322a0e18229330"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/df3b4dbe3a8741159ae5cb5735476ebc4813d909",
- "reference": "df3b4dbe3a8741159ae5cb5735476ebc4813d909",
+ "url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/01f15374987d8281dba0ca511f322a0e18229330",
+ "reference": "01f15374987d8281dba0ca511f322a0e18229330",
"shasum": ""
},
"require": {
+ "nyholm/psr7": "^1.4",
"php": "^8.1",
- "phrity/net-stream": "^2.3",
+ "phrity/http": "^1.1",
+ "phrity/net-stream": "^2.4",
"phrity/net-uri": "^2.1",
- "psr/http-message": "^1.1 | ^2.0",
- "psr/log": "^1.0 | ^2.0 | ^3.0"
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
"phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0 | ^11.0 | ^12.0",
- "phrity/net-mock": "^2.3",
+ "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0 || ^13.0",
+ "phrity/logger-console": "^1.0",
+ "phrity/net-mock": "^2.4",
"phrity/util-errorhandler": "^1.1",
- "squizlabs/php_codesniffer": "^3.5"
+ "robiningelbrecht/phpunit-coverage-tools": "^1.9",
+ "squizlabs/php_codesniffer": "^4.0"
},
"type": "library",
"autoload": {
@@ -3381,9 +3696,9 @@
],
"support": {
"issues": "https://github.com/sirn-se/websocket-php/issues",
- "source": "https://github.com/sirn-se/websocket-php/tree/3.5.0"
+ "source": "https://github.com/sirn-se/websocket-php/tree/3.7.0"
},
- "time": "2025-05-23T13:13:41+00:00"
+ "time": "2026-04-06T18:18:14+00:00"
},
{
"name": "psr/cache",
@@ -4061,16 +4376,16 @@
},
{
"name": "symfony/asset",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
- "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426"
+ "reference": "da95c6aba17f7e831744c2a09fd360e32a3d0f84"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/asset/zipball/0dcd51490d7fc9fbf3c8f5aec6df182920fc0426",
- "reference": "0dcd51490d7fc9fbf3c8f5aec6df182920fc0426",
+ "url": "https://api.github.com/repos/symfony/asset/zipball/da95c6aba17f7e831744c2a09fd360e32a3d0f84",
+ "reference": "da95c6aba17f7e831744c2a09fd360e32a3d0f84",
"shasum": ""
},
"require": {
@@ -4110,7 +4425,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/asset/tree/v7.1.6"
+ "source": "https://github.com/symfony/asset/tree/v7.3.10"
},
"funding": [
{
@@ -4121,25 +4436,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:11:02+00:00"
+ "time": "2026-01-13T10:28:39+00:00"
},
{
"name": "symfony/asset-mapper",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset-mapper.git",
- "reference": "f30a77372995afb0f9323903b52e8e6527d12451"
+ "reference": "8325b9e34ad1b03c9a8a8414f215ea24949e1207"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/f30a77372995afb0f9323903b52e8e6527d12451",
- "reference": "f30a77372995afb0f9323903b52e8e6527d12451",
+ "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/8325b9e34ad1b03c9a8a8414f215ea24949e1207",
+ "reference": "8325b9e34ad1b03c9a8a8414f215ea24949e1207",
"shasum": ""
},
"require": {
@@ -4161,6 +4480,7 @@
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0"
},
"type": "library",
@@ -4189,7 +4509,7 @@
"description": "Maps directories of assets & makes them available in a public directory with versioned filenames.",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/asset-mapper/tree/v7.1.11"
+ "source": "https://github.com/symfony/asset-mapper/tree/v7.3.10"
},
"funding": [
{
@@ -4200,32 +4520,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-13T08:38:55+00:00"
},
{
"name": "symfony/cache",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb"
+ "reference": "e3e76b9ba0dff3dfe08ebda500723976dd9de407"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb",
- "reference": "3828c0375578ff3ca1ddc54cc5c6fa4cc89fb3fb",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/e3e76b9ba0dff3dfe08ebda500723976dd9de407",
+ "reference": "e3e76b9ba0dff3dfe08ebda500723976dd9de407",
"shasum": ""
},
"require": {
"php": ">=8.2",
"psr/cache": "^2.0|^3.0",
"psr/log": "^1.1|^2|^3",
- "symfony/cache-contracts": "^2.5|^3",
+ "symfony/cache-contracts": "^3.6",
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/var-exporter": "^6.4|^7.0"
@@ -4246,6 +4570,7 @@
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
+ "symfony/clock": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/filesystem": "^6.4|^7.0",
@@ -4286,7 +4611,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v7.1.11"
+ "source": "https://github.com/symfony/cache/tree/v7.3.11"
},
"funding": [
{
@@ -4297,12 +4622,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-27T16:12:03+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -4382,16 +4711,16 @@
},
{
"name": "symfony/clock",
- "version": "v7.1.6",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
- "reference": "97bebc53548684c17ed696bc8af016880f0f098d"
+ "reference": "bf3ab8ea07408cb91aef86e3b2761d2d0f011e7c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d",
- "reference": "97bebc53548684c17ed696bc8af016880f0f098d",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/bf3ab8ea07408cb91aef86e3b2761d2d0f011e7c",
+ "reference": "bf3ab8ea07408cb91aef86e3b2761d2d0f011e7c",
"shasum": ""
},
"require": {
@@ -4436,7 +4765,7 @@
"time"
],
"support": {
- "source": "https://github.com/symfony/clock/tree/v7.1.6"
+ "source": "https://github.com/symfony/clock/tree/v7.3.8"
},
"funding": [
{
@@ -4447,25 +4776,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-11-12T15:21:00+00:00"
},
{
"name": "symfony/config",
- "version": "v7.1.7",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8"
+ "reference": "26ddb5ea228c55986ac9dd5273bd6b4e3d07eb61"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8",
- "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8",
+ "url": "https://api.github.com/repos/symfony/config/zipball/26ddb5ea228c55986ac9dd5273bd6b4e3d07eb61",
+ "reference": "26ddb5ea228c55986ac9dd5273bd6b4e3d07eb61",
"shasum": ""
},
"require": {
@@ -4511,7 +4844,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.1.7"
+ "source": "https://github.com/symfony/config/tree/v7.3.10"
},
"funding": [
{
@@ -4522,32 +4855,37 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-04T11:34:07+00:00"
+ "time": "2026-01-13T10:52:41+00:00"
},
{
"name": "symfony/console",
- "version": "v7.1.10",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7"
+ "reference": "a28c3e5b4df406e8fae8e9b18c40557b5dfc430c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7",
- "reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7",
+ "url": "https://api.github.com/repos/symfony/console/zipball/a28c3e5b4df406e8fae8e9b18c40557b5dfc430c",
+ "reference": "a28c3e5b4df406e8fae8e9b18c40557b5dfc430c",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^6.4|^7.0"
+ "symfony/string": "^7.2"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
@@ -4604,7 +4942,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.1.10"
+ "source": "https://github.com/symfony/console/tree/v7.3.10"
},
"funding": [
{
@@ -4615,25 +4953,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-09T07:30:10+00:00"
+ "time": "2026-01-13T10:52:14+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "5ebf7d4dfda126b442450effaec421a106c010de"
+ "reference": "1d5596f8a5da5c27539634cd6ba769f107991234"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5ebf7d4dfda126b442450effaec421a106c010de",
- "reference": "5ebf7d4dfda126b442450effaec421a106c010de",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1d5596f8a5da5c27539634cd6ba769f107991234",
+ "reference": "1d5596f8a5da5c27539634cd6ba769f107991234",
"shasum": ""
},
"require": {
@@ -4641,7 +4983,7 @@
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^3.5",
- "symfony/var-exporter": "^6.4|^7.0"
+ "symfony/var-exporter": "^6.4.20|^7.2.5"
},
"conflict": {
"ext-psr": "<1.1|>=2",
@@ -4684,7 +5026,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v7.1.11"
+ "source": "https://github.com/symfony/dependency-injection/tree/v7.3.11"
},
"funding": [
{
@@ -4695,12 +5037,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-10T09:29:52+00:00"
+ "time": "2026-01-27T16:00:40+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -4771,16 +5117,16 @@
},
{
"name": "symfony/doctrine-bridge",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "b0247c25b71409c23c0cf3e090030950a86cc61b"
+ "reference": "98814d5e95e382150629619fa883e775baf6f340"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b0247c25b71409c23c0cf3e090030950a86cc61b",
- "reference": "b0247c25b71409c23c0cf3e090030950a86cc61b",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/98814d5e95e382150629619fa883e775baf6f340",
+ "reference": "98814d5e95e382150629619fa883e775baf6f340",
"shasum": ""
},
"require": {
@@ -4793,6 +5139,7 @@
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
+ "doctrine/collections": "<1.8",
"doctrine/dbal": "<3.6",
"doctrine/lexer": "<1.1",
"doctrine/orm": "<2.15",
@@ -4809,7 +5156,7 @@
"symfony/validator": "<6.4"
},
"require-dev": {
- "doctrine/collections": "^1.0|^2.0",
+ "doctrine/collections": "^1.8|^2.0",
"doctrine/data-fixtures": "^1.1|^2",
"doctrine/dbal": "^3.6|^4",
"doctrine/orm": "^2.15|^3",
@@ -4828,7 +5175,7 @@
"symfony/security-core": "^6.4|^7.0",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
@@ -4859,7 +5206,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.11"
+ "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.10"
},
"funding": [
{
@@ -4870,25 +5217,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-20T16:37:04+00:00"
},
{
"name": "symfony/dotenv",
- "version": "v7.1.9",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
- "reference": "245d1afe223664d2276afb75177d8988c328fb78"
+ "reference": "8c53fef39685ce76f208b4ccdc1e224f7e626c3f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/245d1afe223664d2276afb75177d8988c328fb78",
- "reference": "245d1afe223664d2276afb75177d8988c328fb78",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/8c53fef39685ce76f208b4ccdc1e224f7e626c3f",
+ "reference": "8c53fef39685ce76f208b4ccdc1e224f7e626c3f",
"shasum": ""
},
"require": {
@@ -4933,7 +5284,7 @@
"environment"
],
"support": {
- "source": "https://github.com/symfony/dotenv/tree/v7.1.9"
+ "source": "https://github.com/symfony/dotenv/tree/v7.3.8"
},
"funding": [
{
@@ -4944,25 +5295,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-27T11:17:28+00:00"
+ "time": "2025-11-16T10:09:06+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57"
+ "reference": "c2ee39c0f4840971da6d4b8a1fd910ed470e2c93"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57",
- "reference": "f4d1fd1bcb4bce9983d034111b7ea3edc88e1a57",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/c2ee39c0f4840971da6d4b8a1fd910ed470e2c93",
+ "reference": "c2ee39c0f4840971da6d4b8a1fd910ed470e2c93",
"shasum": ""
},
"require": {
@@ -4975,9 +5330,11 @@
"symfony/http-kernel": "<6.4"
},
"require-dev": {
+ "symfony/console": "^6.4|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-kernel": "^6.4|^7.0",
- "symfony/serializer": "^6.4|^7.0"
+ "symfony/serializer": "^6.4|^7.0",
+ "symfony/webpack-encore-bundle": "^1.0|^2.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@@ -5008,7 +5365,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v7.1.11"
+ "source": "https://github.com/symfony/error-handler/tree/v7.3.10"
},
"funding": [
{
@@ -5019,25 +5376,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-07T09:23:14+00:00"
+ "time": "2026-01-20T16:37:04+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "87254c78dd50721cfd015b62277a8281c5589702"
+ "reference": "2abf563596d8af09bbbfe4c6079bdffd7ed3f9f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702",
- "reference": "87254c78dd50721cfd015b62277a8281c5589702",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2abf563596d8af09bbbfe4c6079bdffd7ed3f9f8",
+ "reference": "2abf563596d8af09bbbfe4c6079bdffd7ed3f9f8",
"shasum": ""
},
"require": {
@@ -5088,7 +5449,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.10"
},
"funding": [
{
@@ -5099,12 +5460,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2026-01-05T11:42:02+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -5184,16 +5549,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v7.1.6",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4"
+ "reference": "ce0b94a0e57b7499520d9e5150da9716d729a645"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4",
- "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/ce0b94a0e57b7499520d9e5150da9716d729a645",
+ "reference": "ce0b94a0e57b7499520d9e5150da9716d729a645",
"shasum": ""
},
"require": {
@@ -5230,7 +5595,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.1.6"
+ "source": "https://github.com/symfony/filesystem/tree/v7.3.8"
},
"funding": [
{
@@ -5241,25 +5606,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:11:02+00:00"
+ "time": "2025-11-26T15:55:45+00:00"
},
{
"name": "symfony/finder",
- "version": "v7.1.10",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3"
+ "reference": "38f5d6ab66f0bc43fb5a23a4e7a4f06f0d454b56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/b8b526e051ac0b33feabbec7893adcab96b23bf3",
- "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/38f5d6ab66f0bc43fb5a23a4e7a4f06f0d454b56",
+ "reference": "38f5d6ab66f0bc43fb5a23a4e7a4f06f0d454b56",
"shasum": ""
},
"require": {
@@ -5294,7 +5663,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.1.10"
+ "source": "https://github.com/symfony/finder/tree/v7.3.11"
},
"funding": [
{
@@ -5305,40 +5674,45 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-30T18:59:46+00:00"
+ "time": "2026-01-26T13:14:40+00:00"
},
{
"name": "symfony/flex",
- "version": "v2.8.1",
+ "version": "v2.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
- "reference": "423c36e369361003dc31ef11c5f15fb589e52c01"
+ "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/flex/zipball/423c36e369361003dc31ef11c5f15fb589e52c01",
- "reference": "423c36e369361003dc31ef11c5f15fb589e52c01",
+ "url": "https://api.github.com/repos/symfony/flex/zipball/9cd384775973eabbf6e8b05784dda279fc67c28d",
+ "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.1",
- "php": ">=8.0"
+ "php": ">=8.1"
},
"conflict": {
- "composer/semver": "<1.7.2"
+ "composer/semver": "<1.7.2",
+ "symfony/dotenv": "<5.4"
},
"require-dev": {
"composer/composer": "^2.1",
- "symfony/dotenv": "^5.4|^6.0",
- "symfony/filesystem": "^5.4|^6.0",
- "symfony/phpunit-bridge": "^5.4|^6.0",
- "symfony/process": "^5.4|^6.0"
+ "symfony/dotenv": "^6.4|^7.4|^8.0",
+ "symfony/filesystem": "^6.4|^7.4|^8.0",
+ "symfony/phpunit-bridge": "^6.4|^7.4|^8.0",
+ "symfony/process": "^6.4|^7.4|^8.0"
},
"type": "composer-plugin",
"extra": {
@@ -5362,7 +5736,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
- "source": "https://github.com/symfony/flex/tree/v2.8.1"
+ "source": "https://github.com/symfony/flex/tree/v2.10.0"
},
"funding": [
{
@@ -5373,32 +5747,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-07-05T07:45:19+00:00"
+ "time": "2025-11-16T09:38:19+00:00"
},
{
"name": "symfony/form",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
- "reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387"
+ "reference": "4bc84400e208bd82e3a68f88f4fe26b8d4d85181"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/form/zipball/7a48dda96fe16711fc042df38ca1a7dd4d9d6387",
- "reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387",
+ "url": "https://api.github.com/repos/symfony/form/zipball/4bc84400e208bd82e3a68f88f4fe26b8d4d85181",
+ "reference": "4bc84400e208bd82e3a68f88f4fe26b8d4d85181",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/options-resolver": "^6.4|^7.0",
+ "symfony/options-resolver": "^7.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/polyfill-mbstring": "~1.0",
@@ -5459,7 +5837,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/form/tree/v7.1.6"
+ "source": "https://github.com/symfony/form/tree/v7.3.10"
},
"funding": [
{
@@ -5470,25 +5848,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-09T08:46:59+00:00"
+ "time": "2026-01-23T10:44:29+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8"
+ "reference": "970f742064631d9d4f32e5488838781b28558515"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8",
- "reference": "1eae7a4e095a2a3851cb41ac2aea9aa60fba1df8",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/970f742064631d9d4f32e5488838781b28558515",
+ "reference": "970f742064631d9d4f32e5488838781b28558515",
"shasum": ""
},
"require": {
@@ -5496,22 +5878,22 @@
"ext-xml": "*",
"php": ">=8.2",
"symfony/cache": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
- "symfony/dependency-injection": "^7.1.5",
+ "symfony/config": "^7.3",
+ "symfony/dependency-injection": "^7.2",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.4|^7.0",
+ "symfony/error-handler": "^7.3",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/filesystem": "^7.1",
"symfony/finder": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/http-foundation": "^7.3",
+ "symfony/http-kernel": "^7.2",
"symfony/polyfill-mbstring": "~1.0",
"symfony/routing": "^6.4|^7.0"
},
"conflict": {
"doctrine/persistence": "<1.3",
- "phpdocumentor/reflection-docblock": "<3.2.2",
- "phpdocumentor/type-resolver": "<1.4.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=6",
+ "phpdocumentor/type-resolver": "<1.5.1",
"symfony/asset": "<6.4",
"symfony/asset-mapper": "<6.4",
"symfony/clock": "<6.4",
@@ -5520,29 +5902,32 @@
"symfony/dotenv": "<6.4",
"symfony/form": "<6.4",
"symfony/http-client": "<6.4",
+ "symfony/json-streamer": ">=7.4",
"symfony/lock": "<6.4",
"symfony/mailer": "<6.4",
"symfony/messenger": "<6.4",
"symfony/mime": "<6.4",
+ "symfony/object-mapper": ">=7.4",
"symfony/property-access": "<6.4",
"symfony/property-info": "<6.4",
"symfony/runtime": "<6.4.13|>=7.0,<7.1.6",
"symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
"symfony/security-core": "<6.4",
- "symfony/security-csrf": "<6.4",
- "symfony/serializer": "<6.4",
+ "symfony/security-csrf": "<7.2",
+ "symfony/serializer": "<7.2.5",
"symfony/stopwatch": "<6.4",
- "symfony/translation": "<6.4",
+ "symfony/translation": "<7.3",
"symfony/twig-bridge": "<6.4",
"symfony/twig-bundle": "<6.4",
"symfony/validator": "<6.4",
"symfony/web-profiler-bundle": "<6.4",
- "symfony/workflow": "<6.4"
+ "symfony/webhook": "<7.2",
+ "symfony/workflow": "<7.3.0-beta2"
},
"require-dev": {
"doctrine/persistence": "^1.3|^2|^3",
"dragonmantank/cron-expression": "^3.1",
- "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2",
"seld/jsonlint": "^1.10",
"symfony/asset": "^6.4|^7.0",
"symfony/asset-mapper": "^6.4|^7.0",
@@ -5556,11 +5941,13 @@
"symfony/form": "^6.4|^7.0",
"symfony/html-sanitizer": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
+ "symfony/json-streamer": "7.3.*",
"symfony/lock": "^6.4|^7.0",
"symfony/mailer": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
"symfony/notifier": "^6.4|^7.0",
+ "symfony/object-mapper": "^v7.3.0-beta2",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/process": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
@@ -5568,18 +5955,19 @@
"symfony/scheduler": "^6.4.4|^7.0.4",
"symfony/security-bundle": "^6.4|^7.0",
"symfony/semaphore": "^6.4|^7.0",
- "symfony/serializer": "^6.4|^7.0",
+ "symfony/serializer": "^7.2.5",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
- "symfony/translation": "^6.4|^7.0",
+ "symfony/translation": "^7.3",
"symfony/twig-bundle": "^6.4|^7.0",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0",
- "symfony/workflow": "^6.4|^7.0",
+ "symfony/webhook": "^7.2",
+ "symfony/workflow": "^7.3",
"symfony/yaml": "^6.4|^7.0",
- "twig/twig": "^3.0.4"
+ "twig/twig": "^3.12"
},
"type": "symfony-bundle",
"autoload": {
@@ -5607,7 +5995,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/framework-bundle/tree/v7.1.11"
+ "source": "https://github.com/symfony/framework-bundle/tree/v7.3.11"
},
"funding": [
{
@@ -5618,25 +6006,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-29T07:13:42+00:00"
+ "time": "2026-01-27T08:34:37+00:00"
},
{
"name": "symfony/html-sanitizer",
- "version": "v7.1.11",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/html-sanitizer.git",
- "reference": "5d928d0dc7823d703282bded46ba80008ce40d81"
+ "reference": "3855e827adb1b675adcb98ad7f92681e293f2d77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/5d928d0dc7823d703282bded46ba80008ce40d81",
- "reference": "5d928d0dc7823d703282bded46ba80008ce40d81",
+ "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/3855e827adb1b675adcb98ad7f92681e293f2d77",
+ "reference": "3855e827adb1b675adcb98ad7f92681e293f2d77",
"shasum": ""
},
"require": {
@@ -5676,7 +6068,7 @@
"sanitizer"
],
"support": {
- "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.11"
+ "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.6"
},
"funding": [
{
@@ -5687,25 +6079,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2025-10-30T13:22:58+00:00"
},
{
"name": "symfony/http-client",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "71632c1f13b36cb4c23ccdd255946dc02753afef"
+ "reference": "2793f0559b19b3d45f57fd7548eb65f197a82fbe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/71632c1f13b36cb4c23ccdd255946dc02753afef",
- "reference": "71632c1f13b36cb4c23ccdd255946dc02753afef",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/2793f0559b19b3d45f57fd7548eb65f197a82fbe",
+ "reference": "2793f0559b19b3d45f57fd7548eb65f197a82fbe",
"shasum": ""
},
"require": {
@@ -5713,9 +6109,12 @@
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-client-contracts": "~3.4.4|^3.5.2",
+ "symfony/polyfill-php83": "^1.29",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
+ "amphp/amp": "<2.5",
+ "amphp/socket": "<1.1",
"php-http/discovery": "<1.15",
"symfony/http-foundation": "<6.4"
},
@@ -5726,14 +6125,13 @@
"symfony/http-client-implementation": "3.0"
},
"require-dev": {
- "amphp/amp": "^2.5",
- "amphp/http-client": "^4.2.1",
- "amphp/http-tunnel": "^1.0",
- "amphp/socket": "^1.1",
+ "amphp/http-client": "^4.2.1|^5.0",
+ "amphp/http-tunnel": "^1.0|^2.0",
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"psr/http-client": "^1.0",
+ "symfony/amphp-http-client-meta": "^1.0|^2.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/messenger": "^6.4|^7.0",
@@ -5770,7 +6168,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v7.1.11"
+ "source": "https://github.com/symfony/http-client/tree/v7.3.11"
},
"funding": [
{
@@ -5781,12 +6179,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-28T15:50:57+00:00"
+ "time": "2026-01-27T16:12:03+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -5868,20 +6270,21 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "7ced01aa123612666a7a4fb72c627f969c01fa8d"
+ "reference": "5347db9d709bb003722abfdc03990f3f21c53db5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7ced01aa123612666a7a4fb72c627f969c01fa8d",
- "reference": "7ced01aa123612666a7a4fb72c627f969c01fa8d",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5347db9d709bb003722abfdc03990f3f21c53db5",
+ "reference": "5347db9d709bb003722abfdc03990f3f21c53db5",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-mbstring": "~1.1",
"symfony/polyfill-php83": "^1.27"
},
@@ -5893,6 +6296,7 @@
"doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"symfony/cache": "^6.4.12|^7.1.5",
+ "symfony/clock": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
@@ -5925,7 +6329,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.1.11"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.3.11"
},
"funding": [
{
@@ -5936,25 +6340,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T10:33:21+00:00"
+ "time": "2026-01-27T16:12:03+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "576eb3368037dd139f67b8ac71db56c3f69f7d66"
+ "reference": "c3b0782ca5b4a368a5fc71a46883be922df1bb39"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/576eb3368037dd139f67b8ac71db56c3f69f7d66",
- "reference": "576eb3368037dd139f67b8ac71db56c3f69f7d66",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c3b0782ca5b4a368a5fc71a46883be922df1bb39",
+ "reference": "c3b0782ca5b4a368a5fc71a46883be922df1bb39",
"shasum": ""
},
"require": {
@@ -5962,8 +6370,8 @@
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/error-handler": "^6.4|^7.0",
- "symfony/event-dispatcher": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^7.3",
+ "symfony/http-foundation": "^7.3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -5983,7 +6391,7 @@
"symfony/twig-bridge": "<6.4",
"symfony/validator": "<6.4",
"symfony/var-dumper": "<6.4",
- "twig/twig": "<3.0.4"
+ "twig/twig": "<3.12"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
@@ -6011,7 +6419,7 @@
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
"symfony/var-exporter": "^6.4|^7.0",
- "twig/twig": "^3.0.4"
+ "twig/twig": "^3.12"
},
"type": "library",
"autoload": {
@@ -6039,7 +6447,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.1.11"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.3.11"
},
"funding": [
{
@@ -6050,25 +6458,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-29T07:34:05+00:00"
+ "time": "2026-01-28T10:19:12+00:00"
},
{
"name": "symfony/intl",
- "version": "v7.1.8",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "e56b243fc0afa5a12bd11dace4002ada5a7d99f8"
+ "reference": "f5b5b91176221de5d394a15d4ecb236908a756fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/e56b243fc0afa5a12bd11dace4002ada5a7d99f8",
- "reference": "e56b243fc0afa5a12bd11dace4002ada5a7d99f8",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/f5b5b91176221de5d394a15d4ecb236908a756fe",
+ "reference": "f5b5b91176221de5d394a15d4ecb236908a756fe",
"shasum": ""
},
"require": {
@@ -6125,7 +6537,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v7.1.8"
+ "source": "https://github.com/symfony/intl/tree/v7.3.10"
},
"funding": [
{
@@ -6136,25 +6548,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-08T15:46:42+00:00"
+ "time": "2026-01-12T12:03:18+00:00"
},
{
"name": "symfony/monolog-bridge",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
- "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e"
+ "reference": "8e57eb82ea914604af3fae0df346123f6d1898c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/e1da878cf5f701df5f5c1799bdbf827acee5a76e",
- "reference": "e1da878cf5f701df5f5c1799bdbf827acee5a76e",
+ "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/8e57eb82ea914604af3fae0df346123f6d1898c8",
+ "reference": "8e57eb82ea914604af3fae0df346123f6d1898c8",
"shasum": ""
},
"require": {
@@ -6203,7 +6619,7 @@
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/monolog-bridge/tree/v7.1.6"
+ "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.10"
},
"funding": [
{
@@ -6214,12 +6630,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-14T08:49:35+00:00"
+ "time": "2026-01-03T23:21:50+00:00"
},
{
"name": "symfony/monolog-bundle",
@@ -6303,16 +6723,16 @@
},
{
"name": "symfony/options-resolver",
- "version": "v7.1.9",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "0f4099f5306a92487d13b2a4589068c36a93c447"
+ "reference": "772dfbe01306d03f759d492f6796dd8c9260bb5c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0f4099f5306a92487d13b2a4589068c36a93c447",
- "reference": "0f4099f5306a92487d13b2a4589068c36a93c447",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/772dfbe01306d03f759d492f6796dd8c9260bb5c",
+ "reference": "772dfbe01306d03f759d492f6796dd8c9260bb5c",
"shasum": ""
},
"require": {
@@ -6350,7 +6770,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v7.1.9"
+ "source": "https://github.com/symfony/options-resolver/tree/v7.3.8"
},
"funding": [
{
@@ -6361,25 +6781,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-20T11:08:58+00:00"
+ "time": "2025-11-12T15:21:00+00:00"
},
{
"name": "symfony/password-hasher",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
- "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5"
+ "reference": "bfbe5a6490e9a911212c8060a22d22405684f6c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/password-hasher/zipball/2e618d1af51805e5a1fbda326d00b77c6c1037d5",
- "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5",
+ "url": "https://api.github.com/repos/symfony/password-hasher/zipball/bfbe5a6490e9a911212c8060a22d22405684f6c5",
+ "reference": "bfbe5a6490e9a911212c8060a22d22405684f6c5",
"shasum": ""
},
"require": {
@@ -6422,7 +6846,7 @@
"password"
],
"support": {
- "source": "https://github.com/symfony/password-hasher/tree/v7.1.6"
+ "source": "https://github.com/symfony/password-hasher/tree/v7.3.10"
},
"funding": [
{
@@ -6433,25 +6857,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2026-01-01T22:03:12+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.32.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e",
+ "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e",
"shasum": ""
},
"require": {
@@ -6500,7 +6928,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0"
},
"funding": [
{
@@ -6511,25 +6939,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-04-26T13:13:48+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
- "version": "v1.32.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
- "reference": "763d2a91fea5681509ca01acbc1c5e450d127811"
+ "reference": "3510b63d07376b04e57e27e82607d468bb134f78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811",
- "reference": "763d2a91fea5681509ca01acbc1c5e450d127811",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/3510b63d07376b04e57e27e82607d468bb134f78",
+ "reference": "3510b63d07376b04e57e27e82607d468bb134f78",
"shasum": ""
},
"require": {
@@ -6584,7 +7016,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.37.0"
},
"funding": [
{
@@ -6595,16 +7027,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-21T18:38:29+00:00"
+ "time": "2026-04-10T16:50:15+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.32.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -6665,7 +7101,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0"
},
"funding": [
{
@@ -6676,6 +7112,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6685,16 +7125,16 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.32.0",
+ "version": "v1.37.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": {
@@ -6746,7 +7186,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0"
},
"funding": [
{
@@ -6757,25 +7197,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-23T08:48:59+00:00"
+ "time": "2026-04-10T17:25:58+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.32.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+ "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149",
+ "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149",
"shasum": ""
},
"require": {
@@ -6822,7 +7266,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0"
},
"funding": [
{
@@ -6830,7 +7274,11 @@
"type": "custom"
},
{
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
@@ -6838,20 +7286,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-04-10T17:25:58+00:00"
},
{
"name": "symfony/polyfill-php84",
- "version": "v1.32.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "000df7860439609837bbe28670b0be15783b7fbf"
+ "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf",
- "reference": "000df7860439609837bbe28670b0be15783b7fbf",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06",
+ "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06",
"shasum": ""
},
"require": {
@@ -6898,7 +7346,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0"
},
"funding": [
{
@@ -6909,25 +7357,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-20T12:04:08+00:00"
+ "time": "2026-04-10T18:47:49+00:00"
},
{
"name": "symfony/process",
- "version": "v7.1.8",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892"
+ "reference": "81fe4ea2c3b8677fa2adfd8e48ba42374ede0e3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892",
- "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892",
+ "url": "https://api.github.com/repos/symfony/process/zipball/81fe4ea2c3b8677fa2adfd8e48ba42374ede0e3b",
+ "reference": "81fe4ea2c3b8677fa2adfd8e48ba42374ede0e3b",
"shasum": ""
},
"require": {
@@ -6959,7 +7411,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.1.8"
+ "source": "https://github.com/symfony/process/tree/v7.3.11"
},
"funding": [
{
@@ -6970,30 +7422,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-06T14:23:19+00:00"
+ "time": "2026-01-26T13:14:40+00:00"
},
{
"name": "symfony/property-access",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "83e46f0266186e76929257426ddaa151248781c6"
+ "reference": "23cd9b9b8146bd5fcd190e7ecf46c84d18588110"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/83e46f0266186e76929257426ddaa151248781c6",
- "reference": "83e46f0266186e76929257426ddaa151248781c6",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/23cd9b9b8146bd5fcd190e7ecf46c84d18588110",
+ "reference": "23cd9b9b8146bd5fcd190e7ecf46c84d18588110",
"shasum": ""
},
"require": {
"php": ">=8.2",
- "symfony/property-info": "^6.4|^7.0"
+ "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4"
},
"require-dev": {
"symfony/cache": "^6.4|^7.0"
@@ -7035,7 +7491,7 @@
"reflection"
],
"support": {
- "source": "https://github.com/symfony/property-access/tree/v7.1.11"
+ "source": "https://github.com/symfony/property-access/tree/v7.3.10"
},
"funding": [
{
@@ -7046,34 +7502,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-10T14:50:02+00:00"
+ "time": "2026-01-05T08:45:46+00:00"
},
{
"name": "symfony/property-info",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
- "reference": "df9002f8381cc074300dc2bf9726075e4bf00458"
+ "reference": "dbb6fdca4b222146c5d753011c9ce0a691298728"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/df9002f8381cc074300dc2bf9726075e4bf00458",
- "reference": "df9002f8381cc074300dc2bf9726075e4bf00458",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/dbb6fdca4b222146c5d753011c9ce0a691298728",
+ "reference": "dbb6fdca4b222146c5d753011c9ce0a691298728",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/string": "^6.4|^7.0",
- "symfony/type-info": "~7.1.9|^7.2.2"
+ "symfony/type-info": "~7.3.10|^7.4.4"
},
"conflict": {
- "phpdocumentor/reflection-docblock": "<5.2",
+ "phpdocumentor/reflection-docblock": "<5.2|>=6",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/cache": "<6.4",
"symfony/dependency-injection": "<6.4",
@@ -7120,7 +7581,7 @@
"validator"
],
"support": {
- "source": "https://github.com/symfony/property-info/tree/v7.1.11"
+ "source": "https://github.com/symfony/property-info/tree/v7.3.11"
},
"funding": [
{
@@ -7131,25 +7592,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-27T16:12:03+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "07f6463a8ff4377944222b69b126bd5495e9d44e"
+ "reference": "f66bf4fc34db04b15033d009b3b2f986f6970a67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/07f6463a8ff4377944222b69b126bd5495e9d44e",
- "reference": "07f6463a8ff4377944222b69b126bd5495e9d44e",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/f66bf4fc34db04b15033d009b3b2f986f6970a67",
+ "reference": "f66bf4fc34db04b15033d009b3b2f986f6970a67",
"shasum": ""
},
"require": {
@@ -7201,7 +7666,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.1.11"
+ "source": "https://github.com/symfony/routing/tree/v7.3.10"
},
"funding": [
{
@@ -7212,25 +7677,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T10:33:21+00:00"
+ "time": "2026-01-12T12:03:18+00:00"
},
{
"name": "symfony/runtime",
- "version": "v7.1.7",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
- "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba"
+ "reference": "9146981807ca9f0491dea6ccabe36a48e4b12cc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/runtime/zipball/9889783c17e8a68fa5e88c8e8a1a85e802558dba",
- "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba",
+ "url": "https://api.github.com/repos/symfony/runtime/zipball/9146981807ca9f0491dea6ccabe36a48e4b12cc0",
+ "reference": "9146981807ca9f0491dea6ccabe36a48e4b12cc0",
"shasum": ""
},
"require": {
@@ -7280,7 +7749,7 @@
"runtime"
],
"support": {
- "source": "https://github.com/symfony/runtime/tree/v7.1.7"
+ "source": "https://github.com/symfony/runtime/tree/v7.3.8"
},
"funding": [
{
@@ -7291,25 +7760,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-05T16:45:54+00:00"
+ "time": "2025-12-05T13:52:21+00:00"
},
{
"name": "symfony/security-bundle",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
- "reference": "4012dbc0884fc7cbf555615a5aaa16f7c0d3f222"
+ "reference": "03d6ba1eb048843b0b20a06eec69a681692cdd53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4012dbc0884fc7cbf555615a5aaa16f7c0d3f222",
- "reference": "4012dbc0884fc7cbf555615a5aaa16f7c0d3f222",
+ "url": "https://api.github.com/repos/symfony/security-bundle/zipball/03d6ba1eb048843b0b20a06eec69a681692cdd53",
+ "reference": "03d6ba1eb048843b0b20a06eec69a681692cdd53",
"shasum": ""
},
"require": {
@@ -7317,15 +7790,15 @@
"ext-xml": "*",
"php": ">=8.2",
"symfony/clock": "^6.4|^7.0",
- "symfony/config": "^6.4|^7.0",
+ "symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4.11|^7.1.4",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/password-hasher": "^6.4|^7.0",
- "symfony/security-core": "^6.4|^7.0",
+ "symfony/security-core": "^7.3",
"symfony/security-csrf": "^6.4|^7.0",
- "symfony/security-http": "^7.1",
+ "symfony/security-http": "^7.3",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -7357,7 +7830,7 @@
"symfony/twig-bundle": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/yaml": "^6.4|^7.0",
- "twig/twig": "^3.0.4",
+ "twig/twig": "^3.12",
"web-token/jwt-library": "^3.3.2|^4.0"
},
"type": "symfony-bundle",
@@ -7386,7 +7859,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-bundle/tree/v7.1.11"
+ "source": "https://github.com/symfony/security-bundle/tree/v7.3.10"
},
"funding": [
{
@@ -7397,29 +7870,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-31T17:57:35+00:00"
+ "time": "2026-01-10T13:54:35+00:00"
},
{
"name": "symfony/security-core",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
- "reference": "0931c6bb15b696e1a4da8405c255b3a8673dcb3c"
+ "reference": "993e1cc5ae5a40eb4e27e3097aa7f242da14f3ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-core/zipball/0931c6bb15b696e1a4da8405c255b3a8673dcb3c",
- "reference": "0931c6bb15b696e1a4da8405c255b3a8673dcb3c",
+ "url": "https://api.github.com/repos/symfony/security-core/zipball/993e1cc5ae5a40eb4e27e3097aa7f242da14f3ec",
+ "reference": "993e1cc5ae5a40eb4e27e3097aa7f242da14f3ec",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3"
@@ -7472,7 +7950,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-core/tree/v7.1.11"
+ "source": "https://github.com/symfony/security-core/tree/v7.3.10"
},
"funding": [
{
@@ -7483,25 +7961,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-14T09:00:21+00:00"
},
{
"name": "symfony/security-csrf",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
- "reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06"
+ "reference": "f885e97aa97d5f892e0fb1bf6788cdd0c6015a7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-csrf/zipball/23b460d3447fd61970e0ed5ec7a0301296a17f06",
- "reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06",
+ "url": "https://api.github.com/repos/symfony/security-csrf/zipball/f885e97aa97d5f892e0fb1bf6788cdd0c6015a7d",
+ "reference": "f885e97aa97d5f892e0fb1bf6788cdd0c6015a7d",
"shasum": ""
},
"require": {
@@ -7512,7 +7994,9 @@
"symfony/http-foundation": "<6.4"
},
"require-dev": {
- "symfony/http-foundation": "^6.4|^7.0"
+ "psr/log": "^1|^2|^3",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -7540,7 +8024,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-csrf/tree/v7.1.6"
+ "source": "https://github.com/symfony/security-csrf/tree/v7.3.10"
},
"funding": [
{
@@ -7551,25 +8035,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2026-01-14T09:00:21+00:00"
},
{
"name": "symfony/security-http",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
- "reference": "c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80"
+ "reference": "e38f5df17f2714505f17db2332371eb4047ab0ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-http/zipball/c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80",
- "reference": "c5ef4cb3bb013cf02c1d8459d1c51bc9f616cd80",
+ "url": "https://api.github.com/repos/symfony/security-http/zipball/e38f5df17f2714505f17db2332371eb4047ab0ae",
+ "reference": "e38f5df17f2714505f17db2332371eb4047ab0ae",
"shasum": ""
},
"require": {
@@ -7579,7 +8067,7 @@
"symfony/http-kernel": "^6.4|^7.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^6.4|^7.0",
- "symfony/security-core": "^6.4|^7.0",
+ "symfony/security-core": "^7.3",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -7628,7 +8116,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-http/tree/v7.1.11"
+ "source": "https://github.com/symfony/security-http/tree/v7.3.10"
},
"funding": [
{
@@ -7639,51 +8127,55 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-28T15:50:57+00:00"
+ "time": "2026-01-14T09:00:21+00:00"
},
{
"name": "symfony/serializer",
- "version": "v7.1.11",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
- "reference": "cb88edf0d4d63472c50b5f77bcb3227a103966e6"
+ "reference": "fbeb7f5ebdf2e938bc7cf726decfb64924e1b785"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/serializer/zipball/cb88edf0d4d63472c50b5f77bcb3227a103966e6",
- "reference": "cb88edf0d4d63472c50b5f77bcb3227a103966e6",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/fbeb7f5ebdf2e938bc7cf726decfb64924e1b785",
+ "reference": "fbeb7f5ebdf2e938bc7cf726decfb64924e1b785",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-ctype": "~1.8"
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php84": "^1.30"
},
"conflict": {
- "phpdocumentor/reflection-docblock": "<3.2.2",
- "phpdocumentor/type-resolver": "<1.4.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=6",
+ "phpdocumentor/type-resolver": "<1.5.1",
"symfony/dependency-injection": "<6.4",
"symfony/property-access": "<6.4",
"symfony/property-info": "<6.4",
- "symfony/type-info": "<7.1.5",
"symfony/uid": "<6.4",
"symfony/validator": "<6.4",
"symfony/yaml": "<6.4"
},
"require-dev": {
- "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2",
"phpstan/phpdoc-parser": "^1.0|^2.0",
"seld/jsonlint": "^1.10",
"symfony/cache": "^6.4|^7.0",
"symfony/config": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/dependency-injection": "^7.2",
"symfony/error-handler": "^6.4|^7.0",
"symfony/filesystem": "^6.4|^7.0",
"symfony/form": "^6.4|^7.0",
@@ -7694,7 +8186,7 @@
"symfony/property-access": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/type-info": "^7.1.5",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
@@ -7727,7 +8219,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/serializer/tree/v7.1.11"
+ "source": "https://github.com/symfony/serializer/tree/v7.3.11"
},
"funding": [
{
@@ -7738,25 +8230,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-29T07:13:42+00:00"
+ "time": "2026-01-27T08:34:37+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.6.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
@@ -7810,7 +8306,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -7821,41 +8317,45 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-25T09:37:31+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/stimulus-bundle",
- "version": "v2.28.1",
+ "version": "v2.35.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stimulus-bundle.git",
- "reference": "960868a682271e133a631ffb70c7e2ceb5031be6"
+ "reference": "05af0259f201dbbd15c103bea289989a4b483b5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/960868a682271e133a631ffb70c7e2ceb5031be6",
- "reference": "960868a682271e133a631ffb70c7e2ceb5031be6",
+ "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/05af0259f201dbbd15c103bea289989a4b483b5b",
+ "reference": "05af0259f201dbbd15c103bea289989a4b483b5b",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/config": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.0|^3.0",
- "symfony/finder": "^5.4|^6.0|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0|^8.0",
"twig/twig": "^2.15.3|^3.8"
},
"require-dev": {
- "symfony/asset-mapper": "^6.3|^7.0",
- "symfony/framework-bundle": "^5.4|^6.0|^7.0",
- "symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
- "symfony/twig-bundle": "^5.4|^6.0|^7.0",
+ "symfony/asset-mapper": "^6.3|^7.0|^8.0",
+ "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0",
"zenstruck/browser": "^1.4"
},
"type": "symfony-bundle",
@@ -7879,7 +8379,7 @@
"symfony-ux"
],
"support": {
- "source": "https://github.com/symfony/stimulus-bundle/tree/v2.28.1"
+ "source": "https://github.com/symfony/stimulus-bundle/tree/v2.35.0"
},
"funding": [
{
@@ -7890,25 +8390,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-07-28T19:36:26+00:00"
+ "time": "2026-03-22T22:21:50+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v7.1.6",
+ "version": "v7.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05"
+ "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05",
- "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
+ "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
"shasum": ""
},
"require": {
@@ -7941,7 +8445,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v7.1.6"
+ "source": "https://github.com/symfony/stopwatch/tree/v7.3.0"
},
"funding": [
{
@@ -7957,20 +8461,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-02-24T10:49:57+00:00"
},
{
"name": "symfony/string",
- "version": "v7.1.8",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281"
+ "reference": "0b1f55d79b9effb940d376799dba7cf6f2dee420"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281",
- "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281",
+ "url": "https://api.github.com/repos/symfony/string/zipball/0b1f55d79b9effb940d376799dba7cf6f2dee420",
+ "reference": "0b1f55d79b9effb940d376799dba7cf6f2dee420",
"shasum": ""
},
"require": {
@@ -7985,7 +8489,6 @@
},
"require-dev": {
"symfony/emoji": "^7.1",
- "symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
@@ -8028,7 +8531,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.1.8"
+ "source": "https://github.com/symfony/string/tree/v7.3.8"
},
"funding": [
{
@@ -8039,33 +8542,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-13T13:31:21+00:00"
+ "time": "2025-11-26T15:55:45+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f"
+ "reference": "3d2b54fe5a17110022204a1dee79ace0f375dd00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f",
- "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/3d2b54fe5a17110022204a1dee79ace0f375dd00",
+ "reference": "3d2b54fe5a17110022204a1dee79ace0f375dd00",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
},
"conflict": {
+ "nikic/php-parser": "<5.0",
"symfony/config": "<6.4",
"symfony/console": "<6.4",
"symfony/dependency-injection": "<6.4",
@@ -8079,7 +8588,7 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.18|^5.0",
+ "nikic/php-parser": "^5.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
@@ -8122,7 +8631,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.1.6"
+ "source": "https://github.com/symfony/translation/tree/v7.3.10"
},
"funding": [
{
@@ -8133,25 +8642,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-28T12:35:13+00:00"
+ "time": "2026-01-13T10:28:39+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v3.6.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d"
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
- "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
"shasum": ""
},
"require": {
@@ -8200,7 +8713,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -8211,37 +8724,42 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-27T08:32:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/twig-bridge",
- "version": "v7.1.10",
+ "version": "v7.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
- "reference": "c027c54611cd194273b924c8d24d9706695171ff"
+ "reference": "d89c920f73eb4aaab85f4572cf99ec3a5bed7539"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c027c54611cd194273b924c8d24d9706695171ff",
- "reference": "c027c54611cd194273b924c8d24d9706695171ff",
+ "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d89c920f73eb4aaab85f4572cf99ec3a5bed7539",
+ "reference": "d89c920f73eb4aaab85f4572cf99ec3a5bed7539",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/translation-contracts": "^2.5|^3",
- "twig/twig": "^3.9"
+ "twig/twig": "^3.21"
},
"conflict": {
- "phpdocumentor/reflection-docblock": "<3.2.2",
- "phpdocumentor/type-resolver": "<1.4.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=6",
+ "phpdocumentor/type-resolver": "<1.5.1",
"symfony/console": "<6.4",
- "symfony/form": "<6.4",
+ "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4",
"symfony/http-foundation": "<6.4",
"symfony/http-kernel": "<6.4",
"symfony/mime": "<6.4",
@@ -8252,7 +8770,7 @@
"require-dev": {
"egulias/email-validator": "^2.1.10|^3|^4",
"league/html-to-markdown": "^5.0",
- "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2",
"symfony/asset": "^6.4|^7.0",
"symfony/asset-mapper": "^6.4|^7.0",
"symfony/console": "^6.4|^7.0",
@@ -8260,9 +8778,9 @@
"symfony/emoji": "^7.1",
"symfony/expression-language": "^6.4|^7.0",
"symfony/finder": "^6.4|^7.0",
- "symfony/form": "^6.4|^7.0",
+ "symfony/form": "^6.4.32|~7.3.10|^7.4.4",
"symfony/html-sanitizer": "^6.4|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-foundation": "^7.3",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/mime": "^6.4|^7.0",
@@ -8276,12 +8794,13 @@
"symfony/serializer": "^6.4.3|^7.0.3",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
+ "symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0",
"symfony/workflow": "^6.4|^7.0",
"symfony/yaml": "^6.4|^7.0",
- "twig/cssinliner-extra": "^2.12|^3",
- "twig/inky-extra": "^2.12|^3",
- "twig/markdown-extra": "^2.12|^3"
+ "twig/cssinliner-extra": "^3",
+ "twig/inky-extra": "^3",
+ "twig/markdown-extra": "^3"
},
"type": "symfony-bridge",
"autoload": {
@@ -8309,7 +8828,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bridge/tree/v7.1.10"
+ "source": "https://github.com/symfony/twig-bridge/tree/v7.3.11"
},
"funding": [
{
@@ -8320,36 +8839,40 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-19T14:23:39+00:00"
+ "time": "2026-01-27T08:34:37+00:00"
},
{
"name": "symfony/twig-bundle",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
- "reference": "af902314a71fb412ae412094f7e1d7e49594507b"
+ "reference": "5dfe33abdd85e23e6297a03dc4afa67d0142ae9a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/af902314a71fb412ae412094f7e1d7e49594507b",
- "reference": "af902314a71fb412ae412094f7e1d7e49594507b",
+ "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/5dfe33abdd85e23e6297a03dc4afa67d0142ae9a",
+ "reference": "5dfe33abdd85e23e6297a03dc4afa67d0142ae9a",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"php": ">=8.2",
- "symfony/config": "^6.4|^7.0",
+ "symfony/config": "^7.3",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
- "symfony/twig-bridge": "^6.4|^7.0",
- "twig/twig": "^3.0.4"
+ "symfony/twig-bridge": "^7.3",
+ "twig/twig": "^3.12"
},
"conflict": {
"symfony/framework-bundle": "<6.4",
@@ -8393,7 +8916,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bundle/tree/v7.1.6"
+ "source": "https://github.com/symfony/twig-bundle/tree/v7.3.10"
},
"funding": [
{
@@ -8404,40 +8927,41 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2026-01-06T12:19:16+00:00"
},
{
"name": "symfony/type-info",
- "version": "v7.1.10",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/type-info.git",
- "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe"
+ "reference": "7fe70bebb370c48a034cee53d174db5dff081103"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/type-info/zipball/8f980bdd1d6a2834503afbfcf3f39de8133e48fe",
- "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe",
+ "url": "https://api.github.com/repos/symfony/type-info/zipball/7fe70bebb370c48a034cee53d174db5dff081103",
+ "reference": "7fe70bebb370c48a034cee53d174db5dff081103",
"shasum": ""
},
"require": {
"php": ">=8.2",
- "psr/container": "^1.1|^2.0"
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
- "phpstan/phpdoc-parser": "<1.0",
- "symfony/dependency-injection": "<6.4",
- "symfony/property-info": "<6.4"
+ "phpstan/phpdoc-parser": "<1.30"
},
"require-dev": {
- "phpstan/phpdoc-parser": "^1.0|^2.0",
- "symfony/dependency-injection": "^6.4|^7.0",
- "symfony/property-info": "^6.4|^7.0"
+ "phpstan/phpdoc-parser": "^1.30|^2.0"
},
"type": "library",
"autoload": {
@@ -8475,7 +8999,7 @@
"type"
],
"support": {
- "source": "https://github.com/symfony/type-info/tree/v7.1.10"
+ "source": "https://github.com/symfony/type-info/tree/v7.3.10"
},
"funding": [
{
@@ -8486,31 +9010,35 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-11T12:11:39+00:00"
+ "time": "2026-01-08T15:19:42+00:00"
},
{
"name": "symfony/ux-icons",
- "version": "v2.28.0",
+ "version": "v2.35.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-icons.git",
- "reference": "1b48034b46a38595d576a425976dac7b33d428b3"
+ "reference": "f413a434caeaab4b237d6970d424f125e2bc41cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-icons/zipball/1b48034b46a38595d576a425976dac7b33d428b3",
- "reference": "1b48034b46a38595d576a425976dac7b33d428b3",
+ "url": "https://api.github.com/repos/symfony/ux-icons/zipball/f413a434caeaab4b237d6970d424f125e2bc41cf",
+ "reference": "f413a434caeaab4b237d6970d424f125e2bc41cf",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "symfony/framework-bundle": "^6.4|^7.0",
- "symfony/twig-bundle": "^6.4|^7.0"
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/twig-bundle": "^6.4|^7.0|^8.0"
},
"conflict": {
"symfony/flex": "<1.13",
@@ -8518,11 +9046,11 @@
},
"require-dev": {
"psr/log": "^2|^3",
- "symfony/asset-mapper": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/http-client": "6.4|^7.0",
- "symfony/phpunit-bridge": "^6.3|^7.0",
- "symfony/ux-twig-component": "^2.14",
+ "symfony/asset-mapper": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^6.3|^7.0|^8.0",
+ "symfony/ux-twig-component": "^2.14|^3.0",
"zenstruck/console-test": "^1.5"
},
"type": "symfony-bundle",
@@ -8564,7 +9092,7 @@
"twig"
],
"support": {
- "source": "https://github.com/symfony/ux-icons/tree/v2.28.0"
+ "source": "https://github.com/symfony/ux-icons/tree/v2.35.0"
},
"funding": [
{
@@ -8575,59 +9103,65 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-07-25T06:20:58+00:00"
+ "time": "2026-04-03T05:13:59+00:00"
},
{
"name": "symfony/ux-live-component",
- "version": "v2.26.0",
+ "version": "v2.35.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-live-component.git",
- "reference": "fe860a47f164c4ead89b9cb5cf7d3a13835de0a3"
+ "reference": "6d8ee60793415ce57806f0618e575afe67dab8e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/fe860a47f164c4ead89b9cb5cf7d3a13835de0a3",
- "reference": "fe860a47f164c4ead89b9cb5cf7d3a13835de0a3",
+ "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/6d8ee60793415ce57806f0618e575afe67dab8e1",
+ "reference": "6d8ee60793415ce57806f0618e575afe67dab8e1",
"shasum": ""
},
"require": {
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/property-access": "^5.4.5|^6.0|^7.0",
- "symfony/property-info": "^5.4|^6.0|^7.0",
- "symfony/stimulus-bundle": "^2.9",
- "symfony/ux-twig-component": "^2.25.1",
+ "symfony/property-access": "^5.4.5|^6.0|^7.0|^8.0",
+ "symfony/property-info": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/stimulus-bundle": "^2.9|^3.0",
+ "symfony/ux-twig-component": "^2.33.0|^3.0",
"twig/twig": "^3.10.3"
},
"conflict": {
"symfony/config": "<5.4.0",
"symfony/property-info": "~7.0.0",
- "symfony/type-info": "<7.1"
+ "symfony/type-info": "<7.2"
},
"require-dev": {
- "doctrine/annotations": "^1.0",
+ "doctrine/annotations": "^1.0|^2.0",
"doctrine/collections": "^1.6.8|^2.0",
- "doctrine/doctrine-bundle": "^2.4.3",
- "doctrine/orm": "^2.9.4",
- "doctrine/persistence": "^2.5.2|^3.0",
- "phpdocumentor/reflection-docblock": "5.x-dev",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/expression-language": "^5.4|^6.0|^7.0",
- "symfony/form": "^5.4|^6.0|^7.0",
- "symfony/framework-bundle": "^5.4|^6.0|^7.0",
- "symfony/options-resolver": "^5.4|^6.0|^7.0",
- "symfony/phpunit-bridge": "^6.1|^7.0",
- "symfony/security-bundle": "^5.4|^6.0|^7.0",
- "symfony/serializer": "^5.4|^6.0|^7.0",
- "symfony/twig-bundle": "^5.4|^6.0|^7.0",
- "symfony/uid": "^5.4|^6.0|^7.0",
- "symfony/validator": "^5.4|^6.0|^7.0",
+ "doctrine/doctrine-bundle": "^2.4.3|^3.0|^4.0",
+ "doctrine/orm": "^2.9.4|^3.0",
+ "doctrine/persistence": "^2.5.2|^3.0|^4.0",
+ "phpdocumentor/reflection-docblock": "^5.6.2",
+ "symfony/config": "^6.3|^7.0|^8.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/form": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/framework-bundle": "^5.4|^6.1|^7.0|^8.0",
+ "symfony/http-kernel": "^6.1|^7.0|^8.0",
+ "symfony/options-resolver": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^6.1|^7.0|^8.0",
+ "symfony/security-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/serializer": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/uid": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/validator": "^5.4|^6.0|^7.0|^8.0",
"zenstruck/browser": "^1.2.0",
"zenstruck/foundry": "^2.0"
},
@@ -8661,7 +9195,7 @@
"twig"
],
"support": {
- "source": "https://github.com/symfony/ux-live-component/tree/v2.26.0"
+ "source": "https://github.com/symfony/ux-live-component/tree/v2.35.0"
},
"funding": [
{
@@ -8672,47 +9206,53 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-31T15:09:39+00:00"
+ "time": "2026-04-04T16:24:09+00:00"
},
{
"name": "symfony/ux-twig-component",
- "version": "v2.28.0",
+ "version": "v2.35.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-twig-component.git",
- "reference": "8b10610f7976aee34c40b51fed2244555ce9ead0"
+ "reference": "d64b068d8339e905cd48974bdd6e9ba54dc8f247"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/8b10610f7976aee34c40b51fed2244555ce9ead0",
- "reference": "8b10610f7976aee34c40b51fed2244555ce9ead0",
+ "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/d64b068d8339e905cd48974bdd6e9ba54dc8f247",
+ "reference": "d64b068d8339e905cd48974bdd6e9ba54dc8f247",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.2|^3.0",
- "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
- "symfony/property-access": "^5.4|^6.0|^7.0",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/property-access": "^5.4|^6.0|^7.0|^8.0",
"twig/twig": "^3.10.3"
},
"conflict": {
"symfony/config": "<5.4.0"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/css-selector": "^5.4|^6.0|^7.0",
- "symfony/dom-crawler": "^5.4|^6.0|^7.0",
- "symfony/framework-bundle": "^5.4|^6.0|^7.0",
- "symfony/phpunit-bridge": "^6.0|^7.0",
- "symfony/stimulus-bundle": "^2.9.1",
- "symfony/twig-bundle": "^5.4|^6.0|^7.0",
- "symfony/webpack-encore-bundle": "^1.15"
+ "symfony/console": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/css-selector": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/dom-crawler": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^6.0|^7.0|^8.0",
+ "symfony/stimulus-bundle": "^2.9.1|^3.0",
+ "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/webpack-encore-bundle": "^1.15|^2.3.0",
+ "twig/extra-bundle": "^3.10.3",
+ "twig/html-extra": "^3.10.3"
},
"type": "symfony-bundle",
"extra": {
@@ -8744,7 +9284,7 @@
"twig"
],
"support": {
- "source": "https://github.com/symfony/ux-twig-component/tree/v2.28.0"
+ "source": "https://github.com/symfony/ux-twig-component/tree/v2.35.0"
},
"funding": [
{
@@ -8755,41 +9295,45 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T09:05:08+00:00"
+ "time": "2026-04-03T05:13:59+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "a563c5aeacb98cd46f9885a63cf241ea7794b307"
+ "reference": "3649e629f954658188eb1a83b616fb5a2e5688fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a563c5aeacb98cd46f9885a63cf241ea7794b307",
- "reference": "a563c5aeacb98cd46f9885a63cf241ea7794b307",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3649e629f954658188eb1a83b616fb5a2e5688fe",
+ "reference": "3649e629f954658188eb1a83b616fb5a2e5688fe",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"symfony/console": "<6.4"
},
"require-dev": {
- "ext-iconv": "*",
"symfony/console": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
"symfony/uid": "^6.4|^7.0",
- "twig/twig": "^3.0.4"
+ "twig/twig": "^3.12"
},
"bin": [
"Resources/bin/var-dump-server"
@@ -8827,7 +9371,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.1.11"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.3.10"
},
"funding": [
{
@@ -8838,29 +9382,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-17T11:38:41+00:00"
+ "time": "2026-01-01T22:03:12+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v7.1.6",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "90173ef89c40e7c8c616653241048705f84130ef"
+ "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef",
- "reference": "90173ef89c40e7c8c616653241048705f84130ef",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4",
+ "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/property-access": "^6.4|^7.0",
@@ -8903,7 +9452,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v7.1.6"
+ "source": "https://github.com/symfony/var-exporter/tree/v7.3.4"
},
"funding": [
{
@@ -8914,35 +9463,41 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/workflow",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/workflow.git",
- "reference": "b5dca7ecc55ec401939cd101d1a23d64bbce113b"
+ "reference": "69c12e250a246dc79a767beb672706ca7637c99b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/workflow/zipball/b5dca7ecc55ec401939cd101d1a23d64bbce113b",
- "reference": "b5dca7ecc55ec401939cd101d1a23d64bbce113b",
+ "url": "https://api.github.com/repos/symfony/workflow/zipball/69c12e250a246dc79a767beb672706ca7637c99b",
+ "reference": "69c12e250a246dc79a767beb672706ca7637c99b",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "2.5|^3"
},
"conflict": {
"symfony/event-dispatcher": "<6.4"
},
"require-dev": {
"psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/error-handler": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
@@ -8990,7 +9545,7 @@
"workflow"
],
"support": {
- "source": "https://github.com/symfony/workflow/tree/v7.1.6"
+ "source": "https://github.com/symfony/workflow/tree/v7.3.10"
},
"funding": [
{
@@ -9001,29 +9556,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2026-01-05T11:42:02+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.1.11",
+ "version": "v7.3.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "4921b8c1db90c13ba2ee0520080ef6800912b018"
+ "reference": "8892cb1e9925201328e19f83825bf3d2ff6c659a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/4921b8c1db90c13ba2ee0520080ef6800912b018",
- "reference": "4921b8c1db90c13ba2ee0520080ef6800912b018",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/8892cb1e9925201328e19f83825bf3d2ff6c659a",
+ "reference": "8892cb1e9925201328e19f83825bf3d2ff6c659a",
"shasum": ""
},
"require": {
"php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -9061,7 +9621,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.1.11"
+ "source": "https://github.com/symfony/yaml/tree/v7.3.8"
},
"funding": [
{
@@ -9072,35 +9632,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-07T12:50:05+00:00"
+ "time": "2025-12-04T18:07:52+00:00"
},
{
"name": "twig/extra-bundle",
- "version": "v3.21.0",
+ "version": "v3.24.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
- "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896"
+ "reference": "6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/62d1cf47a1aa009cbd07b21045b97d3d5cb79896",
- "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896",
+ "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9",
+ "reference": "6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9",
"shasum": ""
},
"require": {
"php": ">=8.1.0",
- "symfony/framework-bundle": "^5.4|^6.4|^7.0",
- "symfony/twig-bundle": "^5.4|^6.4|^7.0",
+ "symfony/framework-bundle": "^5.4|^6.4|^7.0|^8.0",
+ "symfony/twig-bundle": "^5.4|^6.4|^7.0|^8.0",
"twig/twig": "^3.2|^4.0"
},
"require-dev": {
- "league/commonmark": "^1.0|^2.0",
+ "league/commonmark": "^2.7",
"symfony/phpunit-bridge": "^6.4|^7.0",
"twig/cache-extra": "^3.0",
"twig/cssinliner-extra": "^3.0",
@@ -9139,7 +9703,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.21.0"
+ "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.24.0"
},
"funding": [
{
@@ -9151,20 +9715,20 @@
"type": "tidelift"
}
],
- "time": "2025-02-19T14:29:33+00:00"
+ "time": "2026-02-07T08:07:38+00:00"
},
{
"name": "twig/markdown-extra",
- "version": "v3.21.0",
+ "version": "v3.24.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/markdown-extra.git",
- "reference": "f4616e1dd375209dacf6026f846e6b537d036ce4"
+ "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/f4616e1dd375209dacf6026f846e6b537d036ce4",
- "reference": "f4616e1dd375209dacf6026f846e6b537d036ce4",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/67a11120356e034a5bbc70c5b9b9a4d0f31ca06e",
+ "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e",
"shasum": ""
},
"require": {
@@ -9174,7 +9738,7 @@
},
"require-dev": {
"erusev/parsedown": "dev-master as 1.x-dev",
- "league/commonmark": "^1.0|^2.0",
+ "league/commonmark": "^2.7",
"league/html-to-markdown": "^4.8|^5.0",
"michelf/php-markdown": "^1.8|^2.0",
"symfony/phpunit-bridge": "^6.4|^7.0"
@@ -9211,7 +9775,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/markdown-extra/tree/v3.21.0"
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.24.0"
},
"funding": [
{
@@ -9223,25 +9787,25 @@
"type": "tidelift"
}
],
- "time": "2025-01-31T20:45:36+00:00"
+ "time": "2026-02-07T08:07:38+00:00"
},
{
"name": "twig/string-extra",
- "version": "v3.21.0",
+ "version": "v3.24.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/string-extra.git",
- "reference": "4b3337544ac8f76c280def94e32b53acfaec0589"
+ "reference": "6ec8f2e8ca9b2193221a02cb599dc92c36384368"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589",
- "reference": "4b3337544ac8f76c280def94e32b53acfaec0589",
+ "url": "https://api.github.com/repos/twigphp/string-extra/zipball/6ec8f2e8ca9b2193221a02cb599dc92c36384368",
+ "reference": "6ec8f2e8ca9b2193221a02cb599dc92c36384368",
"shasum": ""
},
"require": {
"php": ">=8.1.0",
- "symfony/string": "^5.4|^6.4|^7.0",
+ "symfony/string": "^5.4|^6.4|^7.0|^8.0",
"symfony/translation-contracts": "^1.1|^2|^3",
"twig/twig": "^3.13|^4.0"
},
@@ -9278,7 +9842,7 @@
"unicode"
],
"support": {
- "source": "https://github.com/twigphp/string-extra/tree/v3.21.0"
+ "source": "https://github.com/twigphp/string-extra/tree/v3.24.0"
},
"funding": [
{
@@ -9290,20 +9854,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-31T20:45:36+00:00"
+ "time": "2025-12-02T14:45:16+00:00"
},
{
"name": "twig/twig",
- "version": "v3.21.1",
+ "version": "v3.24.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d"
+ "reference": "a6769aefb305efef849dc25c9fd1653358c148f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d",
- "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0",
+ "reference": "a6769aefb305efef849dc25c9fd1653358c148f0",
"shasum": ""
},
"require": {
@@ -9313,7 +9877,8 @@
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
- "phpstan/phpstan": "^2.0",
+ "php-cs-fixer/shim": "^3.0@stable",
+ "phpstan/phpstan": "^2.0@stable",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
@@ -9357,7 +9922,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.21.1"
+ "source": "https://github.com/twigphp/Twig/tree/v3.24.0"
},
"funding": [
{
@@ -9369,37 +9934,37 @@
"type": "tidelift"
}
],
- "time": "2025-05-03T07:21:55+00:00"
+ "time": "2026-03-17T21:31:11+00:00"
},
{
"name": "webmozart/assert",
- "version": "1.11.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4",
+ "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4",
"shasum": ""
},
"require": {
"ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
+ "ext-date": "*",
+ "ext-filter": "*",
+ "php": "^8.2"
},
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
+ "suggest": {
+ "ext-intl": "",
+ "ext-simplexml": "",
+ "ext-spl": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-feature/2-0": "2.0-dev"
}
},
"autoload": {
@@ -9415,6 +9980,10 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
@@ -9425,24 +9994,24 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ "source": "https://github.com/webmozarts/assert/tree/2.3.0"
},
- "time": "2022-06-03T18:03:27+00:00"
+ "time": "2026-04-11T10:33:05+00:00"
}
],
"packages-dev": [
{
"name": "myclabs/deep-copy",
- "version": "1.13.3",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "faed855a7b5f4d4637717c2b3863e277116beb36"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36",
- "reference": "faed855a7b5f4d4637717c2b3863e277116beb36",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -9481,7 +10050,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -9489,20 +10058,20 @@
"type": "tidelift"
}
],
- "time": "2025-07-05T12:25:42+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.6.0",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56",
- "reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
@@ -9521,7 +10090,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -9545,9 +10114,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2025-07-27T20:03:57+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "phar-io/manifest",
@@ -9988,16 +10557,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.6.23",
+ "version": "9.6.34",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95"
+ "reference": "b36f02317466907a230d3aa1d34467041271ef4a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
- "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a",
+ "reference": "b36f02317466907a230d3aa1d34467041271ef4a",
"shasum": ""
},
"require": {
@@ -10008,7 +10577,7 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=7.3",
@@ -10019,11 +10588,11 @@
"phpunit/php-timer": "^5.0.3",
"sebastian/cli-parser": "^1.0.2",
"sebastian/code-unit": "^1.0.8",
- "sebastian/comparator": "^4.0.8",
+ "sebastian/comparator": "^4.0.10",
"sebastian/diff": "^4.0.6",
"sebastian/environment": "^5.1.5",
- "sebastian/exporter": "^4.0.6",
- "sebastian/global-state": "^5.0.7",
+ "sebastian/exporter": "^4.0.8",
+ "sebastian/global-state": "^5.0.8",
"sebastian/object-enumerator": "^4.0.4",
"sebastian/resource-operations": "^3.0.4",
"sebastian/type": "^3.2.1",
@@ -10071,7 +10640,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.23"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34"
},
"funding": [
{
@@ -10095,7 +10664,7 @@
"type": "tidelift"
}
],
- "time": "2025-05-02T06:40:34+00:00"
+ "time": "2026-01-27T05:45:00+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -10266,16 +10835,16 @@
},
{
"name": "sebastian/comparator",
- "version": "4.0.8",
+ "version": "4.0.10",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d",
+ "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d",
"shasum": ""
},
"require": {
@@ -10328,15 +10897,27 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
}
],
- "time": "2022-09-14T12:41:17+00:00"
+ "time": "2026-01-24T09:22:56+00:00"
},
{
"name": "sebastian/complexity",
@@ -10526,16 +11107,16 @@
},
{
"name": "sebastian/exporter",
- "version": "4.0.6",
+ "version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+ "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c",
+ "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c",
"shasum": ""
},
"require": {
@@ -10591,28 +11172,40 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
}
],
- "time": "2024-03-02T06:33:00+00:00"
+ "time": "2025-09-24T06:03:27+00:00"
},
{
"name": "sebastian/global-state",
- "version": "5.0.7",
+ "version": "5.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+ "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6",
+ "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6",
"shasum": ""
},
"require": {
@@ -10655,15 +11248,27 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
+ "type": "tidelift"
}
],
- "time": "2024-03-02T06:35:11+00:00"
+ "time": "2025-08-10T07:10:35+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -10836,16 +11441,16 @@
},
{
"name": "sebastian/recursion-context",
- "version": "4.0.5",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ "reference": "539c6691e0623af6dc6f9c20384c120f963465a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0",
+ "reference": "539c6691e0623af6dc6f9c20384c120f963465a0",
"shasum": ""
},
"require": {
@@ -10887,15 +11492,27 @@
"homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T06:07:39+00:00"
+ "time": "2025-08-10T06:57:39+00:00"
},
{
"name": "sebastian/resource-operations",
@@ -11062,16 +11679,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v7.1.6",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf"
+ "reference": "a1e115df7c86200f210814867a61694e6d304256"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/714becc9ba9b20115ffededc58f6b7172dc394cf",
- "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a1e115df7c86200f210814867a61694e6d304256",
+ "reference": "a1e115df7c86200f210814867a61694e6d304256",
"shasum": ""
},
"require": {
@@ -11110,7 +11727,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/browser-kit/tree/v7.1.6"
+ "source": "https://github.com/symfony/browser-kit/tree/v7.3.10"
},
"funding": [
{
@@ -11121,25 +11738,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:11:02+00:00"
+ "time": "2026-01-13T10:28:39+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.1.6",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66"
+ "reference": "84321188c4754e64273b46b406081ad9b18e8614"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66",
- "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/84321188c4754e64273b46b406081ad9b18e8614",
+ "reference": "84321188c4754e64273b46b406081ad9b18e8614",
"shasum": ""
},
"require": {
@@ -11175,7 +11796,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.1.6"
+ "source": "https://github.com/symfony/css-selector/tree/v7.3.6"
},
"funding": [
{
@@ -11186,25 +11807,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:20:29+00:00"
+ "time": "2025-10-29T17:24:25+00:00"
},
{
"name": "symfony/dom-crawler",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a"
+ "reference": "8d9b47c994701cd50d3507062501c1ac2b428aaf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a",
- "reference": "7361d8f7e7eecbca17efe68ca1ee677bf23cfe5a",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8d9b47c994701cd50d3507062501c1ac2b428aaf",
+ "reference": "8d9b47c994701cd50d3507062501c1ac2b428aaf",
"shasum": ""
},
"require": {
@@ -11242,7 +11867,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v7.1.11"
+ "source": "https://github.com/symfony/dom-crawler/tree/v7.3.10"
},
"funding": [
{
@@ -11253,40 +11878,45 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-27T10:57:12+00:00"
+ "time": "2026-01-05T08:45:46+00:00"
},
{
"name": "symfony/maker-bundle",
- "version": "v1.64.0",
+ "version": "v1.67.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
- "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a"
+ "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c86da84640b0586e92aee2b276ee3638ef2f425a",
- "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a",
+ "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/6ce8b313845f16bcf385ee3cb31d8b24e30d5516",
+ "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516",
"shasum": ""
},
"require": {
+ "composer-runtime-api": "^2.1",
"doctrine/inflector": "^2.0",
"nikic/php-parser": "^5.0",
"php": ">=8.1",
- "symfony/config": "^6.4|^7.0",
- "symfony/console": "^6.4|^7.0",
- "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.2|^3",
- "symfony/filesystem": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
- "symfony/framework-bundle": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/process": "^6.4|^7.0"
+ "symfony/filesystem": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0"
},
"conflict": {
"doctrine/doctrine-bundle": "<2.10",
@@ -11294,13 +11924,14 @@
},
"require-dev": {
"composer/semver": "^3.0",
- "doctrine/doctrine-bundle": "^2.5.0",
+ "doctrine/doctrine-bundle": "^2.10|^3.0",
"doctrine/orm": "^2.15|^3",
- "symfony/http-client": "^6.4|^7.0",
- "symfony/phpunit-bridge": "^6.4.1|^7.0",
- "symfony/security-core": "^6.4|^7.0",
- "symfony/security-http": "^6.4|^7.0",
- "symfony/yaml": "^6.4|^7.0",
+ "doctrine/persistence": "^3.1|^4.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^6.4.1|^7.0|^8.0",
+ "symfony/security-core": "^6.4|^7.0|^8.0",
+ "symfony/security-http": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0",
"twig/twig": "^3.0|^4.x-dev"
},
"type": "symfony-bundle",
@@ -11335,7 +11966,7 @@
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
- "source": "https://github.com/symfony/maker-bundle/tree/v1.64.0"
+ "source": "https://github.com/symfony/maker-bundle/tree/v1.67.0"
},
"funding": [
{
@@ -11346,37 +11977,37 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-23T16:12:08+00:00"
+ "time": "2026-03-18T13:39:06+00:00"
},
{
"name": "symfony/phpunit-bridge",
- "version": "v7.3.1",
+ "version": "v7.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
- "reference": "71624984d8bcad6acf7a790d4e3ceafe04bc2485"
+ "reference": "140bbbe1cd1c21a084494ccddeee33f3c3381d7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/71624984d8bcad6acf7a790d4e3ceafe04bc2485",
- "reference": "71624984d8bcad6acf7a790d4e3ceafe04bc2485",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/140bbbe1cd1c21a084494ccddeee33f3c3381d7d",
+ "reference": "140bbbe1cd1c21a084494ccddeee33f3c3381d7d",
"shasum": ""
},
"require": {
- "php": ">=7.2.5"
- },
- "conflict": {
- "phpunit/phpunit": "<7.5|9.1.2"
+ "php": ">=8.1.0"
},
"require-dev": {
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/error-handler": "^5.4|^6.4|^7.0",
- "symfony/polyfill-php81": "^1.27"
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/error-handler": "^6.4.3|^7.0.3|^8.0"
},
"bin": [
"bin/simple-phpunit"
@@ -11420,7 +12051,7 @@
"testing"
],
"support": {
- "source": "https://github.com/symfony/phpunit-bridge/tree/v7.3.1"
+ "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.8"
},
"funding": [
{
@@ -11431,40 +12062,48 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-04T10:09:06+00:00"
+ "time": "2026-03-24T13:12:05+00:00"
},
{
"name": "symfony/web-profiler-bundle",
- "version": "v7.1.11",
+ "version": "v7.3.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
- "reference": "328b2728bb5d85d0d38b18d1458834098202afe2"
+ "reference": "3f288c176f4b70d083c1b37a0b9aa0c4745b2ef3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/328b2728bb5d85d0d38b18d1458834098202afe2",
- "reference": "328b2728bb5d85d0d38b18d1458834098202afe2",
+ "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3f288c176f4b70d083c1b37a0b9aa0c4745b2ef3",
+ "reference": "3f288c176f4b70d083c1b37a0b9aa0c4745b2ef3",
"shasum": ""
},
"require": {
+ "composer-runtime-api": ">=2.1",
"php": ">=8.2",
- "symfony/config": "^6.4|^7.0",
+ "symfony/config": "^7.3",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/framework-bundle": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/routing": "^6.4|^7.0",
"symfony/twig-bundle": "^6.4|^7.0",
- "twig/twig": "^3.10"
+ "twig/twig": "^3.12"
},
"conflict": {
"symfony/form": "<6.4",
"symfony/mailer": "<6.4",
- "symfony/messenger": "<6.4"
+ "symfony/messenger": "<6.4",
+ "symfony/serializer": "<7.2",
+ "symfony/workflow": "<7.3"
},
"require-dev": {
"symfony/browser-kit": "^6.4|^7.0",
@@ -11501,7 +12140,7 @@
"dev"
],
"support": {
- "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.11"
+ "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.10"
},
"funding": [
{
@@ -11512,25 +12151,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-01-07T09:23:14+00:00"
+ "time": "2026-01-07T10:03:30+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
"shasum": ""
},
"require": {
@@ -11559,7 +12202,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
},
"funding": [
{
@@ -11567,20 +12210,20 @@
"type": "github"
}
],
- "time": "2024-03-03T12:36:25+00:00"
+ "time": "2025-11-17T20:03:58+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {},
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": ">=8.3.13",
+ "php": "^8.3",
"ext-ctype": "*",
"ext-iconv": "*",
"ext-openssl": "*"
},
- "platform-dev": {},
- "plugin-api-version": "2.9.0"
+ "platform-dev": [],
+ "plugin-api-version": "2.6.0"
}
diff --git a/config/packages/csrf.yaml b/config/packages/csrf.yaml
new file mode 100644
index 0000000..40d4040
--- /dev/null
+++ b/config/packages/csrf.yaml
@@ -0,0 +1,11 @@
+# Enable stateless CSRF protection for forms and logins/logouts
+framework:
+ form:
+ csrf_protection:
+ token_id: submit
+
+ csrf_protection:
+ stateless_token_ids:
+ - submit
+ - authenticate
+ - logout
diff --git a/config/packages/nyholm_psr7.yaml b/config/packages/nyholm_psr7.yaml
new file mode 100644
index 0000000..ade8312
--- /dev/null
+++ b/config/packages/nyholm_psr7.yaml
@@ -0,0 +1,11 @@
+services:
+ # Register nyholm/psr7 services for autowiring with PSR-17 (HTTP factories)
+ Psr\Http\Message\RequestFactoryInterface: '@nyholm.psr7.psr17_factory'
+ Psr\Http\Message\ResponseFactoryInterface: '@nyholm.psr7.psr17_factory'
+ Psr\Http\Message\ServerRequestFactoryInterface: '@nyholm.psr7.psr17_factory'
+ Psr\Http\Message\StreamFactoryInterface: '@nyholm.psr7.psr17_factory'
+ Psr\Http\Message\UploadedFileFactoryInterface: '@nyholm.psr7.psr17_factory'
+ Psr\Http\Message\UriFactoryInterface: '@nyholm.psr7.psr17_factory'
+
+ nyholm.psr7.psr17_factory:
+ class: Nyholm\Psr7\Factory\Psr17Factory
diff --git a/config/packages/property_info.yaml b/config/packages/property_info.yaml
new file mode 100644
index 0000000..dd31b9d
--- /dev/null
+++ b/config/packages/property_info.yaml
@@ -0,0 +1,3 @@
+framework:
+ property_info:
+ with_constructor_extractor: true
diff --git a/config/services.yaml b/config/services.yaml
index 99cf22d..e675b3d 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -12,6 +12,9 @@ parameters:
env(TRUSTED_PROXIES): '127.0.0.0/8,::1'
services:
+ App\Service\HighlightAuthorMetadataProvider:
+ alias: App\Service\CacheService
+
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
@@ -62,3 +65,9 @@ services:
App\Service\Nip05VerificationService:
arguments:
$appCache: '@cache.app'
+
+when@test:
+ services:
+ Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
+ class: Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler
+ arguments: ['%kernel.project_dir%/var/sessions_test']
diff --git a/src/Security/NostrAuthenticator.php b/src/Security/NostrAuthenticator.php
index 795a72f..3088b45 100644
--- a/src/Security/NostrAuthenticator.php
+++ b/src/Security/NostrAuthenticator.php
@@ -2,8 +2,8 @@
namespace App\Security;
-use App\Entity\Event;
use Mdanter\Ecc\Crypto\Signature\SchnorrSignature;
+use swentel\nostr\Event\Event;
use swentel\nostr\Key\Key;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@@ -13,9 +13,6 @@ use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
use Symfony\Component\Security\Http\Authenticator\InteractiveAuthenticatorInterface;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
-use Symfony\Component\Serializer\Encoder\JsonEncoder;
-use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
-use Symfony\Component\Serializer\Serializer;
/**
* Authenticator for Nostr protocol-based authentication.
@@ -57,15 +54,31 @@ class NostrAuthenticator extends AbstractAuthenticator implements InteractiveAut
}
$eventStr = base64_decode(substr($authHeader, 6), true);
- $encoders = [new JsonEncoder()];
- $normalizers = [new ObjectNormalizer()];
- $serializer = new Serializer($normalizers, $encoders);
- /** @var Event $event */
- $event = $serializer->deserialize($eventStr, Event::class, 'json');
+ if (false === $eventStr) {
+ throw new AuthenticationException('Invalid Authorization header');
+ }
+ try {
+ $data = json_decode($eventStr, false, 512, \JSON_THROW_ON_ERROR);
+ } catch (\JsonException) {
+ throw new AuthenticationException('Invalid Authorization header');
+ }
+ if (!\is_object($data) || !isset(
+ $data->id, $data->pubkey, $data->created_at, $data->kind, $data->content, $data->sig
+ )) {
+ throw new AuthenticationException('Invalid Authorization header');
+ }
+ if (!isset($data->tags) || !\is_array($data->tags)) {
+ $data->tags = [];
+ }
+ $event = (new Event())->populate($data);
if (time() > $event->getCreatedAt() + 60) {
throw new AuthenticationException('Expired');
}
- $validity = (new SchnorrSignature())->verify($event->getPubkey(), $event->getSig(), $event->getId());
+ $validity = (new SchnorrSignature())->verify(
+ $event->getPublicKey(),
+ $event->getSignature(),
+ $event->getId()
+ );
if (!$validity) {
throw new AuthenticationException('Invalid Authorization header');
}
@@ -73,7 +86,7 @@ class NostrAuthenticator extends AbstractAuthenticator implements InteractiveAut
$key = new Key();
return new SelfValidatingPassport(
- new UserBadge($key->convertPublicKeyToBech32($event->getPubkey()))
+ new UserBadge($key->convertPublicKeyToBech32($event->getPublicKey()))
);
}
diff --git a/src/Service/ArticleBodyHighlightInjector.php b/src/Service/ArticleBodyHighlightInjector.php
index 8865ff6..415814a 100644
--- a/src/Service/ArticleBodyHighlightInjector.php
+++ b/src/Service/ArticleBodyHighlightInjector.php
@@ -13,11 +13,17 @@ use DOMXPath;
use swentel\nostr\Key\Key;
/**
- * Injects kind-9802 highlight ranges into the rendered article body by finding each event’s
- * `content` in the visible text (the `context` tag is ignored; the article is the full context).
- * Matches across inline elements (e.g. em, strong) by concatenating text in document order.
- * If a literal match fails, compares a normalized form (NBSP→space, strip U+00AD / ZW, etc.),
- * then maps the match back to the original HTML text (for e‑book style soft hyphens in 9802 content).
+ * Injects kind-9802 highlight marks into the rendered article body by searching the visible text
+ * in NIP-84 order: event `content` (highlighted span) first, then the `context` tag when present and
+ * non-empty, then `textquoteselector` passage. The first string that matches the body wins.
+ * Matches across inline elements (e.g. em, strong) by concatenating text in document order. Text
+ * inside a prior `mark.user-highlight__marker` is still considered so a narrower 9802 can
+ * be nested and receive its own fragment id (deep link from the landing aside).
+ * If a literal match fails, compares a normalized form (NBSP→space, strip U+00AD / ZW, line breaks,
+ * etc.) via {@see HighlightEventTags::stringForSearch}, then maps the match back to the original
+ * HTML text (for e‑book style soft hyphens in 9802 content). CommonMark footnote callouts
+ * (League CommonMark `sup#fnref…`) are ignored for matching so “realm 1 always” in the DOM does not
+ * block a NIP-84 passage that says “realm always”.
*/
final class ArticleBodyHighlightInjector
{
@@ -28,7 +34,7 @@ final class ArticleBodyHighlightInjector
private ?DOMElement $root = null;
public function __construct(
- private readonly CacheService $cacheService,
+ private readonly HighlightAuthorMetadataProvider $highlightAuthorMetadata,
) {
}
@@ -186,17 +192,89 @@ final class ArticleBodyHighlightInjector
return [];
}
$authorJson = $this->buildHighlightAuthorsJson($group);
- $resolved = $this->resolveInjectionNeedle($first);
- foreach ($this->needleSearchVariants($resolved) as $needle) {
- if ($needle === '') {
+ $bases = $this->injectionNeedleBasesInPriority($first);
+ if ($bases === []) {
+ return [];
+ }
+ foreach ($bases as $base) {
+ foreach ($this->needleSearchVariants($base) as $needle) {
+ if ($needle === '') {
+ continue;
+ }
+ if ($this->tryWrapInDocument($root, $needle, $eid, $authorJson)) {
+ $this->addFragmentIdAliasesForHighlightGroup($eid, $outEids);
+
+ return $outEids;
+ }
+ }
+ }
+
+ return [];
+ }
+
+ /**
+ * One per passage group, with id highlight-{oldest eid}. The landing aside links each
+ * 9802 by that row's event id, so we add zero-footprint #highlight-{id} spans for every other
+ * event in the same group (same place in the text as the mark).
+ *
+ * @param list $outEids lowercase 64-hex, includes $canonicalEid; first is the oldest
+ */
+ private function addFragmentIdAliasesForHighlightGroup(string $canonicalEid, array $outEids): void
+ {
+ if (\count($outEids) < 2) {
+ return;
+ }
+ $mark = $this->getHighlightMarkElementById('highlight-'.$canonicalEid);
+ if (null === $mark) {
+ return;
+ }
+ $parent = $mark->parentNode;
+ if (null === $parent) {
+ return;
+ }
+ foreach ($outEids as $other) {
+ if ($other === $canonicalEid) {
+ continue;
+ }
+ if (64 !== \strlen($other) || !ctype_xdigit($other)) {
continue;
}
- if ($this->tryWrapInDocument($root, $needle, $eid, $authorJson)) {
- return $outEids;
+ if ($this->getHighlightMarkElementById('highlight-'.$other) !== null) {
+ continue;
}
+ $span = $this->dom->createElement('span');
+ if (false === $span) {
+ continue;
+ }
+ $span->setAttribute('id', 'highlight-'.$other);
+ $span->setAttribute('class', 'user-highlight__fragment-target');
+ $span->setAttribute('aria-hidden', 'true');
+ $span->appendChild($this->dom->createTextNode("\u{200B}"));
+ $parent->insertBefore($span, $mark);
}
+ }
- return [];
+ private function getHighlightMarkElementById(string $id): ?DOMElement
+ {
+ if (null === $this->root || $id === '') {
+ return null;
+ }
+ $el = $this->dom->getElementById($id);
+ if ($el instanceof DOMElement) {
+ return $el;
+ }
+ if (! \preg_match('/^highlight-[a-f0-9]{64}$/D', $id)) {
+ return null;
+ }
+ $xp = new DOMXPath($this->dom);
+ $q = '//*[@id="'.(string) $id.'"]';
+ $nodes = $xp->query($q, $this->root);
+ if (false === $nodes || 0 === $nodes->length) {
+ return null;
+ }
+ $n = $nodes->item(0);
+
+ return $n instanceof DOMElement ? $n : null;
}
/**
@@ -208,13 +286,13 @@ final class ArticleBodyHighlightInjector
{
$buckets = [];
foreach ($sorted as $h) {
- $resolved = $this->resolveInjectionNeedle($h);
- if ($resolved === '') {
+ $primary = $this->primaryNeedleForGrouping($h);
+ if ($primary === '') {
continue;
}
- $key = HighlightEventTags::stringForSearch(\trim($resolved));
+ $key = HighlightEventTags::stringForSearch($primary);
if ($key === '') {
- $key = 'x'.\md5($resolved);
+ $key = 'x'.\md5($primary);
}
if (!isset($buckets[$key])) {
$buckets[$key] = [];
@@ -264,7 +342,7 @@ final class ArticleBodyHighlightInjector
$name = '';
$pic = '';
try {
- $meta = $this->cacheService->getMetadata($npub);
+ $meta = $this->highlightAuthorMetadata->getMetadata($npub);
if (isset($meta->display_name) && \is_string($meta->display_name) && $meta->display_name !== '') {
$name = $meta->display_name;
} elseif (isset($meta->name) && \is_string($meta->name) && $meta->name !== '') {
@@ -288,14 +366,37 @@ final class ArticleBodyHighlightInjector
return \json_encode(\array_values($byNpub), \JSON_UNESCAPED_UNICODE | \JSON_THROW_ON_ERROR);
}
- private function resolveInjectionNeedle(ArticleHighlight $h): string
+ /**
+ * Same priority as the card: event `content` (NIP-84 sub-span) first; if empty, `context` tag; if
+ * still empty, `textquoteselector` passage. Article injection tries each in order until one
+ * matches the rendered body (so a highlight with only `textquoteselector` still inlines a mark).
+ */
+ private function primaryNeedleForGrouping(ArticleHighlight $h): string
+ {
+ $b = $this->injectionNeedleBasesInPriority($h);
+
+ return $b[0] ?? '';
+ }
+
+ /**
+ * @return list unique non-empty strings, highest priority first
+ */
+ private function injectionNeedleBasesInPriority(ArticleHighlight $h): array
{
$c = \trim($h->getContent());
- if ($c !== '') {
- return $c;
+ $ctx = \trim(HighlightEventTags::contextFromTags($h->getTags()));
+ $tq = \trim(HighlightEventTags::textquoteselectorPassageFromTags($h->getTags()));
+ $out = [];
+ $seen = [];
+ foreach ([$c, $ctx, $tq] as $s) {
+ if ($s === '' || isset($seen[$s])) {
+ continue;
+ }
+ $seen[$s] = true;
+ $out[] = $s;
}
- return \trim(HighlightEventTags::contextFromTags($h->getTags()));
+ return $out;
}
/**
@@ -312,6 +413,14 @@ final class ArticleBodyHighlightInjector
$base,
$this->replaceTypographicQuotes($base),
];
+ $noLineBreaks = (string) \preg_replace('/\R/u', '', $base);
+ if ($noLineBreaks !== $base && $noLineBreaks !== '') {
+ $candidates[] = $noLineBreaks;
+ }
+ $nEnd = (string) \preg_replace('/[.!?…,;:]+$/u', '', $base);
+ if ($nEnd !== $base && $nEnd !== '') {
+ $candidates[] = $nEnd;
+ }
if (\class_exists(\Normalizer::class)) {
$c = \Normalizer::normalize($base, \Normalizer::FORM_C);
if (\is_string($c) && $c !== '' && $c !== $base) {
@@ -460,13 +569,47 @@ final class ArticleBodyHighlightInjector
private function shouldNotDescendInto(DOMElement $c): bool
{
$n = $c->nodeName;
-
- return 'script' === $n
+ if ('script' === $n
|| 'style' === $n
|| 'pre' === $n
|| 'textarea' === $n
- || 'code' === $n
- || 'mark' === $n;
+ || 'code' === $n) {
+ return true;
+ }
+ if ('div' === $n && $this->isFootnotesOrEndnotesElement($c)) {
+ // End-of-article footnote list (League CommonMark): must not mix into the body search string
+ // or after main content, which would desync “flat text” from NIP-84 passages.
+ return true;
+ }
+ if ('sup' === $n && $this->isFootnoteCalloutElement($c)) {
+ // Inline [^ref] callouts: skip the superscript so "realm" + "1" + " always" does not
+ // break matching "realm always" from kind-9802 `content` (cards use raw Nostr, not the DOM).
+ return true;
+ }
+ if ('mark' === $n) {
+ $cl = (string) $c->getAttribute('class');
+
+ return ! \str_contains($cl, 'user-highlight__marker');
+ }
+
+ return false;
+ }
+
+ private function isFootnoteCalloutElement(DOMElement $c): bool
+ {
+ $id = (string) $c->getAttribute('id');
+
+ return $id !== '' && \str_starts_with($id, 'fnref');
+ }
+
+ private function isFootnotesOrEndnotesElement(DOMElement $c): bool
+ {
+ if (\str_contains((string) $c->getAttribute('class'), 'footnotes')
+ || $c->getAttribute('role') === 'doc-endnotes') {
+ return true;
+ }
+
+ return false;
}
private function isSafeTextContext(DOMText $textNode): bool
@@ -484,11 +627,12 @@ final class ArticleBodyHighlightInjector
if ('code' === $n) {
return false;
}
- if ('mark' === $n) {
- $cl = (string) $p->getAttribute('class');
- if (\str_contains($cl, 'user-highlight__marker')) {
- return false;
- }
+ if (('div' === $n && $this->isFootnotesOrEndnotesElement($p))
+ || ('sup' === $n && $this->isFootnoteCalloutElement($p))) {
+ return false;
+ }
+ if ('a' === $n && \str_contains((string) $p->getAttribute('class'), 'footnote-ref')) {
+ return false;
}
$p = $p->parentNode;
}
diff --git a/src/Service/CacheService.php b/src/Service/CacheService.php
index c2b7635..4c140cf 100644
--- a/src/Service/CacheService.php
+++ b/src/Service/CacheService.php
@@ -11,7 +11,7 @@ use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use swentel\nostr\Key\Key;
-readonly class CacheService
+readonly class CacheService implements HighlightAuthorMetadataProvider
{
public function __construct(
private NostrClient $nostrClient,
diff --git a/src/Service/HighlightAuthorMetadataProvider.php b/src/Service/HighlightAuthorMetadataProvider.php
new file mode 100644
index 0000000..c8e0eed
--- /dev/null
+++ b/src/Service/HighlightAuthorMetadataProvider.php
@@ -0,0 +1,13 @@
+convertPrivateKeyToBech32((new Key())->generatePrivateKey());
+ $token = 'Nostr '.$this->signedAuthEventBase64($nsec);
+ $request = Request::create('/login', 'GET', [], [], [], ['HTTP_AUTHORIZATION' => $token]);
- $client->request('GET', '/login', [], [], [
- 'HTTP_Authorization' => $authorizationHeader,
- ]);
+ $out = (new NostrAuthenticator())->authenticate($request);
- $response = $client->getResponse();
- $this->assertSame($expectedStatusCode, $response->getStatusCode());
- $this->assertStringContainsString($expectedContent, $response->getContent());
+ $this->assertInstanceOf(SelfValidatingPassport::class, $out);
}
- /**
- * @throws \JsonException
- */
- public function provideAuthenticationData(): array
+ public function testInvalidAuthorizationHeaderThrows(): void
{
- // Boot the kernel manually
- $kernel = new Kernel('local', true);
- $kernel->boot();
- $container = $kernel->getContainer();
+ $this->expectException(AuthenticationException::class);
+ $request = Request::create('/login', 'GET', [], [], [], [
+ 'HTTP_AUTHORIZATION' => 'InvalidHeader',
+ ]);
+ (new NostrAuthenticator())->authenticate($request);
+ }
- $nsec = $container->getParameter('nsec');
+ public function testExpiredEventThrows(): void
+ {
+ $this->expectException(AuthenticationException::class);
+ $this->expectExceptionMessage('Expired');
+ $expiredToken = 'Nostr eyJjcmVhdGVkX2F0IjoxNzMzMzIxMzUyLCJraW5kIjoyNzIzNSwidGFncyI6W1sidSIsImh0dHBzOi8vbG9jYWxob3N0L2xvZ2luIl0sWyJtZXRob2QiLCJHRVQiXV0sImNvbnRlbnQiOiIiLCJwdWJrZXkiOiJkNDc1Y2U0YjM5Nzc1MDcxMzBmNDJjN2Y4NjM0NmVmOTM2ODAwZjNhZTc0ZDVlY2Y4MDg5MjgwY2RjMTkyM2U5IiwiaWQiOiJhYjA4NGM1NWQ5Y2UzMDliN2UxNzIyZGI2ODNjZTc2ZDg5NGNjN2QyYTIzZTRkNWUyMTUyYTM2Y2M2ODI1MTQ5Iiwic2lnIjoiOWI1Yjk2YjhkN2U2ZGM4YWU3ZmM4NjU2ZTE0NDVlZjkwYzc1YWQxNzZkYTRmNmNhMjI0NTRkNTJjNTk3ZTBmNjYwZjAwZjE3MmIxYjMzYzM4YTg2Y2U0YTBiMTdmMDgwMWEyNzJmZmVmYWU0NmY2OTgzZGZjYjRlM2YyZDgwZGYifQ==';
+ $request = Request::create('/login', 'GET', [], [], [], [
+ 'HTTP_AUTHORIZATION' => $expiredToken,
+ ]);
+ (new NostrAuthenticator())->authenticate($request);
+ }
+ private function signedAuthEventBase64(string $nsec): string
+ {
$note = new Event();
$note->setContent('');
$note->setKind(27235);
$note->setTags([
- ["u", "https://localhost/login"],
- ["method", "POST"]
+ ['u', 'https://localhost/login'],
+ ['method', 'POST'],
]);
- $signer = new Sign();
- $signer->signEvent($note, $nsec);
- $ser = $note->toJson();
- $validToken = 'Nostr ' . base64_encode($ser);
-
- $expiredToken = 'Nostr eyJjcmVhdGVkX2F0IjoxNzMzMzIxMzUyLCJraW5kIjoyNzIzNSwidGFncyI6W1sidSIsImh0dHBzOi8vbG9jYWxob3N0L2xvZ2luIl0sWyJtZXRob2QiLCJHRVQiXV0sImNvbnRlbnQiOiIiLCJwdWJrZXkiOiJkNDc1Y2U0YjM5Nzc1MDcxMzBmNDJjN2Y4NjM0NmVmOTM2ODAwZjNhZTc0ZDVlY2Y4MDg5MjgwY2RjMTkyM2U5IiwiaWQiOiJhYjA4NGM1NWQ5Y2UzMDliN2UxNzIyZGI2ODNjZTc2ZDg5NGNjN2QyYTIzZTRkNWUyMTUyYTM2Y2M2ODI1MTQ5Iiwic2lnIjoiOWI1Yjk2YjhkN2U2ZGM4YWU3ZmM4NjU2ZTE0NDVlZjkwYzc1YWQxNzZkYTRmNmNhMjI0NTRkNTJjNTk3ZTBmNjYwZjAwZjE3MmIxYjMzYzM4YTg2Y2U0YTBiMTdmMDgwMWEyNzJmZmVmYWU0NmY2OTgzZGZjYjRlM2YyZDgwZGYifQ==';
-
- $invalidToken = 'InvalidHeader';
+ (new Sign())->signEvent($note, $nsec);
- return [
- // Scenario: Valid token
- 'valid_token' => [
- 'authorizationHeader' => $validToken,
- 'expectedStatusCode' => Response::HTTP_OK,
- 'expectedContent' => 'Authentication Successful',
- ],
- // Scenario: Expired token
- 'expired_token' => [
- 'authorizationHeader' => $expiredToken,
- 'expectedStatusCode' => Response::HTTP_UNAUTHORIZED,
- 'expectedContent' => 'Unauthenticated',
- ],
- // Scenario: Invalid header
- 'invalid_token' => [
- 'authorizationHeader' => $invalidToken,
- 'expectedStatusCode' => Response::HTTP_UNAUTHORIZED,
- 'expectedContent' => 'Unauthenticated',
- ]
- ];
+ return base64_encode($note->toJson());
}
}
diff --git a/tests/Service/ArticleBodyHighlightInjectorTest.php b/tests/Service/ArticleBodyHighlightInjectorTest.php
new file mode 100644
index 0000000..d8165cb
--- /dev/null
+++ b/tests/Service/ArticleBodyHighlightInjectorTest.php
@@ -0,0 +1,177 @@
+First passage alpha.
Second passage beta.
Third passage gamma.
';
+ $e1 = '00000000000000000000000000000000000000000000000000000000000000a1';
+ $e2 = '00000000000000000000000000000000000000000000000000000000000000a2';
+ $e3 = '00000000000000000000000000000000000000000000000000000000000000a3';
+ $highlights = [
+ $this->makeHighlight($e1, 'First passage alpha.', [], 100),
+ $this->makeHighlight($e2, 'Second passage beta.', [], 200),
+ $this->makeHighlight($e3, 'Third passage gamma.', [], 300),
+ ];
+ $injector = $this->createInjector();
+ $out = $injector->inject($html, $highlights);
+
+ $this->assertCount(3, $out['injectedEventIds'], 'Each highlight with a unique matching passage should inject.');
+ $this->assertHighlightFragmentsPresent($out['html'], [$e1, $e2, $e3]);
+ }
+
+ public function testSamePassageFromTwoEventsYieldsFragmentIdForEachEventId(): void
+ {
+ $html = 'Shared quote text for two readers.
';
+ $older = '00000000000000000000000000000000000000000000000000000000000000b1';
+ $newer = '00000000000000000000000000000000000000000000000000000000000000b2';
+ $highlights = [
+ $this->makeHighlight($older, 'Shared quote text for two readers.', [], 10),
+ $this->makeHighlight($newer, 'Shared quote text for two readers.', [], 20),
+ ];
+ $out = $this->createInjector()->inject($html, $highlights);
+
+ $this->assertCount(2, $out['injectedEventIds']);
+ $this->assertHighlightFragmentsPresent($out['html'], [$older, $newer]);
+ }
+
+ public function testContextTagUsedWhenContentIsSubspanOfContext(): void
+ {
+ $html = 'Before the important bit the rest of the sentence.
';
+ $eid = '00000000000000000000000000000000000000000000000000000000000000c1';
+ $context = 'Before the important bit the rest of the sentence.';
+ $content = 'important bit';
+ $highlights = [
+ $this->makeHighlight(
+ $eid,
+ $content,
+ [['context', $context]],
+ 100
+ ),
+ ];
+ $out = $this->createInjector()->inject($html, $highlights);
+
+ $this->assertContains($eid, $out['injectedEventIds'], 'NIP-84: highlight `content` as subspan of `context` should still match the body.');
+ $this->assertHighlightFragmentsPresent($out['html'], [$eid]);
+ }
+
+ public function testCurlyApostropheAndEllipsisInBodyMatchAsciiNeedleFromEvent(): void
+ {
+ // Landing “highlight” cards use NIP-84 text as stored; the article body is rendered by
+ // CommonMark + SmartPunct, which uses U+2019 (’) and U+2026 (…) in the DOM while clients
+ // often send straight ASCII in 9802 `content`. stringForSearch must fold typography.
+ $apostrophe = "\xE2\x80\x99";
+ $ellipsis = "\xE2\x80\xA6";
+ // "Here" + ’ + "s" (SmartPunct), not "it" + ’ + "s"
+ $html = 'Here'.$apostrophe.'s the point'.$ellipsis.'
';
+ $eid = '00000000000000000000000000000000000000000000000000000000000000d1';
+ $highlights = [
+ $this->makeHighlight($eid, "Here's the point...", [], 1),
+ ];
+ $out = $this->createInjector()->inject($html, $highlights);
+
+ $this->assertContains($eid, $out['injectedEventIds']);
+ $this->assertHighlightFragmentsPresent($out['html'], [$eid]);
+ }
+
+ public function testBorisBitcoinIsTimeHighlightWithSoftHyphensInjectsDespiteFootnoteCalloutInBody(): void
+ {
+ // Real kind-9802: `content` uses U+00AD in "informational" (read.withboris / Gigi’s article).
+ // The article body is plain "informational"; footnotes break substring search if we keep text.
+ $content = 'keeping track of things in the infor'."\xC2\xAD".'ma'."\xC2\xAD".'tional realm always implies keeping track of time';
+ $html = 'keeping track of things in the informational realm'
+ .''
+ .' always implies keeping track of time
';
+ $eid = 'f56a6221e8575b051cd6df34e9b61654e08a241b4c5ced3b48c0b769b24ada7d';
+ $highlights = [
+ $this->makeHighlight(
+ $eid,
+ $content,
+ [['a', '30023:6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93:bitcoin-is-time']],
+ 1762697677
+ ),
+ ];
+ $out = $this->createInjector()->inject($html, $highlights);
+
+ $this->assertContains($eid, $out['injectedEventIds']);
+ $this->assertHighlightFragmentsPresent($out['html'], [$eid]);
+ }
+
+ public function testSoftHyphenInBodyMatchesPlainNeedleFromEvent(): void
+ {
+ $softHyphen = "\xC2\xAD";
+ $html = 'Time and order have a very intimate relation'.$softHyphen.'ship.
';
+ $eid = '00000000000000000000000000000000000000000000000000000000000000e1';
+ $highlights = [
+ $this->makeHighlight($eid, 'Time and order have a very intimate relationship.', [], 1),
+ ];
+ $out = $this->createInjector()->inject($html, $highlights);
+
+ $this->assertContains($eid, $out['injectedEventIds']);
+ $this->assertHighlightFragmentsPresent($out['html'], [$eid]);
+ }
+
+ private function createInjector(): ArticleBodyHighlightInjector
+ {
+ $meta = $this->createMock(HighlightAuthorMetadataProvider::class);
+ $meta->method('getMetadata')->willReturn(
+ (object) [
+ 'display_name' => 'Test',
+ 'name' => 'Test',
+ 'picture' => '',
+ ]
+ );
+
+ return new ArticleBodyHighlightInjector($meta);
+ }
+
+ /**
+ * @param list $eventIdsLowerOrMixed 64-char hex event ids
+ */
+ private function assertHighlightFragmentsPresent(string $html, array $eventIds): void
+ {
+ foreach ($eventIds as $eid) {
+ $eid = strtolower($eid);
+ $this->assertMatchesRegularExpression(
+ '/\bid="highlight-'.preg_quote($eid, '/').'"/',
+ $html,
+ 'Expected in-article fragment id highlight-'.$eid
+ );
+ }
+ }
+
+ private function makeHighlight(
+ string $eventId64,
+ string $content,
+ array $tags,
+ int $createdAt,
+ ): ArticleHighlight {
+ $h = new ArticleHighlight();
+ $h->setEventId($eventId64);
+ $h->setContent($content);
+ $h->setTags($tags);
+ $h->setEventCreatedAt($createdAt);
+ $h->setAuthorPubkey(self::AUTHOR_HEX);
+
+ return $h;
+ }
+}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 47a5855..bc0e6dd 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -8,6 +8,6 @@ if (method_exists(Dotenv::class, 'bootEnv')) {
(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
}
-if ($_SERVER['APP_DEBUG']) {
+if (!empty($_SERVER['APP_DEBUG'])) {
umask(0000);
}