diff --git a/composer.lock b/composer.lock index 26874152..789b41a5 100644 --- a/composer.lock +++ b/composer.lock @@ -68,16 +68,16 @@ }, { "name": "doctrine/dbal", - "version": "4.4.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "e8c5163fbec0f34e357431bd1e5fc4056cdf4fdc" + "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/e8c5163fbec0f34e357431bd1e5fc4056cdf4fdc", - "reference": "e8c5163fbec0f34e357431bd1e5fc4056cdf4fdc", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c", + "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c", "shasum": "" }, "require": { @@ -154,7 +154,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.4.0" + "source": "https://github.com/doctrine/dbal/tree/4.4.1" }, "funding": [ { @@ -170,7 +170,7 @@ "type": "tidelift" } ], - "time": "2025-11-29T12:17:09+00:00" + "time": "2025-12-04T10:11:03+00:00" }, { "name": "doctrine/deprecations", @@ -420,12 +420,12 @@ "source": { "type": "git", "url": "https://github.com/patchlevel/event-sourcing.git", - "reference": "8dd45305c7dde2daf5e337b9704fd20c2afe2604" + "reference": "ed316c771872bc1efd34caee9705f60267a0c368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/patchlevel/event-sourcing/zipball/8dd45305c7dde2daf5e337b9704fd20c2afe2604", - "reference": "8dd45305c7dde2daf5e337b9704fd20c2afe2604", + "url": "https://api.github.com/repos/patchlevel/event-sourcing/zipball/ed316c771872bc1efd34caee9705f60267a0c368", + "reference": "ed316c771872bc1efd34caee9705f60267a0c368", "shasum": "" }, "require": { @@ -494,7 +494,7 @@ "issues": "https://github.com/patchlevel/event-sourcing/issues", "source": "https://github.com/patchlevel/event-sourcing/tree/4.0.x" }, - "time": "2025-12-01T17:19:55+00:00" + "time": "2025-12-09T10:43:48+00:00" }, { "name": "patchlevel/hydrator", @@ -1077,16 +1077,16 @@ }, { "name": "symfony/cache", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "1005fe1988f719db8e0c6db5b8ce24284336530f" + "reference": "0e67dc8145810d4e1c0d13c0e1d29ceb930b1c8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/1005fe1988f719db8e0c6db5b8ce24284336530f", - "reference": "1005fe1988f719db8e0c6db5b8ce24284336530f", + "url": "https://api.github.com/repos/symfony/cache/zipball/0e67dc8145810d4e1c0d13c0e1d29ceb930b1c8e", + "reference": "0e67dc8145810d4e1c0d13c0e1d29ceb930b1c8e", "shasum": "" }, "require": { @@ -1153,7 +1153,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v8.0.0" + "source": "https://github.com/symfony/cache/tree/v8.0.1" }, "funding": [ { @@ -1173,7 +1173,7 @@ "type": "tidelift" } ], - "time": "2025-11-16T10:17:21+00:00" + "time": "2025-12-04T18:17:06+00:00" }, { "name": "symfony/cache-contracts", @@ -1330,16 +1330,16 @@ }, { "name": "symfony/config", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "12d43bf5ebe79ab96da294f468c38794e1a2c98b" + "reference": "a5a054e613da565d46183a845ae4c0c996a3fbce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/12d43bf5ebe79ab96da294f468c38794e1a2c98b", - "reference": "12d43bf5ebe79ab96da294f468c38794e1a2c98b", + "url": "https://api.github.com/repos/symfony/config/zipball/a5a054e613da565d46183a845ae4c0c996a3fbce", + "reference": "a5a054e613da565d46183a845ae4c0c996a3fbce", "shasum": "" }, "require": { @@ -1384,7 +1384,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/v8.0.0" + "source": "https://github.com/symfony/config/tree/v8.0.1" }, "funding": [ { @@ -1404,20 +1404,20 @@ "type": "tidelift" } ], - "time": "2025-11-02T08:10:27+00:00" + "time": "2025-12-05T14:08:45+00:00" }, { "name": "symfony/console", - "version": "v7.4.0", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8" + "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", - "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", + "url": "https://api.github.com/repos/symfony/console/zipball/6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e", + "reference": "6d9f0fbf2ec2e9785880096e3abd0ca0c88b506e", "shasum": "" }, "require": { @@ -1482,7 +1482,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.0" + "source": "https://github.com/symfony/console/tree/v7.4.1" }, "funding": [ { @@ -1502,20 +1502,20 @@ "type": "tidelift" } ], - "time": "2025-11-27T13:27:24+00:00" + "time": "2025-12-05T15:23:39+00:00" }, { "name": "symfony/dependency-injection", - "version": "v8.0.0", + "version": "v8.0.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8b61252a5e897809ebbe9c7856aa7738830e6002" + "reference": "90f6c3364b8f444f85bdb6939664c80af9e0d576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8b61252a5e897809ebbe9c7856aa7738830e6002", - "reference": "8b61252a5e897809ebbe9c7856aa7738830e6002", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/90f6c3364b8f444f85bdb6939664c80af9e0d576", + "reference": "90f6c3364b8f444f85bdb6939664c80af9e0d576", "shasum": "" }, "require": { @@ -1563,7 +1563,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/v8.0.0" + "source": "https://github.com/symfony/dependency-injection/tree/v8.0.2" }, "funding": [ { @@ -1583,7 +1583,7 @@ "type": "tidelift" } ], - "time": "2025-11-27T08:09:45+00:00" + "time": "2025-12-08T06:57:48+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2034,16 +2034,16 @@ }, { "name": "symfony/http-foundation", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "19f925ff62437970e56fcdf793aa93607622d8be" + "reference": "3690740e2e8b19d877f20d4f10b7a489cddf0fe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/19f925ff62437970e56fcdf793aa93607622d8be", - "reference": "19f925ff62437970e56fcdf793aa93607622d8be", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3690740e2e8b19d877f20d4f10b7a489cddf0fe2", + "reference": "3690740e2e8b19d877f20d4f10b7a489cddf0fe2", "shasum": "" }, "require": { @@ -2090,7 +2090,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v8.0.0" + "source": "https://github.com/symfony/http-foundation/tree/v8.0.1" }, "funding": [ { @@ -2110,20 +2110,20 @@ "type": "tidelift" } ], - "time": "2025-11-13T08:54:25+00:00" + "time": "2025-12-07T11:23:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v8.0.0", + "version": "v8.0.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "33a41d7f17dfb65519670e7f9c2813896ae2a2aa" + "reference": "bcef77a3c8ae8934ce7067172e2a1a6491a62a7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33a41d7f17dfb65519670e7f9c2813896ae2a2aa", - "reference": "33a41d7f17dfb65519670e7f9c2813896ae2a2aa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/bcef77a3c8ae8934ce7067172e2a1a6491a62a7d", + "reference": "bcef77a3c8ae8934ce7067172e2a1a6491a62a7d", "shasum": "" }, "require": { @@ -2194,7 +2194,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/v8.0.0" + "source": "https://github.com/symfony/http-kernel/tree/v8.0.2" }, "funding": [ { @@ -2214,7 +2214,7 @@ "type": "tidelift" } ], - "time": "2025-11-27T08:33:14+00:00" + "time": "2025-12-08T07:59:34+00:00" }, { "name": "symfony/messenger", @@ -2874,16 +2874,16 @@ }, { "name": "symfony/string", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f929eccf09531078c243df72398560e32fa4cf4f" + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f929eccf09531078c243df72398560e32fa4cf4f", - "reference": "f929eccf09531078c243df72398560e32fa4cf4f", + "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc", + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc", "shasum": "" }, "require": { @@ -2940,7 +2940,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.0" + "source": "https://github.com/symfony/string/tree/v8.0.1" }, "funding": [ { @@ -2960,20 +2960,20 @@ "type": "tidelift" } ], - "time": "2025-09-11T14:37:55+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "symfony/type-info", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "9de828eae6aeb33806f8f2fec161a8f8e79338d0" + "reference": "bb091cec1f70383538c7d000699781813f8d1a6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/9de828eae6aeb33806f8f2fec161a8f8e79338d0", - "reference": "9de828eae6aeb33806f8f2fec161a8f8e79338d0", + "url": "https://api.github.com/repos/symfony/type-info/zipball/bb091cec1f70383538c7d000699781813f8d1a6a", + "reference": "bb091cec1f70383538c7d000699781813f8d1a6a", "shasum": "" }, "require": { @@ -3022,7 +3022,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.0.0" + "source": "https://github.com/symfony/type-info/tree/v8.0.1" }, "funding": [ { @@ -3042,7 +3042,7 @@ "type": "tidelift" } ], - "time": "2025-11-08T16:30:39+00:00" + "time": "2025-12-05T14:08:45+00:00" }, { "name": "symfony/var-dumper", @@ -5096,16 +5096,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -5148,9 +5148,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "ondram/ci-detector", @@ -5452,11 +5452,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.32", + "version": "2.1.33", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", - "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f", + "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f", "shasum": "" }, "require": { @@ -5501,7 +5501,7 @@ "type": "github" } ], - "time": "2025-11-11T15:18:17+00:00" + "time": "2025-12-05T10:24:31+00:00" }, { "name": "phpstan/phpstan-symfony", @@ -5911,16 +5911,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.45", + "version": "11.5.46", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "faf5fff4fb9beb290affa53f812b05380819c51a" + "reference": "75dfe79a2aa30085b7132bb84377c24062193f33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/faf5fff4fb9beb290affa53f812b05380819c51a", - "reference": "faf5fff4fb9beb290affa53f812b05380819c51a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/75dfe79a2aa30085b7132bb84377c24062193f33", + "reference": "75dfe79a2aa30085b7132bb84377c24062193f33", "shasum": "" }, "require": { @@ -5992,7 +5992,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.45" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.46" }, "funding": [ { @@ -6016,7 +6016,7 @@ "type": "tidelift" } ], - "time": "2025-12-01T07:38:43+00:00" + "time": "2025-12-06T08:01:15+00:00" }, { "name": "roave/security-advisories", @@ -6024,12 +6024,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "eeebba0043eaddd36fd8747cc144b9b661d9b392" + "reference": "4400137eb61cd0db3192a409353ae83e811395fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/eeebba0043eaddd36fd8747cc144b9b661d9b392", - "reference": "eeebba0043eaddd36fd8747cc144b9b661d9b392", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4400137eb61cd0db3192a409353ae83e811395fe", + "reference": "4400137eb61cd0db3192a409353ae83e811395fe", "shasum": "" }, "conflict": { @@ -6281,6 +6281,7 @@ "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filament/actions": ">=3.2,<3.2.123", + "filament/filament": ">=4,<4.3.1", "filament/infolists": ">=3,<3.2.115", "filament/tables": ">=3,<3.2.115", "filegator/filegator": "<7.8", @@ -6362,7 +6363,7 @@ "ibexa/http-cache": ">=4.6,<4.6.14", "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", - "ibexa/user": ">=4,<4.4.3|>=5,<5.0.3", + "ibexa/user": ">=4,<4.4.3|>=5,<5.0.4", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", "ilicmiljan/secure-props": ">=1.2,<1.2.2", @@ -6535,6 +6536,7 @@ "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "neuron-core/neuron-ai": "<=2.8.11", "nilsteampassnet/teampass": "<3.1.3.1-dev", "nitsan/ns-backup": "<13.0.1", "nonfiction/nterchange": "<4.1.1", @@ -6554,7 +6556,7 @@ "october/system": "<3.7.5", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", - "onelogin/php-saml": "<2.10.4", + "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", @@ -6688,8 +6690,8 @@ "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.4.1-dev", "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17|>=6.7,<6.7.2.1-dev", - "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", + "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopxo/shopxo": "<=6.4", "showdoc/showdoc": "<2.10.4", "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", @@ -7015,7 +7017,7 @@ "type": "tidelift" } ], - "time": "2025-12-08T23:05:37+00:00" + "time": "2025-12-10T19:05:59+00:00" }, { "name": "sanmai/di-container", @@ -8472,16 +8474,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "01cdaf3f26e981c3d9dc87a13cdf7352a8cf6ef8" + "reference": "194b5edd7a00703aaf836b56bbf079cd6c4d4a87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/01cdaf3f26e981c3d9dc87a13cdf7352a8cf6ef8", - "reference": "01cdaf3f26e981c3d9dc87a13cdf7352a8cf6ef8", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/194b5edd7a00703aaf836b56bbf079cd6c4d4a87", + "reference": "194b5edd7a00703aaf836b56bbf079cd6c4d4a87", "shasum": "" }, "require": { @@ -8520,6 +8522,7 @@ "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", "symfony/asset": "^7.4|^8.0", "symfony/asset-mapper": "^7.4|^8.0", @@ -8553,7 +8556,7 @@ "symfony/string": "^7.4|^8.0", "symfony/translation": "^7.4|^8.0", "symfony/twig-bundle": "^7.4|^8.0", - "symfony/type-info": "^7.4|^8.0", + "symfony/type-info": "^7.4.1|^8.0.1", "symfony/uid": "^7.4|^8.0", "symfony/validator": "^7.4|^8.0", "symfony/web-link": "^7.4|^8.0", @@ -8587,7 +8590,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/v8.0.0" + "source": "https://github.com/symfony/framework-bundle/tree/v8.0.1" }, "funding": [ { @@ -8607,7 +8610,7 @@ "type": "tidelift" } ], - "time": "2025-11-21T13:19:49+00:00" + "time": "2025-12-06T16:55:34+00:00" }, { "name": "symfony/polyfill-php80", @@ -8923,16 +8926,16 @@ }, { "name": "symfony/routing", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8da1cf2796c9cef09b170208ddb9bc00d997502e" + "reference": "bc8fa314a61fb7c4190e964b18a5bd000d3b45ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8da1cf2796c9cef09b170208ddb9bc00d997502e", - "reference": "8da1cf2796c9cef09b170208ddb9bc00d997502e", + "url": "https://api.github.com/repos/symfony/routing/zipball/bc8fa314a61fb7c4190e964b18a5bd000d3b45ce", + "reference": "bc8fa314a61fb7c4190e964b18a5bd000d3b45ce", "shasum": "" }, "require": { @@ -8979,7 +8982,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v8.0.0" + "source": "https://github.com/symfony/routing/tree/v8.0.1" }, "funding": [ { @@ -8999,7 +9002,7 @@ "type": "tidelift" } ], - "time": "2025-11-27T08:09:45+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "symfony/translation-contracts", @@ -9085,16 +9088,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v8.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "6fd7fdb536c0c7b6bd54080f0785841ff794c1fd" + "reference": "a5d2d4fdd63a0c96fe9dd28e7c3cf21512689f7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/6fd7fdb536c0c7b6bd54080f0785841ff794c1fd", - "reference": "6fd7fdb536c0c7b6bd54080f0785841ff794c1fd", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/a5d2d4fdd63a0c96fe9dd28e7c3cf21512689f7b", + "reference": "a5d2d4fdd63a0c96fe9dd28e7c3cf21512689f7b", "shasum": "" }, "require": { @@ -9117,7 +9120,7 @@ "symfony/emoji": "^7.4|^8.0", "symfony/expression-language": "^7.4|^8.0", "symfony/finder": "^7.4|^8.0", - "symfony/form": "^7.4|^8.0", + "symfony/form": "^7.4.1|^8.0.1", "symfony/html-sanitizer": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/http-kernel": "^7.4|^8.0", @@ -9167,7 +9170,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v8.0.0" + "source": "https://github.com/symfony/twig-bridge/tree/v8.0.1" }, "funding": [ { @@ -9187,7 +9190,7 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:36:47+00:00" + "time": "2025-12-05T14:08:45+00:00" }, { "name": "symfony/twig-bundle", diff --git a/docs/configuration.md b/docs/configuration.md index 9a41b537..ba3f55c0 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -343,6 +343,8 @@ patchlevel_event_sourcing: store: type: 'custom' # default is 'dbal' service: 'my_subscription_store' + options: + table_name: 'my_subscription_store' ``` :::tip If you are using the [doctrine-test-bundle](https://github.com/dmaicher/doctrine-test-bundle), @@ -672,7 +674,7 @@ For this you need to enable the crypto shredding. ```yaml patchlevel_event_sourcing: cryptography: - use_encrypted_field_name: true, + use_encrypted_field_name: true ``` :::tip You should activate `use_encrypted_field_name` to mark the fields that are encrypted. diff --git a/docs/installation.md b/docs/installation.md index c05eda54..bef677db 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -37,6 +37,20 @@ patchlevel_event_sourcing: connection: url: '%env(EVENTSTORE_URL)%' provide_dedicated_connection: true + store: + type: dbal_stream + # if you are using doctrine bundle you should enable this + #merge_orm_schema: true + command_bus: + service: messenger.default_bus + query_bus: + service: messenger.default_bus + subscription: + gap_detection: ~ + + # enable this if you want to use sensitive data encryption + #cryptography: ~ + # use_encrypted_field_name: true when@dev: patchlevel_event_sourcing: @@ -50,6 +64,8 @@ when@dev: when@test: patchlevel_event_sourcing: subscription: + store: + type: 'static_in_memory' catch_up: true throw_on_error: true run_after_aggregate_save: true diff --git a/docs/usage.md b/docs/usage.md index 78d7d217..bc5b1789 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,7 +1,7 @@ # Usage Here you will find some examples of how to use the bundle. -But we provide only examples for specific symfo +But we provide only examples for specific symfony features. :::info You can find out more about event sourcing in the library diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 683babf7..2a5fff41 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,7 +1,67 @@ parameters: ignoreErrors: + - + message: '#^Parameter \#2 \$id of static method Patchlevel\\EventSourcingBundle\\DependencyInjection\\ServiceAliasResolver\:\:resolve\(\) expects string, array\|bool\|float\|int\|string\|null given\.$#' + identifier: argument.type + count: 1 + path: src/DependencyInjection/CommandHandlerCompilerPass.php + - message: '#^Parameter \#1 \$classString of static method Patchlevel\\EventSourcing\\QueryBus\\HandlerFinder\:\:findInClass\(\) expects class\-string, string given\.$#' identifier: argument.type count: 1 path: src/DependencyInjection/QueryHandlerCompilerPass.php + + - + message: '#^Parameter \#2 \$id of static method Patchlevel\\EventSourcingBundle\\DependencyInjection\\ServiceAliasResolver\:\:resolve\(\) expects string, array\|bool\|float\|int\|string\|null given\.$#' + identifier: argument.type + count: 1 + path: src/DependencyInjection/QueryHandlerCompilerPass.php + + - + message: '#^Property Patchlevel\\EventSourcingBundle\\Tests\\Fixtures\\Profile\:\:\$id is never read, only written\.$#' + identifier: property.onlyWritten + count: 1 + path: tests/Fixtures/Profile.php + + - + message: '#^Property Patchlevel\\EventSourcingBundle\\Tests\\Fixtures\\SnapshotableProfile\:\:\$id is unused\.$#' + identifier: property.unused + count: 1 + path: tests/Fixtures/SnapshotableProfile.php + + - + message: '#^Call to an undefined method Symfony\\Component\\DependencyInjection\\ContainerBuilder\:\:getAutoconfiguredAttributes\(\)\.$#' + identifier: method.notFound + count: 1 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php + + - + message: '#^Cannot access offset ''Patchlevel\\\\EventSourcing\\\\Attribute\\\\Aggregate''\|''Patchlevel\\\\EventSourcing\\\\Attribute\\\\Event'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php + + - + message: '#^Cannot access offset ''bus'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php + + - + message: '#^Cannot access offset ''handles'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php + + - + message: '#^Cannot access offset ''method'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php + + - + message: '#^Trying to invoke mixed but it''s not a callable\.$#' + identifier: callable.nonCallable + count: 1 + path: tests/Unit/PatchlevelEventSourcingBundleTest.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index dc02b387..c01c9daa 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -6,3 +6,4 @@ parameters: level: max paths: - src + - tests diff --git a/src/DependencyInjection/CommandHandlerCompilerPass.php b/src/DependencyInjection/CommandHandlerCompilerPass.php index dad31be7..a078c79b 100644 --- a/src/DependencyInjection/CommandHandlerCompilerPass.php +++ b/src/DependencyInjection/CommandHandlerCompilerPass.php @@ -25,7 +25,10 @@ public function process(ContainerBuilder $container): void return; } - $bus = $container->getParameter('patchlevel_event_sourcing.aggregate_handlers.bus'); + $bus = ServiceAliasResolver::resolve( + $container, + $container->getParameter('patchlevel_event_sourcing.aggregate_handlers.bus'), + ); /** @var AggregateRootRegistry $aggregateRootRegistry */ $aggregateRootRegistry = $container->get(AggregateRootRegistry::class); diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index f0e42fe6..4395fda9 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -22,7 +22,11 @@ * }, * query_bus: array{enabled: bool, service: string}, * subscription: array{ - * store: array{type: string, service: string|null}, + * store: array{ + * type: string, + * service: string|null, + * options: array{table_name: string} + * }, * retry_strategy?: array{base_delay: int, delay_factor: int, max_attempts: int}, * retry_strategies: array}>, * default_retry_strategy: string, @@ -198,6 +202,12 @@ public function getConfigTreeBuilder(): TreeBuilder ->defaultValue('dbal') ->end() ->scalarNode('service')->defaultNull()->end() + ->arrayNode('options') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('table_name')->defaultValue('subscriptions')->end() + ->end() + ->end() ->end() ->end() diff --git a/src/DependencyInjection/PatchlevelEventSourcingExtension.php b/src/DependencyInjection/PatchlevelEventSourcingExtension.php index 5a46de9d..c6d73078 100644 --- a/src/DependencyInjection/PatchlevelEventSourcingExtension.php +++ b/src/DependencyInjection/PatchlevelEventSourcingExtension.php @@ -498,6 +498,8 @@ static function (ChildDefinition $definition): void { $container->register(DoctrineSubscriptionStore::class) ->setArguments([ new Reference('event_sourcing.dbal_connection'), + new Reference('event_sourcing.clock'), + $config['subscription']['store']['options']['table_name'], ]) ->addTag('event_sourcing.doctrine_schema_configurator'); diff --git a/src/DependencyInjection/QueryHandlerCompilerPass.php b/src/DependencyInjection/QueryHandlerCompilerPass.php index c2d069ab..2e00cb55 100644 --- a/src/DependencyInjection/QueryHandlerCompilerPass.php +++ b/src/DependencyInjection/QueryHandlerCompilerPass.php @@ -19,7 +19,10 @@ public function process(ContainerBuilder $container): void return; } - $bus = $container->getParameter('patchlevel_event_sourcing.query_handlers.bus'); + $bus = ServiceAliasResolver::resolve( + $container, + $container->getParameter('patchlevel_event_sourcing.query_handlers.bus'), + ); $subscribers = $container->findTaggedServiceIds('event_sourcing.subscriber'); foreach (array_keys($subscribers) as $subscriberServiceName) { diff --git a/src/DependencyInjection/ServiceAliasResolver.php b/src/DependencyInjection/ServiceAliasResolver.php new file mode 100644 index 00000000..440d27f1 --- /dev/null +++ b/src/DependencyInjection/ServiceAliasResolver.php @@ -0,0 +1,23 @@ +hasAlias($id)) { + return self::resolve( + $container, + (string)$container->getAlias($id), + ); + } + + return $id; + } +} diff --git a/src/DependencyInjection/SubscriberGuardCompilePass.php b/src/DependencyInjection/SubscriberGuardCompilePass.php index 1dd1a766..65b5f2bb 100644 --- a/src/DependencyInjection/SubscriberGuardCompilePass.php +++ b/src/DependencyInjection/SubscriberGuardCompilePass.php @@ -34,7 +34,7 @@ public function process(ContainerBuilder $container): void ); } - $subscriptionConnection = $this->resolveService($container, (string)$argument); + $subscriptionConnection = ServiceAliasResolver::resolve($container, (string)$argument); $subscribers = $container->findTaggedServiceIds('event_sourcing.subscriber'); @@ -48,7 +48,7 @@ public function process(ContainerBuilder $container): void continue; } - if ($subscriptionConnection !== $this->resolveService($container, (string)$argument)) { + if ($subscriptionConnection !== ServiceAliasResolver::resolve($container, (string)$argument)) { continue; } @@ -68,16 +68,4 @@ public function process(ContainerBuilder $container): void } } } - - private function resolveService(ContainerBuilder $container, string $id): string - { - if ($container->hasAlias($id)) { - return $this->resolveService( - $container, - (string)$container->getAlias($id), - ); - } - - return $id; - } } diff --git a/tests/Fixtures/Profile.php b/tests/Fixtures/Profile.php index 5832c8a0..512a36a8 100644 --- a/tests/Fixtures/Profile.php +++ b/tests/Fixtures/Profile.php @@ -16,6 +16,7 @@ class Profile extends BasicAggregateRoot #[Id] private CustomId $id; + /** @param Repository $profileRepository */ #[Handle] public static function create( CreateProfile $command, diff --git a/tests/Unit/DataCollector/EventSourcingCollectorTest.php b/tests/Unit/DataCollector/EventSourcingCollectorTest.php index 34d30d3d..c3b50c01 100644 --- a/tests/Unit/DataCollector/EventSourcingCollectorTest.php +++ b/tests/Unit/DataCollector/EventSourcingCollectorTest.php @@ -67,7 +67,6 @@ public function testCollectData(): void self::assertEquals(ProfileCreated::class, $message['event_class']); self::assertEquals('profile.created', $message['event_name']); self::assertInstanceOf(Data::class, $message['event']); - self::assertIsArray($message['headers']); self::assertCount(3, $message['headers']); self::assertInstanceOf(Data::class, $message['headers'][0]); } diff --git a/tests/Unit/PatchlevelEventSourcingBundleTest.php b/tests/Unit/PatchlevelEventSourcingBundleTest.php index 92e5084e..30b57d1f 100644 --- a/tests/Unit/PatchlevelEventSourcingBundleTest.php +++ b/tests/Unit/PatchlevelEventSourcingBundleTest.php @@ -85,6 +85,7 @@ use Patchlevel\EventSourcing\Subscription\Store\SubscriptionStore; use Patchlevel\EventSourcing\Subscription\Subscriber\MetadataSubscriberAccessorRepository; use Patchlevel\EventSourcingBundle\Command\StoreMigrateCommand; +use Patchlevel\EventSourcingBundle\DependencyInjection\Configuration; use Patchlevel\EventSourcingBundle\DependencyInjection\PatchlevelEventSourcingExtension; use Patchlevel\EventSourcingBundle\EventBus\SymfonyEventBus; use Patchlevel\EventSourcingBundle\PatchlevelEventSourcingBundle; @@ -1553,6 +1554,9 @@ public function testNamedRepository(): void self::assertSame($profileRepository, $namedArgumentProfileRepository); } + /** + * @param array{patchlevel_event_sourcing: array} $config + */ private function compileContainer(ContainerBuilder $container, array $config): void { $bundle = new PatchlevelEventSourcingBundle();