diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
index e8c046a..a728887 100644
--- a/.github/workflows/php.yml
+++ b/.github/workflows/php.yml
@@ -7,21 +7,25 @@ jobs:
matrix:
include:
- symfony-version: 5.4
- php-version: 8.1
+ php-version: 8.2
- symfony-version: 6.2
- php-version: 8.1
+ php-version: 8.2
+ - symfony-version: 6.4
+ php-version: 8.2
+ - symfony-version: 7
+ php-version: 8.2
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Cache composer dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor/
- key: ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
restore-keys: |
- ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
- name: PHP Setup
uses: shivammathur/setup-php@v2
@@ -39,28 +43,28 @@ jobs:
env:
SYMFONY_REQUIRE: ${{ matrix.symfony-version }}
run: |
- composer install --no-interaction --no-scripts --ansi --no-progress --prefer-dist
+ composer update --no-interaction --no-scripts --ansi --no-progress --prefer-dist
phpstan:
strategy:
matrix:
include:
- - symfony-version: 5.4
- php-version: 8.1
+ - symfony-version: 6.4
+ php-version: 8.2
runs-on: ubuntu-latest
needs: install
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Cache composer dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor/
- key: ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
restore-keys: |
- ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
- name: PHP Setup
uses: shivammathur/setup-php@v2
@@ -78,22 +82,22 @@ jobs:
strategy:
matrix:
include:
- - symfony-version: 5.4
- php-version: 8.1
+ - symfony-version: 6.4
+ php-version: 8.2
runs-on: ubuntu-latest
needs: install
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Cache composer dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor/
- key: ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
restore-keys: |
- ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
- name: PHP Setup
uses: shivammathur/setup-php@v2
@@ -111,22 +115,22 @@ jobs:
strategy:
matrix:
include:
- - symfony-version: 5.4
- php-version: 8.1
+ - symfony-version: 6.4
+ php-version: 8.2
runs-on: ubuntu-latest
needs: install
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Cache composer dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor/
- key: ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
restore-keys: |
- ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
- name: PHP Setup
uses: shivammathur/setup-php@v2
@@ -141,13 +145,19 @@ jobs:
vendor/bin/php-cs-fixer fix --config ./.php-cs-fixer.dist.php --dry-run --diff --ansi
test:
+ concurrency:
+ group: ${{ github.head_ref || github.ref }}
strategy:
matrix:
include:
- symfony-version: 5.4
- php-version: 8.1
+ php-version: 8.2
- symfony-version: 6.2
- php-version: 8.1
+ php-version: 8.2
+ - symfony-version: 6.4
+ php-version: 8.2
+ - symfony-version: 7
+ php-version: 8.2
runs-on: ubuntu-latest
needs:
@@ -155,15 +165,15 @@ jobs:
- php-cs-fixer
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Cache composer dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor/
- key: ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
restore-keys: |
- ${{ runner.os }}-composer-s-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}
+ ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.symfony-version }}-${{ matrix.php-version }}-${{ matrix.symfony-version }}
- name: PHP Setup
uses: shivammathur/setup-php@v2
@@ -188,7 +198,7 @@ jobs:
hide_complexity: true
indicators: true
output: both
- thresholds: '70 80'
+ thresholds: '65 80'
- name: Add Coverage PR Comment
uses: marocchino/sticky-pull-request-comment@v2
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index b7dd5b1..ba27550 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -1,65 +1,49 @@
in(__DIR__)
- ->exclude('assets')
+ ->exclude('var')
->exclude('bin')
- ->exclude('config')
- ->exclude('docker')
- ->exclude('files')
->exclude('public')
->exclude('scripts')
- ->exclude('templates')
- ->exclude('tools')
- ->exclude('translations')
- ->exclude('var')
->exclude('vendor');
return (new PhpCsFixer\Config())
->setRules([
- '@PSR2' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'no_superfluous_phpdoc_tags' => false,
- 'ternary_to_null_coalescing' => true,
- 'no_useless_else' => true,
- 'no_useless_return' => true,
+ '@Symfony' => true,
+ 'blank_line_before_statement' => [
+ 'statements' => [
+ 'declare',
+ 'return',
+ 'throw',
+ 'try',
+ 'if',
+ 'for',
+ 'while',
+ 'foreach',
+ ],
+ ],
+ 'cast_spaces' => ['space' => 'none'],
+ 'constant_case' => ['case' => 'lower'],
'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
+ 'phpdoc_align' => false,
'single_line_throw' => false,
- 'yoda_style' => true,
- 'trailing_comma_in_multiline' => ['elements' => ['arrays']],
- 'array_indentation' => true,
- 'no_unused_imports' => true,
- 'ordered_imports' => ['sort_algorithm' => 'alpha'],
- 'single_line_after_imports' => true,
- 'single_import_per_statement' => true,
- 'blank_line_after_opening_tag' => true,
- 'compact_nullable_typehint' => true,
- 'clean_namespace' => true,
- 'cast_spaces' => ['space' => 'single'],
- 'constant_case' => ['case' => 'lower'],
- 'full_opening_tag' => true,
- 'indentation_type' => true,
- 'lowercase_cast' => true,
- 'native_function_casing' => true,
- 'no_alternative_syntax' => true,
- 'new_with_braces' => true,
- 'no_empty_statement' => true,
- 'no_blank_lines_after_phpdoc' => true,
- 'no_closing_tag' => true,
- 'no_short_bool_cast' => true,
- 'no_trailing_whitespace' => true,
- 'no_unset_cast' => true,
- 'phpdoc_align' => ['align' => 'left'],
- 'phpdoc_indent' => true,
- 'phpdoc_annotation_without_dot' => true,
- 'phpdoc_trim' => true,
- 'single_blank_line_at_eof' => true,
- 'short_scalar_cast' => true,
- 'single_class_element_per_statement' => true,
- 'return_type_declaration' => ['space_before' => 'none'],
- 'visibility_required' => true,
- 'PedroTroller/line_break_between_method_arguments' => ['max-args' => false, 'max-length' => 1, 'automatic-argument-merge' => false],
+ 'phpdoc_to_comment' => false,
+ 'phpdoc_types_order' => false,
+ 'phpdoc_scalar' => false,
+ 'phpdoc_types' => false,
+ 'increment_style' => false,
+ 'ordered_class_elements' => true,
+ 'fully_qualified_strict_types' => false,
+ 'nullable_type_declaration_for_default_null_value' => false,
+ 'nullable_type_declaration' => ['syntax' => 'union'],
+ 'ordered_types' => ['sort_algorithm' => 'none', 'null_adjustment' => 'always_last'],
+ 'PedroTroller/line_break_between_method_arguments' => [
+ 'max-args' => false,
+ 'max-length' => 1,
+ 'automatic-argument-merge' => false,
+ 'inline-attributes' => true,
+ ],
])
->setFinder($finder)
- ->registerCustomFixers(new PedroTroller\CS\Fixer\Fixers())
-;
+ ->registerCustomFixers(new \PedroTroller\CS\Fixer\Fixers());
diff --git a/composer.json b/composer.json
index cf04c28..4caa93b 100644
--- a/composer.json
+++ b/composer.json
@@ -28,23 +28,24 @@
"require": {
"php": "^8.1",
"doctrine/doctrine-bundle": "^1.12|^2.0",
- "doctrine/orm": "^2|^3",
- "symfony/framework-bundle": "^5.4|^6.2",
- "symfony/event-dispatcher": "^5.4|^6.2",
- "symfony/property-access": "^5.4|^6.2",
- "symfony/http-kernel": "^5.4|^6.2"
+ "doctrine/orm": "^2.14|^3",
+ "symfony/framework-bundle": "^5.4|^6.2|^7",
+ "symfony/event-dispatcher": "^5.4|^6.2|^7",
+ "symfony/property-access": "^5.4|^6.2|^7",
+ "symfony/http-kernel": "^5.4|^6.2|^7",
+ "doctrine/common": "^2|^3"
},
"require-dev": {
- "dama/doctrine-test-bundle": "^6",
+ "dama/doctrine-test-bundle": "^8|^7",
"doctrine/doctrine-fixtures-bundle": "^3",
"friendsofphp/php-cs-fixer": "^3",
"pedrotroller/php-cs-custom-fixer": "^2",
- "phpunit/phpunit": "^9.5",
+ "phpunit/phpunit": "^10",
"vimeo/psalm": "^5",
"phpstan/phpstan": "^1",
- "symfony/phpunit-bridge": "^5.4|^6.2",
- "matthiasnoback/symfony-dependency-injection-test": "^4.",
- "jetbrains/phpstorm-attributes": "^1.0"
+ "matthiasnoback/symfony-dependency-injection-test": "^5",
+ "jetbrains/phpstorm-attributes": "^1.0",
+ "pkly/phpunit-service-create-trait": "^1.0"
},
"extra": {
"symfony": {
diff --git a/composer.lock b/composer.lock
index 8482733..9312d5d 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": "bd11f8c919c7b4d40eb0929d7f9932e4",
+ "content-hash": "c13f9df7aaf70fce9c0a1b5ec8c900a9",
"packages": [
{
"name": "doctrine/cache",
@@ -101,16 +101,16 @@
},
{
"name": "doctrine/collections",
- "version": "2.1.3",
+ "version": "2.2.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
- "reference": "3023e150f90a38843856147b58190aa8b46cc155"
+ "reference": "d8af7f248c74f195f7347424600fd9e17b57af59"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/3023e150f90a38843856147b58190aa8b46cc155",
- "reference": "3023e150f90a38843856147b58190aa8b46cc155",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59",
+ "reference": "d8af7f248c74f195f7347424600fd9e17b57af59",
"shasum": ""
},
"require": {
@@ -118,11 +118,11 @@
"php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^10.0",
+ "doctrine/coding-standard": "^12",
"ext-json": "*",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^9.5",
+ "phpunit/phpunit": "^10.5",
"vimeo/psalm": "^5.11"
},
"type": "library",
@@ -167,7 +167,7 @@
],
"support": {
"issues": "https://github.com/doctrine/collections/issues",
- "source": "https://github.com/doctrine/collections/tree/2.1.3"
+ "source": "https://github.com/doctrine/collections/tree/2.2.2"
},
"funding": [
{
@@ -183,20 +183,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-06T15:15:36+00:00"
+ "time": "2024-04-18T06:56:21+00:00"
},
{
"name": "doctrine/common",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/common.git",
- "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced"
+ "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced",
- "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced",
+ "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a",
+ "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a",
"shasum": ""
},
"require": {
@@ -258,7 +258,7 @@
],
"support": {
"issues": "https://github.com/doctrine/common/issues",
- "source": "https://github.com/doctrine/common/tree/3.4.3"
+ "source": "https://github.com/doctrine/common/tree/3.4.4"
},
"funding": [
{
@@ -274,51 +274,46 @@
"type": "tidelift"
}
],
- "time": "2022-10-09T11:47:59+00:00"
+ "time": "2024-04-16T13:35:33+00:00"
},
{
"name": "doctrine/dbal",
- "version": "3.6.6",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "63646ffd71d1676d2f747f871be31b7e921c7864"
+ "reference": "9e588fe1f38a443cb17de6b86b803d9e028e2156"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864",
- "reference": "63646ffd71d1676d2f747f871be31b7e921c7864",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e588fe1f38a443cb17de6b86b803d9e028e2156",
+ "reference": "9e588fe1f38a443cb17de6b86b803d9e028e2156",
"shasum": ""
},
"require": {
- "composer-runtime-api": "^2",
- "doctrine/cache": "^1.11|^2.0",
"doctrine/deprecations": "^0.5.3|^1",
- "doctrine/event-manager": "^1|^2",
- "php": "^7.4 || ^8.0",
+ "php": "^8.1",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
- "jetbrains/phpstorm-stubs": "2023.1",
- "phpstan/phpstan": "1.10.29",
+ "jetbrains/phpstorm-stubs": "2023.2",
+ "phpstan/phpstan": "1.10.58",
+ "phpstan/phpstan-phpunit": "1.3.15",
"phpstan/phpstan-strict-rules": "^1.5",
- "phpunit/phpunit": "9.6.9",
+ "phpunit/phpunit": "10.5.9",
"psalm/plugin-phpunit": "0.18.4",
"slevomat/coding-standard": "8.13.1",
- "squizlabs/php_codesniffer": "3.7.2",
- "symfony/cache": "^5.4|^6.0",
- "symfony/console": "^4.4|^5.4|^6.0",
- "vimeo/psalm": "4.30.0"
+ "squizlabs/php_codesniffer": "3.9.0",
+ "symfony/cache": "^6.3.8|^7.0",
+ "symfony/console": "^5.4|^6.3|^7.0",
+ "vimeo/psalm": "5.21.1"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
},
- "bin": [
- "bin/doctrine-dbal"
- ],
"type": "library",
"autoload": {
"psr-4": {
@@ -371,7 +366,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.6.6"
+ "source": "https://github.com/doctrine/dbal/tree/4.0.1"
},
"funding": [
{
@@ -387,20 +382,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-17T05:38:17+00:00"
+ "time": "2024-03-03T15:59:11+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "v1.1.1",
+ "version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
- "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"shasum": ""
},
"require": {
@@ -432,64 +427,68 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
},
- "time": "2023-06-03T09:27:29+00:00"
+ "time": "2024-01-30T19:34:25+00:00"
},
{
"name": "doctrine/doctrine-bundle",
- "version": "2.10.2",
+ "version": "2.12.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
- "reference": "f28b1f78de3a2938ff05cfe751233097624cc756"
+ "reference": "5418e811a14724068e95e0ba43353b903ada530f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f28b1f78de3a2938ff05cfe751233097624cc756",
- "reference": "f28b1f78de3a2938ff05cfe751233097624cc756",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f",
+ "reference": "5418e811a14724068e95e0ba43353b903ada530f",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.11 || ^2.0",
- "doctrine/dbal": "^3.6.0",
+ "doctrine/dbal": "^3.7.0 || ^4.0",
"doctrine/persistence": "^2.2 || ^3",
"doctrine/sql-formatter": "^1.0.1",
"php": "^7.4 || ^8.0",
- "symfony/cache": "^5.4 || ^6.0",
- "symfony/config": "^5.4 || ^6.0",
- "symfony/console": "^5.4 || ^6.0",
- "symfony/dependency-injection": "^5.4 || ^6.0",
+ "symfony/cache": "^5.4 || ^6.0 || ^7.0",
+ "symfony/config": "^5.4 || ^6.0 || ^7.0",
+ "symfony/console": "^5.4 || ^6.0 || ^7.0",
+ "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
- "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7",
- "symfony/framework-bundle": "^5.4 || ^6.0",
+ "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0",
+ "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0",
+ "symfony/polyfill-php80": "^1.15",
"symfony/service-contracts": "^1.1.1 || ^2.0 || ^3"
},
"conflict": {
"doctrine/annotations": ">=3.0",
- "doctrine/orm": "<2.11 || >=3.0",
+ "doctrine/orm": "<2.17 || >=4.0",
"twig/twig": "<1.34 || >=2.0 <2.4"
},
"require-dev": {
"doctrine/annotations": "^1 || ^2",
- "doctrine/coding-standard": "^9.0",
+ "doctrine/coding-standard": "^12",
"doctrine/deprecations": "^1.0",
- "doctrine/orm": "^2.11 || ^3.0",
+ "doctrine/orm": "^2.17 || ^3.0",
"friendsofphp/proxy-manager-lts": "^1.0",
- "phpunit/phpunit": "^9.5.26 || ^10.0",
+ "phpunit/phpunit": "^9.5.26",
"psalm/plugin-phpunit": "^0.18.4",
- "psalm/plugin-symfony": "^4",
+ "psalm/plugin-symfony": "^5",
"psr/log": "^1.1.4 || ^2.0 || ^3.0",
- "symfony/phpunit-bridge": "^6.1",
- "symfony/property-info": "^5.4 || ^6.0",
- "symfony/proxy-manager-bridge": "^5.4 || ^6.0",
- "symfony/security-bundle": "^5.4 || ^6.0",
- "symfony/twig-bridge": "^5.4 || ^6.0",
- "symfony/validator": "^5.4 || ^6.0",
- "symfony/web-profiler-bundle": "^5.4 || ^6.0",
- "symfony/yaml": "^5.4 || ^6.0",
+ "symfony/phpunit-bridge": "^6.1 || ^7.0",
+ "symfony/property-info": "^5.4 || ^6.0 || ^7.0",
+ "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0",
+ "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0",
+ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0",
+ "symfony/string": "^5.4 || ^6.0 || ^7.0",
+ "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0",
+ "symfony/validator": "^5.4 || ^6.0 || ^7.0",
+ "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0",
+ "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
"twig/twig": "^1.34 || ^2.12 || ^3.0",
- "vimeo/psalm": "^4.30"
+ "vimeo/psalm": "^5.15"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
@@ -499,7 +498,7 @@
"type": "symfony-bundle",
"autoload": {
"psr-4": {
- "Doctrine\\Bundle\\DoctrineBundle\\": ""
+ "Doctrine\\Bundle\\DoctrineBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -534,7 +533,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
- "source": "https://github.com/doctrine/DoctrineBundle/tree/2.10.2"
+ "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0"
},
"funding": [
{
@@ -550,7 +549,7 @@
"type": "tidelift"
}
],
- "time": "2023-08-06T09:31:40+00:00"
+ "time": "2024-03-19T07:20:37+00:00"
},
{
"name": "doctrine/event-manager",
@@ -645,16 +644,16 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.8",
+ "version": "2.0.10",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
"shasum": ""
},
"require": {
@@ -716,7 +715,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.8"
+ "source": "https://github.com/doctrine/inflector/tree/2.0.10"
},
"funding": [
{
@@ -732,7 +731,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-16T13:40:37+00:00"
+ "time": "2024-02-18T20:23:39+00:00"
},
{
"name": "doctrine/instantiator",
@@ -806,28 +805,27 @@
},
{
"name": "doctrine/lexer",
- "version": "2.1.0",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
- "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.1 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^10",
- "phpstan/phpstan": "^1.3",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
"psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^4.11 || ^5.0"
+ "vimeo/psalm": "^5.21"
},
"type": "library",
"autoload": {
@@ -864,7 +862,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/2.1.0"
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
},
"funding": [
{
@@ -880,69 +878,56 @@
"type": "tidelift"
}
],
- "time": "2022-12-14T08:49:07+00:00"
+ "time": "2024-02-05T11:56:58+00:00"
},
{
"name": "doctrine/orm",
- "version": "2.16.2",
+ "version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0"
+ "reference": "f79d166a4e844beb9389f23bdb44abdbf58cec38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/17500f56eaa930f5cd14d765bc2cd851c7d37cc0",
- "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/f79d166a4e844beb9389f23bdb44abdbf58cec38",
+ "reference": "f79d166a4e844beb9389f23bdb44abdbf58cec38",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
- "doctrine/cache": "^1.12.1 || ^2.1.1",
- "doctrine/collections": "^1.5 || ^2.1",
- "doctrine/common": "^3.0.3",
- "doctrine/dbal": "^2.13.1 || ^3.2",
+ "doctrine/collections": "^2.2",
+ "doctrine/dbal": "^3.8.2 || ^4",
"doctrine/deprecations": "^0.5.3 || ^1",
"doctrine/event-manager": "^1.2 || ^2",
"doctrine/inflector": "^1.4 || ^2.0",
"doctrine/instantiator": "^1.3 || ^2",
- "doctrine/lexer": "^2",
- "doctrine/persistence": "^2.4 || ^3",
+ "doctrine/lexer": "^3",
+ "doctrine/persistence": "^3.3.1",
"ext-ctype": "*",
- "php": "^7.1 || ^8.0",
+ "php": "^8.1",
"psr/cache": "^1 || ^2 || ^3",
- "symfony/console": "^4.2 || ^5.0 || ^6.0",
- "symfony/polyfill-php72": "^1.23",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "doctrine/annotations": "<1.13 || >= 3.0"
+ "symfony/console": "^5.4 || ^6.0 || ^7.0",
+ "symfony/var-exporter": "^6.3.9 || ^7.0"
},
"require-dev": {
- "doctrine/annotations": "^1.13 || ^2",
- "doctrine/coding-standard": "^9.0.2 || ^12.0",
- "phpbench/phpbench": "^0.16.10 || ^1.0",
- "phpstan/phpstan": "~1.4.10 || 1.10.28",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
+ "doctrine/coding-standard": "^12.0",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/phpstan": "1.10.59",
+ "phpunit/phpunit": "^10.4.0",
"psr/log": "^1 || ^2 || ^3",
"squizlabs/php_codesniffer": "3.7.2",
- "symfony/cache": "^4.4 || ^5.4 || ^6.0",
- "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2",
- "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
- "vimeo/psalm": "4.30.0 || 5.14.1"
+ "symfony/cache": "^5.4 || ^6.2 || ^7.0",
+ "vimeo/psalm": "5.22.2"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
- "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0",
- "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
+ "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0"
},
- "bin": [
- "bin/doctrine"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\ORM\\": "lib/Doctrine/ORM"
+ "Doctrine\\ORM\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -979,22 +964,22 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/2.16.2"
+ "source": "https://github.com/doctrine/orm/tree/3.1.2"
},
- "time": "2023-08-27T18:21:56+00:00"
+ "time": "2024-04-15T14:20:40+00:00"
},
{
"name": "doctrine/persistence",
- "version": "3.2.0",
+ "version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
- "reference": "63fee8c33bef740db6730eb2a750cd3da6495603"
+ "reference": "477da35bd0255e032826f440b94b3e37f2d56f42"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/persistence/zipball/63fee8c33bef740db6730eb2a750cd3da6495603",
- "reference": "63fee8c33bef740db6730eb2a750cd3da6495603",
+ "url": "https://api.github.com/repos/doctrine/persistence/zipball/477da35bd0255e032826f440b94b3e37f2d56f42",
+ "reference": "477da35bd0255e032826f440b94b3e37f2d56f42",
"shasum": ""
},
"require": {
@@ -1063,7 +1048,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
- "source": "https://github.com/doctrine/persistence/tree/3.2.0"
+ "source": "https://github.com/doctrine/persistence/tree/3.3.2"
},
"funding": [
{
@@ -1079,20 +1064,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-17T18:32:04+00:00"
+ "time": "2024-03-12T14:54:36+00:00"
},
{
"name": "doctrine/sql-formatter",
- "version": "1.1.3",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/sql-formatter.git",
- "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5"
+ "reference": "a321d114e0a18e6497f8a2cd6f890e000cc17ecc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/25a06c7bf4c6b8218f47928654252863ffc890a5",
- "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5",
+ "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a321d114e0a18e6497f8a2cd6f890e000cc17ecc",
+ "reference": "a321d114e0a18e6497f8a2cd6f890e000cc17ecc",
"shasum": ""
},
"require": {
@@ -1129,9 +1114,9 @@
],
"support": {
"issues": "https://github.com/doctrine/sql-formatter/issues",
- "source": "https://github.com/doctrine/sql-formatter/tree/1.1.3"
+ "source": "https://github.com/doctrine/sql-formatter/tree/1.2.0"
},
- "time": "2022-05-23T21:33:49+00:00"
+ "time": "2023-08-16T21:49:04+00:00"
},
{
"name": "psr/cache",
@@ -1337,31 +1322,31 @@
},
{
"name": "symfony/cache",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3"
+ "reference": "2d0d3f92c74c445410d05374908b03e0a1131e2b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/e60d00b4f633efa4c1ef54e77c12762d9073e7b3",
- "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/2d0d3f92c74c445410d05374908b03e0a1131e2b",
+ "reference": "2d0d3f92c74c445410d05374908b03e0a1131e2b",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"psr/cache": "^2.0|^3.0",
"psr/log": "^1.1|^2|^3",
"symfony/cache-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3",
- "symfony/var-exporter": "^6.2.10"
+ "symfony/var-exporter": "^6.4|^7.0"
},
"conflict": {
- "doctrine/dbal": "<2.13.1",
- "symfony/dependency-injection": "<5.4",
- "symfony/http-kernel": "<5.4",
- "symfony/var-dumper": "<5.4"
+ "doctrine/dbal": "<3.6",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/http-kernel": "<6.4",
+ "symfony/var-dumper": "<6.4"
},
"provide": {
"psr/cache-implementation": "2.0|3.0",
@@ -1370,15 +1355,15 @@
},
"require-dev": {
"cache/integration-tests": "dev-master",
- "doctrine/dbal": "^2.13.1|^3.0",
+ "doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/filesystem": "^5.4|^6.0",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/messenger": "^5.4|^6.0",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/filesystem": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
+ "symfony/var-dumper": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -1413,7 +1398,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v6.3.4"
+ "source": "https://github.com/symfony/cache/tree/v7.0.6"
},
"funding": [
{
@@ -1429,20 +1414,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-05T09:10:27+00:00"
+ "time": "2024-03-27T19:55:25+00:00"
},
{
"name": "symfony/cache-contracts",
- "version": "v3.3.0",
+ "version": "v3.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
- "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b"
+ "reference": "2c9db6509a1b21dad229606897639d3284f54b2a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b",
- "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2c9db6509a1b21dad229606897639d3284f54b2a",
+ "reference": "2c9db6509a1b21dad229606897639d3284f54b2a",
"shasum": ""
},
"require": {
@@ -1489,7 +1474,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/cache-contracts/tree/v3.4.2"
},
"funding": [
{
@@ -1505,38 +1490,38 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/config",
- "version": "v6.3.2",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467"
+ "reference": "7fc7e18a73ec8125fd95928c0340470d64760deb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
- "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
+ "url": "https://api.github.com/repos/symfony/config/zipball/7fc7e18a73ec8125fd95928c0340470d64760deb",
+ "reference": "7fc7e18a73ec8125fd95928c0340470d64760deb",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/filesystem": "^5.4|^6.0",
+ "symfony/filesystem": "^6.4|^7.0",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
- "symfony/finder": "<5.4",
+ "symfony/finder": "<6.4",
"symfony/service-contracts": "<2.5"
},
"require-dev": {
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0",
- "symfony/messenger": "^5.4|^6.0",
+ "symfony/event-dispatcher": "^6.4|^7.0",
+ "symfony/finder": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/yaml": "^5.4|^6.0"
+ "symfony/yaml": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -1564,7 +1549,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/v6.3.2"
+ "source": "https://github.com/symfony/config/tree/v7.0.6"
},
"funding": [
{
@@ -1580,47 +1565,50 @@
"type": "tidelift"
}
],
- "time": "2023-07-19T20:22:16+00:00"
+ "time": "2024-03-27T19:55:25+00:00"
},
{
"name": "symfony/console",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6"
+ "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6",
- "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6",
+ "url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
+ "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
+ "php": ">=8.2",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^5.4|^6.0"
+ "symfony/string": "^6.4|^7.0"
},
"conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/dotenv": "<5.4",
- "symfony/event-dispatcher": "<5.4",
- "symfony/lock": "<5.4",
- "symfony/process": "<5.4"
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/lock": "^5.4|^6.0",
- "symfony/process": "^5.4|^6.0",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/lock": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0",
+ "symfony/stopwatch": "^6.4|^7.0",
+ "symfony/var-dumper": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -1654,7 +1642,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.3.4"
+ "source": "https://github.com/symfony/console/tree/v7.0.6"
},
"funding": [
{
@@ -1670,44 +1658,43 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T10:10:12+00:00"
+ "time": "2024-04-01T11:04:53+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "68a5a9570806a087982f383f6109c5e925892a49"
+ "reference": "ff57b5c7d518c39eeb4e69dc0d1ec70723a117b9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/68a5a9570806a087982f383f6109c5e925892a49",
- "reference": "68a5a9570806a087982f383f6109c5e925892a49",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ff57b5c7d518c39eeb4e69dc0d1ec70723a117b9",
+ "reference": "ff57b5c7d518c39eeb4e69dc0d1ec70723a117b9",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/service-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^6.2.10"
+ "symfony/service-contracts": "^3.3",
+ "symfony/var-exporter": "^6.4|^7.0"
},
"conflict": {
"ext-psr": "<1.1|>=2",
- "symfony/config": "<6.1",
- "symfony/finder": "<5.4",
- "symfony/proxy-manager-bridge": "<6.3",
- "symfony/yaml": "<5.4"
+ "symfony/config": "<6.4",
+ "symfony/finder": "<6.4",
+ "symfony/yaml": "<6.4"
},
"provide": {
"psr/container-implementation": "1.1|2.0",
"symfony/service-implementation": "1.1|2.0|3.0"
},
"require-dev": {
- "symfony/config": "^6.1",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/yaml": "^5.4|^6.0"
+ "symfony/config": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/yaml": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -1735,7 +1722,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/v6.3.4"
+ "source": "https://github.com/symfony/dependency-injection/tree/v7.0.6"
},
"funding": [
{
@@ -1751,11 +1738,11 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T17:55:17+00:00"
+ "time": "2024-03-28T09:20:36+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.3.0",
+ "version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
@@ -1802,7 +1789,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
},
"funding": [
{
@@ -1822,69 +1809,65 @@
},
{
"name": "symfony/doctrine-bridge",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "589eeeb93669739ec1d8bd4593e4972d94e0981d"
+ "reference": "929527febf8e134eaba620de1f9396da1db0df85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/589eeeb93669739ec1d8bd4593e4972d94e0981d",
- "reference": "589eeeb93669739ec1d8bd4593e4972d94e0981d",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/929527febf8e134eaba620de1f9396da1db0df85",
+ "reference": "929527febf8e134eaba620de1f9396da1db0df85",
"shasum": ""
},
"require": {
- "doctrine/event-manager": "^1.2|^2",
- "doctrine/persistence": "^2|^3",
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
+ "doctrine/event-manager": "^2",
+ "doctrine/persistence": "^3.1",
+ "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
- "doctrine/annotations": "<1.13.1",
- "doctrine/dbal": "<2.13.1",
+ "doctrine/dbal": "<3.6",
"doctrine/lexer": "<1.1",
- "doctrine/orm": "<2.12",
- "symfony/cache": "<5.4",
- "symfony/dependency-injection": "<6.2",
- "symfony/form": "<5.4.21|>=6,<6.2.7",
- "symfony/http-foundation": "<6.3",
- "symfony/http-kernel": "<6.2",
- "symfony/lock": "<6.3",
- "symfony/messenger": "<5.4",
- "symfony/property-info": "<5.4",
- "symfony/security-bundle": "<5.4",
- "symfony/security-core": "<6.0",
- "symfony/validator": "<5.4.25|>=6,<6.2.12|>=6.3,<6.3.1"
+ "doctrine/orm": "<2.15",
+ "symfony/cache": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/form": "<6.4.6|>=7,<7.0.6",
+ "symfony/http-foundation": "<6.4",
+ "symfony/http-kernel": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/property-info": "<6.4",
+ "symfony/security-bundle": "<6.4",
+ "symfony/security-core": "<6.4",
+ "symfony/validator": "<6.4"
},
"require-dev": {
- "doctrine/annotations": "^1.13.1|^2",
"doctrine/collections": "^1.0|^2.0",
"doctrine/data-fixtures": "^1.1",
- "doctrine/dbal": "^2.13.1|^3.0",
- "doctrine/orm": "^2.12",
+ "doctrine/dbal": "^3.6|^4",
+ "doctrine/orm": "^2.15|^3",
"psr/log": "^1|^2|^3",
- "symfony/cache": "^5.4|^6.0",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^6.2",
- "symfony/doctrine-messenger": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/form": "^5.4.21|^6.2.7",
- "symfony/http-kernel": "^6.3",
- "symfony/lock": "^6.3",
- "symfony/messenger": "^5.4|^6.0",
- "symfony/property-access": "^5.4|^6.0",
- "symfony/property-info": "^5.4|^6.0",
- "symfony/proxy-manager-bridge": "^5.4|^6.0",
- "symfony/security-core": "^6.0",
- "symfony/stopwatch": "^5.4|^6.0",
- "symfony/translation": "^5.4|^6.0",
- "symfony/uid": "^5.4|^6.0",
- "symfony/validator": "^5.4.25|~6.2.12|^6.3.1",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/cache": "^6.4|^7.0",
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/doctrine-messenger": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/form": "^6.4.6|^7.0.6",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/lock": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
+ "symfony/property-access": "^6.4|^7.0",
+ "symfony/property-info": "^6.4|^7.0",
+ "symfony/security-core": "^6.4|^7.0",
+ "symfony/stopwatch": "^6.4|^7.0",
+ "symfony/translation": "^6.4|^7.0",
+ "symfony/uid": "^6.4|^7.0",
+ "symfony/validator": "^6.4|^7.0",
+ "symfony/var-dumper": "^6.4|^7.0"
},
"type": "symfony-bridge",
"autoload": {
@@ -1912,7 +1895,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.4"
+ "source": "https://github.com/symfony/doctrine-bridge/tree/v7.0.6"
},
"funding": [
{
@@ -1928,34 +1911,35 @@
"type": "tidelift"
}
],
- "time": "2023-08-08T10:40:25+00:00"
+ "time": "2024-03-19T09:29:21+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v6.3.2",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a"
+ "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a",
- "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/46a4cc138f799886d4bd70477c55c699d3e9dfc8",
+ "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/var-dumper": "^6.4|^7.0"
},
"conflict": {
- "symfony/deprecation-contracts": "<2.5"
+ "symfony/deprecation-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/serializer": "^5.4|^6.0"
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/serializer": "^6.4|^7.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@@ -1986,7 +1970,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/v6.3.2"
+ "source": "https://github.com/symfony/error-handler/tree/v7.0.6"
},
"funding": [
{
@@ -2002,28 +1986,28 @@
"type": "tidelift"
}
],
- "time": "2023-07-16T17:05:46+00:00"
+ "time": "2024-03-19T11:57:22+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.3.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e"
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
- "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e",
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
- "symfony/dependency-injection": "<5.4",
+ "symfony/dependency-injection": "<6.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@@ -2032,13 +2016,13 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/error-handler": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-foundation": "^5.4|^6.0",
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/error-handler": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^5.4|^6.0"
+ "symfony/stopwatch": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -2066,7 +2050,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/v6.3.2"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3"
},
"funding": [
{
@@ -2082,20 +2066,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-06T06:56:43+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.3.0",
+ "version": "v3.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
+ "reference": "4e64b49bf370ade88e567de29465762e316e4224"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
- "reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224",
+ "reference": "4e64b49bf370ade88e567de29465762e316e4224",
"shasum": ""
},
"require": {
@@ -2142,7 +2126,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2"
},
"funding": [
{
@@ -2158,24 +2142,24 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v6.3.1",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae"
+ "reference": "408105dff4c104454100730bdfd1a9cdd993f04d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
- "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d",
+ "reference": "408105dff4c104454100730bdfd1a9cdd993f04d",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
@@ -2205,7 +2189,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.3.1"
+ "source": "https://github.com/symfony/filesystem/tree/v7.0.6"
},
"funding": [
{
@@ -2221,27 +2205,27 @@
"type": "tidelift"
}
],
- "time": "2023-06-01T08:30:39+00:00"
+ "time": "2024-03-21T19:37:36+00:00"
},
{
"name": "symfony/finder",
- "version": "v6.3.3",
+ "version": "v7.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e"
+ "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e",
- "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
+ "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "symfony/filesystem": "^6.0"
+ "symfony/filesystem": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -2269,7 +2253,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.3.3"
+ "source": "https://github.com/symfony/finder/tree/v7.0.0"
},
"funding": [
{
@@ -2285,107 +2269,109 @@
"type": "tidelift"
}
],
- "time": "2023-07-31T08:31:44+00:00"
+ "time": "2023-10-31T17:59:56+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "f822f54ff05cd88878910b4559f66c12176d952c"
+ "reference": "5ebf6771f92d135c2bdbda7133998feb74713658"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f822f54ff05cd88878910b4559f66c12176d952c",
- "reference": "f822f54ff05cd88878910b4559f66c12176d952c",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/5ebf6771f92d135c2bdbda7133998feb74713658",
+ "reference": "5ebf6771f92d135c2bdbda7133998feb74713658",
"shasum": ""
},
"require": {
"composer-runtime-api": ">=2.1",
"ext-xml": "*",
- "php": ">=8.1",
- "symfony/cache": "^5.4|^6.0",
- "symfony/config": "^6.1",
- "symfony/dependency-injection": "^6.3.1",
+ "php": ">=8.2",
+ "symfony/cache": "^6.4|^7.0",
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.1",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/filesystem": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0",
- "symfony/http-foundation": "^6.3",
- "symfony/http-kernel": "^6.3",
+ "symfony/error-handler": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^6.4|^7.0",
+ "symfony/filesystem": "^6.4|^7.0",
+ "symfony/finder": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/routing": "^5.4|^6.0"
+ "symfony/routing": "^6.4|^7.0"
},
"conflict": {
- "doctrine/annotations": "<1.13.1",
"doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
- "symfony/asset": "<5.4",
- "symfony/clock": "<6.3",
- "symfony/console": "<5.4",
- "symfony/dom-crawler": "<6.3",
- "symfony/dotenv": "<5.4",
- "symfony/form": "<5.4",
- "symfony/http-client": "<6.3",
- "symfony/lock": "<5.4",
- "symfony/mailer": "<5.4",
- "symfony/messenger": "<6.3",
- "symfony/mime": "<6.2",
- "symfony/property-access": "<5.4",
- "symfony/property-info": "<5.4",
- "symfony/security-core": "<5.4",
- "symfony/security-csrf": "<5.4",
- "symfony/serializer": "<6.3",
- "symfony/stopwatch": "<5.4",
- "symfony/translation": "<6.2.8",
- "symfony/twig-bridge": "<5.4",
- "symfony/twig-bundle": "<5.4",
- "symfony/validator": "<6.3",
- "symfony/web-profiler-bundle": "<5.4",
- "symfony/workflow": "<5.4"
+ "symfony/asset": "<6.4",
+ "symfony/asset-mapper": "<6.4",
+ "symfony/clock": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dom-crawler": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/form": "<6.4",
+ "symfony/http-client": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/mailer": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/mime": "<6.4",
+ "symfony/property-access": "<6.4",
+ "symfony/property-info": "<6.4",
+ "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4",
+ "symfony/security-core": "<6.4",
+ "symfony/security-csrf": "<6.4",
+ "symfony/serializer": "<6.4",
+ "symfony/stopwatch": "<6.4",
+ "symfony/translation": "<6.4",
+ "symfony/twig-bridge": "<6.4",
+ "symfony/twig-bundle": "<6.4",
+ "symfony/validator": "<6.4",
+ "symfony/web-profiler-bundle": "<6.4",
+ "symfony/workflow": "<6.4"
},
"require-dev": {
- "doctrine/annotations": "^1.13.1|^2",
"doctrine/persistence": "^1.3|^2|^3",
+ "dragonmantank/cron-expression": "^3.1",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/asset": "^5.4|^6.0",
- "symfony/asset-mapper": "^6.3",
- "symfony/browser-kit": "^5.4|^6.0",
- "symfony/clock": "^6.2",
- "symfony/console": "^5.4.9|^6.0.9",
- "symfony/css-selector": "^5.4|^6.0",
- "symfony/dom-crawler": "^6.3",
- "symfony/dotenv": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/form": "^5.4|^6.0",
- "symfony/html-sanitizer": "^6.1",
- "symfony/http-client": "^6.3",
- "symfony/lock": "^5.4|^6.0",
- "symfony/mailer": "^5.4|^6.0",
- "symfony/messenger": "^6.3",
- "symfony/mime": "^6.2",
- "symfony/notifier": "^5.4|^6.0",
+ "seld/jsonlint": "^1.10",
+ "symfony/asset": "^6.4|^7.0",
+ "symfony/asset-mapper": "^6.4|^7.0",
+ "symfony/browser-kit": "^6.4|^7.0",
+ "symfony/clock": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0",
+ "symfony/css-selector": "^6.4|^7.0",
+ "symfony/dom-crawler": "^6.4|^7.0",
+ "symfony/dotenv": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/form": "^6.4|^7.0",
+ "symfony/html-sanitizer": "^6.4|^7.0",
+ "symfony/http-client": "^6.4|^7.0",
+ "symfony/lock": "^6.4|^7.0",
+ "symfony/mailer": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
+ "symfony/mime": "^6.4|^7.0",
+ "symfony/notifier": "^6.4|^7.0",
"symfony/polyfill-intl-icu": "~1.0",
- "symfony/process": "^5.4|^6.0",
- "symfony/property-info": "^5.4|^6.0",
- "symfony/rate-limiter": "^5.4|^6.0",
- "symfony/scheduler": "^6.3",
- "symfony/security-bundle": "^5.4|^6.0",
- "symfony/semaphore": "^5.4|^6.0",
- "symfony/serializer": "^6.3",
- "symfony/stopwatch": "^5.4|^6.0",
- "symfony/string": "^5.4|^6.0",
- "symfony/translation": "^6.2.8",
- "symfony/twig-bundle": "^5.4|^6.0",
- "symfony/uid": "^5.4|^6.0",
- "symfony/validator": "^6.3",
- "symfony/web-link": "^5.4|^6.0",
- "symfony/workflow": "^5.4|^6.0",
- "symfony/yaml": "^5.4|^6.0",
- "twig/twig": "^2.10|^3.0"
+ "symfony/process": "^6.4|^7.0",
+ "symfony/property-info": "^6.4|^7.0",
+ "symfony/rate-limiter": "^6.4|^7.0",
+ "symfony/scheduler": "^6.4.4|^7.0.4",
+ "symfony/security-bundle": "^6.4|^7.0",
+ "symfony/semaphore": "^6.4|^7.0",
+ "symfony/serializer": "^6.4|^7.0",
+ "symfony/stopwatch": "^6.4|^7.0",
+ "symfony/string": "^6.4|^7.0",
+ "symfony/translation": "^6.4|^7.0",
+ "symfony/twig-bundle": "^6.4|^7.0",
+ "symfony/uid": "^6.4|^7.0",
+ "symfony/validator": "^6.4|^7.0",
+ "symfony/web-link": "^6.4|^7.0",
+ "symfony/workflow": "^6.4|^7.0",
+ "symfony/yaml": "^6.4|^7.0",
+ "twig/twig": "^3.0.4"
},
"type": "symfony-bundle",
"autoload": {
@@ -2413,7 +2399,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/v6.3.4"
+ "source": "https://github.com/symfony/framework-bundle/tree/v7.0.6"
},
"funding": [
{
@@ -2429,40 +2415,40 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T18:04:38+00:00"
+ "time": "2024-03-27T19:55:25+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "cac1556fdfdf6719668181974104e6fcfa60e844"
+ "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844",
- "reference": "cac1556fdfdf6719668181974104e6fcfa60e844",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8789625dcf36e5fbf753014678a1e090f1bc759c",
+ "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
+ "php": ">=8.2",
"symfony/polyfill-mbstring": "~1.1",
"symfony/polyfill-php83": "^1.27"
},
"conflict": {
- "symfony/cache": "<6.2"
+ "doctrine/dbal": "<3.6",
+ "symfony/cache": "<6.4"
},
"require-dev": {
- "doctrine/dbal": "^2.13.1|^3.0",
+ "doctrine/dbal": "^3.6|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
- "symfony/mime": "^5.4|^6.0",
- "symfony/rate-limiter": "^5.2|^6.0"
+ "symfony/cache": "^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",
+ "symfony/mime": "^6.4|^7.0",
+ "symfony/rate-limiter": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -2490,7 +2476,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.3.4"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.0.6"
},
"funding": [
{
@@ -2506,76 +2492,75 @@
"type": "tidelift"
}
],
- "time": "2023-08-22T08:20:46+00:00"
+ "time": "2024-03-19T11:46:48+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb"
+ "reference": "34c872391046d59af804af62d4573b829cfe4824"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb",
- "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34c872391046d59af804af62d4573b829cfe4824",
+ "reference": "34c872391046d59af804af62d4573b829cfe4824",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"psr/log": "^1|^2|^3",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.3",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/http-foundation": "^6.3.4",
+ "symfony/error-handler": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
- "symfony/browser-kit": "<5.4",
- "symfony/cache": "<5.4",
- "symfony/config": "<6.1",
- "symfony/console": "<5.4",
- "symfony/dependency-injection": "<6.3.4",
- "symfony/doctrine-bridge": "<5.4",
- "symfony/form": "<5.4",
- "symfony/http-client": "<5.4",
+ "symfony/browser-kit": "<6.4",
+ "symfony/cache": "<6.4",
+ "symfony/config": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/doctrine-bridge": "<6.4",
+ "symfony/form": "<6.4",
+ "symfony/http-client": "<6.4",
"symfony/http-client-contracts": "<2.5",
- "symfony/mailer": "<5.4",
- "symfony/messenger": "<5.4",
- "symfony/translation": "<5.4",
+ "symfony/mailer": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/translation": "<6.4",
"symfony/translation-contracts": "<2.5",
- "symfony/twig-bridge": "<5.4",
- "symfony/validator": "<5.4",
- "symfony/var-dumper": "<6.3",
- "twig/twig": "<2.13"
+ "symfony/twig-bridge": "<6.4",
+ "symfony/validator": "<6.4",
+ "symfony/var-dumper": "<6.4",
+ "twig/twig": "<3.0.4"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
- "symfony/browser-kit": "^5.4|^6.0",
- "symfony/clock": "^6.2",
- "symfony/config": "^6.1",
- "symfony/console": "^5.4|^6.0",
- "symfony/css-selector": "^5.4|^6.0",
- "symfony/dependency-injection": "^6.3.4",
- "symfony/dom-crawler": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0",
+ "symfony/browser-kit": "^6.4|^7.0",
+ "symfony/clock": "^6.4|^7.0",
+ "symfony/config": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0",
+ "symfony/css-selector": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/dom-crawler": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/finder": "^6.4|^7.0",
"symfony/http-client-contracts": "^2.5|^3",
- "symfony/process": "^5.4|^6.0",
- "symfony/property-access": "^5.4.5|^6.0.5",
- "symfony/routing": "^5.4|^6.0",
- "symfony/serializer": "^6.3",
- "symfony/stopwatch": "^5.4|^6.0",
- "symfony/translation": "^5.4|^6.0",
+ "symfony/process": "^6.4|^7.0",
+ "symfony/property-access": "^6.4|^7.0",
+ "symfony/routing": "^6.4|^7.0",
+ "symfony/serializer": "^6.4.4|^7.0.4",
+ "symfony/stopwatch": "^6.4|^7.0",
+ "symfony/translation": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/uid": "^5.4|^6.0",
- "symfony/validator": "^6.3",
- "symfony/var-exporter": "^6.2",
- "twig/twig": "^2.13|^3.0.4"
+ "symfony/uid": "^6.4|^7.0",
+ "symfony/validator": "^6.4|^7.0",
+ "symfony/var-exporter": "^6.4|^7.0",
+ "twig/twig": "^3.0.4"
},
"type": "library",
"autoload": {
@@ -2603,7 +2588,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/v6.3.4"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.0.6"
},
"funding": [
{
@@ -2619,20 +2604,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-26T13:54:49+00:00"
+ "time": "2024-04-03T06:12:25+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
"shasum": ""
},
"require": {
@@ -2646,9 +2631,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -2685,7 +2667,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
},
"funding": [
{
@@ -2701,20 +2683,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "875e90aeea2777b6f135677f618529449334a612"
+ "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
- "reference": "875e90aeea2777b6f135677f618529449334a612",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
+ "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"shasum": ""
},
"require": {
@@ -2725,9 +2707,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -2766,7 +2745,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
},
"funding": [
{
@@ -2782,20 +2761,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
+ "reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
+ "reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
"shasum": ""
},
"require": {
@@ -2806,9 +2785,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -2850,7 +2826,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
},
"funding": [
{
@@ -2866,20 +2842,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "42292d99c55abe617799667f454222c54c60e229"
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
- "reference": "42292d99c55abe617799667f454222c54c60e229",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"shasum": ""
},
"require": {
@@ -2893,9 +2869,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -2933,7 +2906,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
},
"funding": [
{
@@ -2949,96 +2922,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-28T09:04:16+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.28.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"shasum": ""
},
"require": {
@@ -3046,9 +2943,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -3092,7 +2986,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
},
"funding": [
{
@@ -3108,20 +3002,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
+ "reference": "86fcae159633351e5fd145d1c47de6c528f8caff"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff",
+ "reference": "86fcae159633351e5fd145d1c47de6c528f8caff",
"shasum": ""
},
"require": {
@@ -3130,9 +3024,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -3172,7 +3063,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0"
},
"funding": [
{
@@ -3188,29 +3079,28 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T06:22:46+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/property-access",
- "version": "v6.3.2",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "2dc4f9da444b8f8ff592e95d570caad67924f1d0"
+ "reference": "1c268ba954ccc5e78cf035b391abb67759e24423"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/2dc4f9da444b8f8ff592e95d570caad67924f1d0",
- "reference": "2dc4f9da444b8f8ff592e95d570caad67924f1d0",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/1c268ba954ccc5e78cf035b391abb67759e24423",
+ "reference": "1c268ba954ccc5e78cf035b391abb67759e24423",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/property-info": "^5.4|^6.0"
+ "php": ">=8.2",
+ "symfony/property-info": "^6.4|^7.0"
},
"require-dev": {
- "symfony/cache": "^5.4|^6.0"
+ "symfony/cache": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -3249,7 +3139,7 @@
"reflection"
],
"support": {
- "source": "https://github.com/symfony/property-access/tree/v6.3.2"
+ "source": "https://github.com/symfony/property-access/tree/v7.0.6"
},
"funding": [
{
@@ -3265,38 +3155,38 @@
"type": "tidelift"
}
],
- "time": "2023-07-13T15:26:11+00:00"
+ "time": "2024-03-19T11:57:22+00:00"
},
{
"name": "symfony/property-info",
- "version": "v6.3.0",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
- "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd"
+ "reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/7f3a03716112269741fe2a809f8f791a371d1fcd",
- "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/b8844ddce7d53f78b57ec9be59da80fceddf3167",
+ "reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/string": "^5.4|^6.0"
+ "php": ">=8.2",
+ "symfony/string": "^6.4|^7.0"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<5.2",
"phpdocumentor/type-resolver": "<1.5.1",
- "symfony/dependency-injection": "<5.4"
+ "symfony/dependency-injection": "<6.4",
+ "symfony/serializer": "<6.4"
},
"require-dev": {
- "doctrine/annotations": "^1.10.4|^2",
"phpdocumentor/reflection-docblock": "^5.2",
"phpstan/phpdoc-parser": "^1.0",
- "symfony/cache": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/serializer": "^5.4|^6.0"
+ "symfony/cache": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/serializer": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -3332,7 +3222,7 @@
"validator"
],
"support": {
- "source": "https://github.com/symfony/property-info/tree/v6.3.0"
+ "source": "https://github.com/symfony/property-info/tree/v7.0.6"
},
"funding": [
{
@@ -3348,40 +3238,38 @@
"type": "tidelift"
}
],
- "time": "2023-05-19T08:06:44+00:00"
+ "time": "2024-03-28T09:20:36+00:00"
},
{
"name": "symfony/routing",
- "version": "v6.3.3",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a"
+ "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a",
- "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/cded64e5bbf9f31786f1055fcc76718fdd77519c",
+ "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
- "doctrine/annotations": "<1.12",
- "symfony/config": "<6.2",
- "symfony/dependency-injection": "<5.4",
- "symfony/yaml": "<5.4"
+ "symfony/config": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/yaml": "<6.4"
},
"require-dev": {
- "doctrine/annotations": "^1.12|^2",
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.2",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-foundation": "^5.4|^6.0",
- "symfony/yaml": "^5.4|^6.0"
+ "symfony/config": "^6.4|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/expression-language": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/yaml": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -3415,7 +3303,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.3.3"
+ "source": "https://github.com/symfony/routing/tree/v7.0.6"
},
"funding": [
{
@@ -3431,25 +3319,25 @@
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2024-03-28T21:02:11+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.3.0",
+ "version": "v3.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4"
+ "reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
- "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
+ "reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "psr/container": "^2.0"
+ "psr/container": "^1.1|^2.0"
},
"conflict": {
"ext-psr": "<1.1|>=2"
@@ -3497,7 +3385,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
},
"funding": [
{
@@ -3513,24 +3401,24 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2023-12-19T21:51:00+00:00"
},
{
"name": "symfony/string",
- "version": "v6.3.2",
+ "version": "v7.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "53d1a83225002635bca3482fcbf963001313fb68"
+ "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68",
- "reference": "53d1a83225002635bca3482fcbf963001313fb68",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b",
+ "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0",
@@ -3540,11 +3428,11 @@
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/error-handler": "^5.4|^6.0",
- "symfony/http-client": "^5.4|^6.0",
- "symfony/intl": "^6.2",
+ "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",
- "symfony/var-exporter": "^5.4|^6.0"
+ "symfony/var-exporter": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -3583,7 +3471,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.3.2"
+ "source": "https://github.com/symfony/string/tree/v7.0.4"
},
"funding": [
{
@@ -3599,37 +3487,36 @@
"type": "tidelift"
}
],
- "time": "2023-07-05T08:41:27+00:00"
+ "time": "2024-02-01T13:17:36+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45"
+ "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45",
- "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb",
+ "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
+ "php": ">=8.2",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
- "symfony/console": "<5.4"
+ "symfony/console": "<6.4"
},
"require-dev": {
"ext-iconv": "*",
- "symfony/console": "^5.4|^6.0",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/process": "^5.4|^6.0",
- "symfony/uid": "^5.4|^6.0",
- "twig/twig": "^2.13|^3.0.4"
+ "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"
},
"bin": [
"Resources/bin/var-dump-server"
@@ -3667,7 +3554,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.3.4"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.0.6"
},
"funding": [
{
@@ -3683,27 +3570,29 @@
"type": "tidelift"
}
],
- "time": "2023-08-24T14:51:05+00:00"
+ "time": "2024-03-19T11:57:22+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v6.3.4",
+ "version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691"
+ "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691",
- "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c74c568d2a15a1d407cf40d61ea82bc2d521e27b",
+ "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"require-dev": {
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/property-access": "^6.4|^7.0",
+ "symfony/serializer": "^6.4|^7.0",
+ "symfony/var-dumper": "^6.4|^7.0"
},
"type": "library",
"autoload": {
@@ -3741,7 +3630,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.3.4"
+ "source": "https://github.com/symfony/var-exporter/tree/v7.0.6"
},
"funding": [
{
@@ -3757,22 +3646,22 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T18:14:47+00:00"
+ "time": "2024-03-20T21:25:22+00:00"
}
],
"packages-dev": [
{
"name": "amphp/amp",
- "version": "v2.6.2",
+ "version": "v2.6.4",
"source": {
"type": "git",
"url": "https://github.com/amphp/amp.git",
- "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
+ "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
- "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
+ "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
+ "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
"shasum": ""
},
"require": {
@@ -3784,8 +3673,8 @@
"ext-json": "*",
"jetbrains/phpstorm-stubs": "^2019.3",
"phpunit/phpunit": "^7 | ^8 | ^9",
- "psalm/phar": "^3.11@dev",
- "react/promise": "^2"
+ "react/promise": "^2",
+ "vimeo/psalm": "^3.12"
},
"type": "library",
"extra": {
@@ -3840,7 +3729,7 @@
"support": {
"irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v2.6.2"
+ "source": "https://github.com/amphp/amp/tree/v2.6.4"
},
"funding": [
{
@@ -3848,20 +3737,20 @@
"type": "github"
}
],
- "time": "2022-02-20T17:52:18+00:00"
+ "time": "2024-03-21T18:52:26+00:00"
},
{
"name": "amphp/byte-stream",
- "version": "v1.8.1",
+ "version": "v1.8.2",
"source": {
"type": "git",
"url": "https://github.com/amphp/byte-stream.git",
- "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
+ "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
- "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc",
+ "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc",
"shasum": ""
},
"require": {
@@ -3877,11 +3766,6 @@
"psalm/phar": "^3.11.4"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
"autoload": {
"files": [
"lib/functions.php"
@@ -3905,7 +3789,7 @@
}
],
"description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "http://amphp.org/byte-stream",
+ "homepage": "https://amphp.org/byte-stream",
"keywords": [
"amp",
"amphp",
@@ -3915,9 +3799,8 @@
"stream"
],
"support": {
- "irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
+ "source": "https://github.com/amphp/byte-stream/tree/v1.8.2"
},
"funding": [
{
@@ -3925,20 +3808,20 @@
"type": "github"
}
],
- "time": "2021-03-30T17:13:30+00:00"
+ "time": "2024-04-13T18:00:56+00:00"
},
{
"name": "composer/pcre",
- "version": "3.1.0",
+ "version": "3.1.3",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2"
+ "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2",
- "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
+ "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
"shasum": ""
},
"require": {
@@ -3980,7 +3863,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.1.0"
+ "source": "https://github.com/composer/pcre/tree/3.1.3"
},
"funding": [
{
@@ -3996,7 +3879,7 @@
"type": "tidelift"
}
],
- "time": "2022-11-17T09:50:14+00:00"
+ "time": "2024-03-19T10:26:25+00:00"
},
{
"name": "composer/semver",
@@ -4081,16 +3964,16 @@
},
{
"name": "composer/xdebug-handler",
- "version": "3.0.3",
+ "version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
- "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+ "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
- "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
+ "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
"shasum": ""
},
"require": {
@@ -4101,7 +3984,7 @@
"require-dev": {
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
- "symfony/phpunit-bridge": "^6.0"
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
},
"type": "library",
"autoload": {
@@ -4125,9 +4008,9 @@
"performance"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
},
"funding": [
{
@@ -4143,44 +4026,44 @@
"type": "tidelift"
}
],
- "time": "2022-02-25T21:32:43+00:00"
+ "time": "2024-03-26T18:29:49+00:00"
},
{
"name": "dama/doctrine-test-bundle",
- "version": "v6.7.5",
+ "version": "v8.0.2",
"source": {
"type": "git",
"url": "https://github.com/dmaicher/doctrine-test-bundle.git",
- "reference": "af6f8e8c56fcfdf2ae039b97607883961a14af9c"
+ "reference": "f10de294e41570d027a301554a609c394d40e669"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/af6f8e8c56fcfdf2ae039b97607883961a14af9c",
- "reference": "af6f8e8c56fcfdf2ae039b97607883961a14af9c",
+ "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/f10de294e41570d027a301554a609c394d40e669",
+ "reference": "f10de294e41570d027a301554a609c394d40e669",
"shasum": ""
},
"require": {
- "doctrine/dbal": "^2.9.3 || ^3.0",
- "doctrine/doctrine-bundle": "^1.11 || ^2.0",
+ "doctrine/dbal": "^3.3 || ^4.0",
+ "doctrine/doctrine-bundle": "^2.2.2",
"ext-json": "*",
- "php": "^7.1 || ^8.0",
+ "php": "^7.3 || ^8.0",
"psr/cache": "^1.0 || ^2.0 || ^3.0",
- "symfony/cache": "^4.4 || ^5.3 || ^6.0",
- "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0"
+ "symfony/cache": "^5.4 || ^6.3 || ^7.0",
+ "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0"
},
"require-dev": {
"behat/behat": "^3.0",
- "doctrine/cache": "^1.12",
+ "friendsofphp/php-cs-fixer": "^3.27",
"phpstan/phpstan": "^1.2",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
- "symfony/phpunit-bridge": "^5.3 || ^6.0",
- "symfony/process": "^4.4 || ^5.3 || ^6.0",
- "symfony/yaml": "^4.4 || ^5.3 || ^6.0"
+ "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0",
+ "symfony/phpunit-bridge": "^6.3",
+ "symfony/process": "^5.4 || ^6.3 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.3 || ^7.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
- "dev-master": "6.x-dev"
+ "dev-master": "8.x-dev"
}
},
"autoload": {
@@ -4204,13 +4087,14 @@
"isolation",
"performance",
"symfony",
+ "testing",
"tests"
],
"support": {
"issues": "https://github.com/dmaicher/doctrine-test-bundle/issues",
- "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v6.7.5"
+ "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.0.2"
},
- "time": "2022-02-08T16:00:51+00:00"
+ "time": "2024-02-15T08:28:14+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
@@ -4249,116 +4133,42 @@
},
"time": "2019-12-04T15:06:13+00:00"
},
- {
- "name": "doctrine/annotations",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
- "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "^2 || ^3",
- "ext-tokenizer": "*",
- "php": "^7.2 || ^8.0",
- "psr/cache": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "doctrine/cache": "^2.0",
- "doctrine/coding-standard": "^10",
- "phpstan/phpstan": "^1.8.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "symfony/cache": "^5.4 || ^6",
- "vimeo/psalm": "^4.10"
- },
- "suggest": {
- "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "Docblock Annotations Parser",
- "homepage": "https://www.doctrine-project.org/projects/annotations.html",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
- ],
- "support": {
- "issues": "https://github.com/doctrine/annotations/issues",
- "source": "https://github.com/doctrine/annotations/tree/2.0.1"
- },
- "time": "2023-02-02T22:02:53+00:00"
- },
{
"name": "doctrine/data-fixtures",
- "version": "1.6.7",
+ "version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
- "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301"
+ "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ae4e845decbe177348fdbecd04331f4fb96aa301",
- "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301",
+ "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
+ "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^0.5.3 || ^1.0",
- "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0",
- "php": "^7.2 || ^8.0"
+ "doctrine/persistence": "^2.0|^3.0",
+ "php": "^7.4 || ^8.0"
},
"conflict": {
- "doctrine/dbal": "<2.13",
- "doctrine/orm": "<2.14",
+ "doctrine/dbal": "<3.5 || >=5",
+ "doctrine/orm": "<2.14 || >=4",
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "doctrine/dbal": "^2.13 || ^3.0",
+ "doctrine/annotations": "^1.12 || ^2",
+ "doctrine/coding-standard": "^12",
+ "doctrine/dbal": "^3.5 || ^4",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
- "doctrine/orm": "^2.14",
+ "doctrine/orm": "^2.14 || ^3",
"ext-sqlite3": "*",
- "phpstan/phpstan": "^1.5",
- "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0",
- "symfony/cache": "^5.0 || ^6.0",
- "vimeo/psalm": "^4.10 || ^5.9"
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.6.13 || ^10.4.2",
+ "symfony/cache": "^5.4 || ^6.3 || ^7",
+ "symfony/var-exporter": "^5.4 || ^6.3 || ^7",
+ "vimeo/psalm": "^5.9"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
@@ -4389,7 +4199,7 @@
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
- "source": "https://github.com/doctrine/data-fixtures/tree/1.6.7"
+ "source": "https://github.com/doctrine/data-fixtures/tree/1.7.0"
},
"funding": [
{
@@ -4405,40 +4215,44 @@
"type": "tidelift"
}
],
- "time": "2023-08-17T21:15:33+00:00"
+ "time": "2023-11-24T11:18:31+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
- "version": "3.4.4",
+ "version": "3.5.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
- "reference": "9ec3139c52a42e94c9fd1e95f8d2bca94326edfb"
+ "reference": "c808a0c85c38c8ee265cc8405b456c1d2b38567d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/9ec3139c52a42e94c9fd1e95f8d2bca94326edfb",
- "reference": "9ec3139c52a42e94c9fd1e95f8d2bca94326edfb",
+ "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/c808a0c85c38c8ee265cc8405b456c1d2b38567d",
+ "reference": "c808a0c85c38c8ee265cc8405b456c1d2b38567d",
"shasum": ""
},
"require": {
"doctrine/data-fixtures": "^1.3",
- "doctrine/doctrine-bundle": "^1.11|^2.0",
- "doctrine/orm": "^2.6.0",
- "doctrine/persistence": "^1.3.7|^2.0|^3.0",
- "php": "^7.1 || ^8.0",
- "symfony/config": "^3.4|^4.3|^5.0|^6.0",
- "symfony/console": "^3.4|^4.3|^5.0|^6.0",
- "symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0",
- "symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0",
- "symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0"
+ "doctrine/doctrine-bundle": "^2.2",
+ "doctrine/orm": "^2.14.0 || ^3.0",
+ "doctrine/persistence": "^2.4|^3.0",
+ "php": "^7.4 || ^8.0",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/doctrine-bridge": "^5.4|^6.0|^7.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0"
+ },
+ "conflict": {
+ "doctrine/dbal": "< 3"
},
"require-dev": {
- "doctrine/coding-standard": "^9",
- "phpstan/phpstan": "^1.4.10",
- "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
- "symfony/phpunit-bridge": "^6.0.8",
- "vimeo/psalm": "^4.22"
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10.39",
+ "phpunit/phpunit": "^9.6.13",
+ "symfony/phpunit-bridge": "^6.3.6",
+ "vimeo/psalm": "^5.15"
},
"type": "symfony-bundle",
"autoload": {
@@ -4472,7 +4286,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues",
- "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.4"
+ "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.5.1"
},
"funding": [
{
@@ -4488,7 +4302,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-02T15:12:16+00:00"
+ "time": "2023-11-19T12:48:54+00:00"
},
{
"name": "felixfbecker/advanced-json-rpc",
@@ -4593,16 +4407,16 @@
},
{
"name": "fidry/cpu-core-counter",
- "version": "0.5.1",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623"
+ "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623",
- "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42",
+ "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42",
"shasum": ""
},
"require": {
@@ -4610,13 +4424,13 @@
},
"require-dev": {
"fidry/makefile": "^0.2.0",
+ "fidry/php-cs-fixer-config": "^1.1.2",
"phpstan/extension-installer": "^1.2.0",
"phpstan/phpstan": "^1.9.2",
"phpstan/phpstan-deprecation-rules": "^1.0.0",
"phpstan/phpstan-phpunit": "^1.2.2",
"phpstan/phpstan-strict-rules": "^1.4.4",
- "phpunit/phpunit": "^9.5.26 || ^8.5.31",
- "theofidry/php-cs-fixer-config": "^1.0",
+ "phpunit/phpunit": "^8.5.31 || ^9.5.26",
"webmozarts/strict-phpunit": "^7.5"
},
"type": "library",
@@ -4642,7 +4456,7 @@
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1"
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0"
},
"funding": [
{
@@ -4650,58 +4464,54 @@
"type": "github"
}
],
- "time": "2022-12-24T12:35:10+00:00"
+ "time": "2024-02-07T09:43:46+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.24.0",
+ "version": "v3.54.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "bb6c9d7945dcbf6942e151b018c44d3767e21403"
+ "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/bb6c9d7945dcbf6942e151b018c44d3767e21403",
- "reference": "bb6c9d7945dcbf6942e151b018c44d3767e21403",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2aecbc8640d7906c38777b3dcab6f4ca79004d08",
+ "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08",
"shasum": ""
},
"require": {
- "composer/semver": "^3.3",
+ "composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.3",
- "doctrine/annotations": "^2",
- "doctrine/lexer": "^2 || ^3",
+ "ext-filter": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": "^7.4 || ^8.0",
- "sebastian/diff": "^4.0 || ^5.0",
- "symfony/console": "^5.4 || ^6.0",
- "symfony/event-dispatcher": "^5.4 || ^6.0",
- "symfony/filesystem": "^5.4 || ^6.0",
- "symfony/finder": "^5.4 || ^6.0",
- "symfony/options-resolver": "^5.4 || ^6.0",
- "symfony/polyfill-mbstring": "^1.27",
- "symfony/polyfill-php80": "^1.27",
- "symfony/polyfill-php81": "^1.27",
- "symfony/process": "^5.4 || ^6.0",
- "symfony/stopwatch": "^5.4 || ^6.0"
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
+ "symfony/console": "^5.4 || ^6.0 || ^7.0",
+ "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+ "symfony/finder": "^5.4 || ^6.0 || ^7.0",
+ "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
+ "symfony/polyfill-mbstring": "^1.28",
+ "symfony/polyfill-php80": "^1.28",
+ "symfony/polyfill-php81": "^1.28",
+ "symfony/process": "^5.4 || ^6.0 || ^7.0",
+ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3 || ^2.0",
+ "infection/infection": "^0.27.11",
"justinrainbow/json-schema": "^5.2",
- "keradus/cli-executor": "^2.0",
+ "keradus/cli-executor": "^2.1",
"mikey179/vfsstream": "^1.6.11",
- "php-coveralls/php-coveralls": "^2.5.3",
+ "php-coveralls/php-coveralls": "^2.7",
"php-cs-fixer/accessible-object": "^1.1",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
- "phpspec/prophecy": "^1.16",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpunit/phpunit": "^9.5",
- "phpunitgoodpractices/polyfill": "^1.6",
- "phpunitgoodpractices/traits": "^1.9.2",
- "symfony/phpunit-bridge": "^6.2.3",
- "symfony/yaml": "^5.4 || ^6.0"
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
+ "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2",
+ "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -4739,7 +4549,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.24.0"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.54.0"
},
"funding": [
{
@@ -4747,7 +4557,7 @@
"type": "github"
}
],
- "time": "2023-08-29T23:18:45+00:00"
+ "time": "2024-04-17T08:12:13+00:00"
},
{
"name": "jetbrains/phpstorm-attributes",
@@ -4793,38 +4603,41 @@
},
{
"name": "matthiasnoback/symfony-config-test",
- "version": "4.3.0",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/SymfonyTest/SymfonyConfigTest.git",
- "reference": "e7db0f5ea98817c7ba1b9266f8039c085e673db4"
+ "reference": "3c8e7563fbc7c2e0bf0683225e631214eb21c3c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SymfonyTest/SymfonyConfigTest/zipball/e7db0f5ea98817c7ba1b9266f8039c085e673db4",
- "reference": "e7db0f5ea98817c7ba1b9266f8039c085e673db4",
+ "url": "https://api.github.com/repos/SymfonyTest/SymfonyConfigTest/zipball/3c8e7563fbc7c2e0bf0683225e631214eb21c3c5",
+ "reference": "3c8e7563fbc7c2e0bf0683225e631214eb21c3c5",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "symfony/config": "^4.4 || ^5.3 || ^6.0"
+ "php": "^8.1",
+ "symfony/config": "^5.4 || ^6.2 || ^7.0"
},
"conflict": {
- "phpunit/phpunit": "<7.0"
+ "phpunit/phpunit": "<9.6 || >=11.0"
},
"require-dev": {
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^9.6 || ^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Matthias\\SymfonyConfigTest\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4846,41 +4659,41 @@
],
"support": {
"issues": "https://github.com/SymfonyTest/SymfonyConfigTest/issues",
- "source": "https://github.com/SymfonyTest/SymfonyConfigTest/tree/4.3.0"
+ "source": "https://github.com/SymfonyTest/SymfonyConfigTest/tree/v5.1.0"
},
- "time": "2021-09-15T12:30:20+00:00"
+ "time": "2023-11-16T08:05:30+00:00"
},
{
"name": "matthiasnoback/symfony-dependency-injection-test",
- "version": "v4.3.1",
+ "version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/SymfonyTest/SymfonyDependencyInjectionTest.git",
- "reference": "5d2ef992f76c327635fe767af356d7d5448a43d5"
+ "reference": "2bd8962a26c05bdaeae2a29c981de57d1f150140"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SymfonyTest/SymfonyDependencyInjectionTest/zipball/5d2ef992f76c327635fe767af356d7d5448a43d5",
- "reference": "5d2ef992f76c327635fe767af356d7d5448a43d5",
+ "url": "https://api.github.com/repos/SymfonyTest/SymfonyDependencyInjectionTest/zipball/2bd8962a26c05bdaeae2a29c981de57d1f150140",
+ "reference": "2bd8962a26c05bdaeae2a29c981de57d1f150140",
"shasum": ""
},
"require": {
- "matthiasnoback/symfony-config-test": "^4.0.1",
- "php": "^7.2 || ^8.0",
- "symfony/config": "^4.4 || ^5.3 || ^6.0",
- "symfony/dependency-injection": "^4.4 || ^5.3 || ^6.0",
- "symfony/yaml": "^4.4 || ^5.3 || ^6.0"
+ "matthiasnoback/symfony-config-test": "^5.0",
+ "php": "^8.1",
+ "symfony/config": "^5.4 || ^6.2 || ^7.0",
+ "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.2 || ^7.0"
},
"conflict": {
- "phpunit/phpunit": "<8.0"
+ "phpunit/phpunit": "<9.6 || >=11.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.0 || ^9.0"
+ "phpunit/phpunit": "^9.6 || ^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "5.0.x-dev"
}
},
"autoload": {
@@ -4903,17 +4716,18 @@
}
],
"description": "Library for testing user classes related to the Symfony Dependency Injection Component",
- "homepage": "http://github.com/matthiasnoback/SymfonyDependencyInjectionTest",
+ "homepage": "https://github.com/matthiasnoback/SymfonyDependencyInjectionTest",
"keywords": [
"Symfony2",
"dependency injection",
+ "dev",
"phpunit"
],
"support": {
"issues": "https://github.com/SymfonyTest/SymfonyDependencyInjectionTest/issues",
- "source": "https://github.com/SymfonyTest/SymfonyDependencyInjectionTest/tree/v4.3.1"
+ "source": "https://github.com/SymfonyTest/SymfonyDependencyInjectionTest/tree/5.1.0"
},
- "time": "2023-05-25T07:09:32+00:00"
+ "time": "2023-12-13T19:23:54+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -4976,16 +4790,16 @@
},
{
"name": "netresearch/jsonmapper",
- "version": "v4.2.0",
+ "version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "f60565f8c0566a31acf06884cdaa591867ecc956"
+ "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956",
- "reference": "f60565f8c0566a31acf06884cdaa591867ecc956",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0",
+ "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0",
"shasum": ""
},
"require": {
@@ -4996,7 +4810,7 @@
"php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
+ "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0",
"squizlabs/php_codesniffer": "~3.5"
},
"type": "library",
@@ -5021,27 +4835,27 @@
"support": {
"email": "cweiske@cweiske.de",
"issues": "https://github.com/cweiske/jsonmapper/issues",
- "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0"
+ "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1"
},
- "time": "2023-04-09T17:37:40+00:00"
+ "time": "2024-01-31T06:18:54+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.17.1",
+ "version": "v4.19.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
+ "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=7.1"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
@@ -5077,29 +4891,29 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
},
- "time": "2023-08-13T19:53:39+00:00"
+ "time": "2024-03-17T08:10:35+00:00"
},
{
"name": "pedrotroller/php-cs-custom-fixer",
- "version": "v2.32.2",
+ "version": "v2.33.0",
"source": {
"type": "git",
"url": "https://github.com/PedroTroller/PhpCSFixer-Custom-Fixers.git",
- "reference": "87a6c1ce65471307939d9be1b7ae8ed150f6f94c"
+ "reference": "a0c9d6d2b764160360ea18b82b296f05c9e9e553"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PedroTroller/PhpCSFixer-Custom-Fixers/zipball/87a6c1ce65471307939d9be1b7ae8ed150f6f94c",
- "reference": "87a6c1ce65471307939d9be1b7ae8ed150f6f94c",
+ "url": "https://api.github.com/repos/PedroTroller/PhpCSFixer-Custom-Fixers/zipball/a0c9d6d2b764160360ea18b82b296f05c9e9e553",
+ "reference": "a0c9d6d2b764160360ea18b82b296f05c9e9e553",
"shasum": ""
},
"require": {
"php": "^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.17",
+ "friendsofphp/php-cs-fixer": "^3.28",
"phpspec/phpspec": "^7.0",
"sebastian/diff": "^4.0",
"twig/twig": "^3.3",
@@ -5123,26 +4937,27 @@
"description": "PHP-CS-FIXER : my custom fixers",
"support": {
"issues": "https://github.com/PedroTroller/PhpCSFixer-Custom-Fixers/issues",
- "source": "https://github.com/PedroTroller/PhpCSFixer-Custom-Fixers/tree/v2.32.2"
+ "source": "https://github.com/PedroTroller/PhpCSFixer-Custom-Fixers/tree/v2.33.0"
},
- "time": "2023-08-23T16:01:18+00:00"
+ "time": "2023-09-25T12:57:43+00:00"
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -5183,9 +4998,15 @@
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -5293,28 +5114,35 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.3.0",
+ "version": "5.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
"shasum": ""
},
"require": {
+ "doctrine/deprecations": "^1.1",
"ext-filter": "*",
- "php": "^7.2 || ^8.0",
+ "php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
+ "phpdocumentor/type-resolver": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
- "mockery/mockery": "~1.3.2",
- "psalm/phar": "^4.8"
+ "mockery/mockery": "~1.3.5",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-webmozart-assert": "^1.2",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^5.13"
},
"type": "library",
"extra": {
@@ -5338,33 +5166,33 @@
},
{
"name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
+ "email": "opensource@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
},
- "time": "2021-10-19T17:43:47+00:00"
+ "time": "2024-04-09T21:13:58+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.7.3",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419"
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
- "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
- "php": "^7.4 || ^8.0",
+ "php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
"phpstan/phpdoc-parser": "^1.13"
},
@@ -5402,22 +5230,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.7.3"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
},
- "time": "2023-08-12T11:01:26+00:00"
+ "time": "2024-02-23T11:10:43+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.23.1",
+ "version": "1.28.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26"
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/846ae76eef31c6d7790fac9bc399ecee45160b26",
- "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
"shasum": ""
},
"require": {
@@ -5449,22 +5277,22 @@
"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/1.23.1"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
},
- "time": "2023-08-03T16:32:59+00:00"
+ "time": "2024-04-03T18:51:33+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "1.10.32",
+ "version": "1.10.67",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "c47e47d3ab03137c0e121e77c4d2cb58672f6d44"
+ "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c47e47d3ab03137c0e121e77c4d2cb58672f6d44",
- "reference": "c47e47d3ab03137c0e121e77c4d2cb58672f6d44",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
+ "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"shasum": ""
},
"require": {
@@ -5507,45 +5335,41 @@
{
"url": "https://github.com/phpstan",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
- "type": "tidelift"
}
],
- "time": "2023-08-24T21:54:50+00:00"
+ "time": "2024-04-16T07:22:02+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.27",
+ "version": "10.1.14",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1"
+ "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1",
- "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+ "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.15",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1",
+ "phpunit/php-file-iterator": "^4.0",
+ "phpunit/php-text-template": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^3.0",
+ "sebastian/complexity": "^3.0",
+ "sebastian/environment": "^6.0",
+ "sebastian/lines-of-code": "^2.0",
+ "sebastian/version": "^4.0",
"theseer/tokenizer": "^1.2.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.1"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -5554,7 +5378,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.2-dev"
+ "dev-main": "10.1-dev"
}
},
"autoload": {
@@ -5583,7 +5407,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
},
"funding": [
{
@@ -5591,32 +5415,32 @@
"type": "github"
}
],
- "time": "2023-07-26T13:44:30+00:00"
+ "time": "2024-03-12T15:33:41+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "3.0.6",
+ "version": "4.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -5643,7 +5467,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
},
"funding": [
{
@@ -5651,28 +5476,28 @@
"type": "github"
}
],
- "time": "2021-12-02T12:48:52+00:00"
+ "time": "2023-08-31T06:24:48+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "3.1.1",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -5680,7 +5505,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.1-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -5706,7 +5531,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
},
"funding": [
{
@@ -5714,32 +5539,32 @@
"type": "github"
}
],
- "time": "2020-09-28T05:58:55+00:00"
+ "time": "2023-02-03T06:56:09+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "2.0.4",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -5765,7 +5590,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
},
"funding": [
{
@@ -5773,32 +5599,32 @@
"type": "github"
}
],
- "time": "2020-10-26T05:33:50+00:00"
+ "time": "2023-08-31T14:07:24+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "5.0.3",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -5824,7 +5650,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
},
"funding": [
{
@@ -5832,24 +5658,23 @@
"type": "github"
}
],
- "time": "2020-10-26T13:16:10+00:00"
+ "time": "2023-02-03T06:57:52+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "9.6.11",
+ "version": "10.5.19",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "810500e92855eba8a7a5319ae913be2da6f957b0"
+ "reference": "c726f0de022368f6ed103e452a765d3304a996a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/810500e92855eba8a7a5319ae913be2da6f957b0",
- "reference": "810500e92855eba8a7a5319ae913be2da6f957b0",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c726f0de022368f6ed103e452a765d3304a996a4",
+ "reference": "c726f0de022368f6ed103e452a765d3304a996a4",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.3.1 || ^2",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
@@ -5859,27 +5684,26 @@
"myclabs/deep-copy": "^1.10.1",
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpunit/php-code-coverage": "^9.2.13",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.8",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.5",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^3.2",
- "sebastian/version": "^3.0.2"
+ "php": ">=8.1",
+ "phpunit/php-code-coverage": "^10.1.5",
+ "phpunit/php-file-iterator": "^4.0",
+ "phpunit/php-invoker": "^4.0",
+ "phpunit/php-text-template": "^3.0",
+ "phpunit/php-timer": "^6.0",
+ "sebastian/cli-parser": "^2.0",
+ "sebastian/code-unit": "^2.0",
+ "sebastian/comparator": "^5.0",
+ "sebastian/diff": "^5.0",
+ "sebastian/environment": "^6.0",
+ "sebastian/exporter": "^5.1",
+ "sebastian/global-state": "^6.0.1",
+ "sebastian/object-enumerator": "^5.0",
+ "sebastian/recursion-context": "^5.0",
+ "sebastian/type": "^4.0",
+ "sebastian/version": "^4.0"
},
"suggest": {
- "ext-soap": "To be able to generate mocks based on WSDL files",
- "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ "ext-soap": "To be able to generate mocks based on WSDL files"
},
"bin": [
"phpunit"
@@ -5887,7 +5711,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.6-dev"
+ "dev-main": "10.5-dev"
}
},
"autoload": {
@@ -5919,7 +5743,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.11"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.19"
},
"funding": [
{
@@ -5935,32 +5759,72 @@
"type": "tidelift"
}
],
- "time": "2023-08-19T07:10:56+00:00"
+ "time": "2024-04-17T14:06:18+00:00"
+ },
+ {
+ "name": "pkly/phpunit-service-create-trait",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pkly/phpunit-service-create-trait.git",
+ "reference": "574e6eb95e91a72e76c17e87227a58e25b3909aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pkly/phpunit-service-create-trait/zipball/574e6eb95e91a72e76c17e87227a58e25b3909aa",
+ "reference": "574e6eb95e91a72e76c17e87227a58e25b3909aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "phpunit/phpunit": ">=10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Pkly\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "pkly"
+ }
+ ],
+ "description": "A helper trait for PHPUnit 10+ for easier creation of services with dependencies in unit testing",
+ "support": {
+ "issues": "https://github.com/pkly/phpunit-service-create-trait/issues",
+ "source": "https://github.com/pkly/phpunit-service-create-trait/tree/1.0.2"
+ },
+ "time": "2024-03-22T09:42:37+00:00"
},
{
"name": "sebastian/cli-parser",
- "version": "1.0.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -5983,7 +5847,8 @@
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
},
"funding": [
{
@@ -5991,32 +5856,32 @@
"type": "github"
}
],
- "time": "2020-09-28T06:08:49+00:00"
+ "time": "2024-03-02T07:12:49+00:00"
},
{
"name": "sebastian/code-unit",
- "version": "1.0.8",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -6039,7 +5904,7 @@
"homepage": "https://github.com/sebastianbergmann/code-unit",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
},
"funding": [
{
@@ -6047,32 +5912,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:08:54+00:00"
+ "time": "2023-02-03T06:58:43+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -6094,7 +5959,7 @@
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
},
"funding": [
{
@@ -6102,34 +5967,36 @@
"type": "github"
}
],
- "time": "2020-09-28T05:30:19+00:00"
+ "time": "2023-02-03T06:59:15+00:00"
},
{
"name": "sebastian/comparator",
- "version": "4.0.8",
+ "version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
+ "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/diff": "^5.0",
+ "sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6168,7 +6035,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
},
"funding": [
{
@@ -6176,33 +6044,33 @@
"type": "github"
}
],
- "time": "2022-09-14T12:41:17+00:00"
+ "time": "2023-08-14T13:18:12+00:00"
},
{
"name": "sebastian/complexity",
- "version": "2.0.2",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.2-dev"
}
},
"autoload": {
@@ -6225,7 +6093,8 @@
"homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
},
"funding": [
{
@@ -6233,33 +6102,33 @@
"type": "github"
}
],
- "time": "2020-10-26T15:52:27+00:00"
+ "time": "2023-12-21T08:37:17+00:00"
},
{
"name": "sebastian/diff",
- "version": "4.0.5",
+ "version": "5.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131"
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
- "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
+ "phpunit/phpunit": "^10.0",
+ "symfony/process": "^6.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -6291,7 +6160,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
},
"funding": [
{
@@ -6299,27 +6169,27 @@
"type": "github"
}
],
- "time": "2023-05-07T05:35:17+00:00"
+ "time": "2024-03-02T07:15:17+00:00"
},
{
"name": "sebastian/environment",
- "version": "5.1.5",
+ "version": "6.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"suggest": {
"ext-posix": "*"
@@ -6327,7 +6197,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.1-dev"
+ "dev-main": "6.1-dev"
}
},
"autoload": {
@@ -6346,7 +6216,7 @@
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "homepage": "https://github.com/sebastianbergmann/environment",
"keywords": [
"Xdebug",
"environment",
@@ -6354,7 +6224,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
},
"funding": [
{
@@ -6362,34 +6233,34 @@
"type": "github"
}
],
- "time": "2023-02-03T06:03:51+00:00"
+ "time": "2024-03-23T08:47:14+00:00"
},
{
"name": "sebastian/exporter",
- "version": "4.0.5",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
- "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -6431,7 +6302,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
},
"funding": [
{
@@ -6439,38 +6311,35 @@
"type": "github"
}
],
- "time": "2022-09-14T06:03:37+00:00"
+ "time": "2024-03-02T07:17:12+00:00"
},
{
"name": "sebastian/global-state",
- "version": "5.0.6",
+ "version": "6.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bde739e7565280bda77be70044ac1047bc007e34"
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
- "reference": "bde739e7565280bda77be70044ac1047bc007e34",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -6489,13 +6358,14 @@
}
],
"description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
},
"funding": [
{
@@ -6503,33 +6373,33 @@
"type": "github"
}
],
- "time": "2023-08-02T09:26:13+00:00"
+ "time": "2024-03-02T07:19:19+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "1.0.3",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -6552,7 +6422,8 @@
"homepage": "https://github.com/sebastianbergmann/lines-of-code",
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
},
"funding": [
{
@@ -6560,34 +6431,34 @@
"type": "github"
}
],
- "time": "2020-11-28T06:42:11+00:00"
+ "time": "2023-12-21T08:38:20+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "4.0.4",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6609,7 +6480,7 @@
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
},
"funding": [
{
@@ -6617,32 +6488,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:12:34+00:00"
+ "time": "2023-02-03T07:08:32+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "2.0.4",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -6664,7 +6535,7 @@
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
},
"funding": [
{
@@ -6672,32 +6543,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:14:26+00:00"
+ "time": "2023-02-03T07:06:18+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "4.0.5",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
},
"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/05909fb5bc7df4c52992396d0116aed689f93712",
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6727,7 +6598,7 @@
"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/5.0.0"
},
"funding": [
{
@@ -6735,87 +6606,32 @@
"type": "github"
}
],
- "time": "2023-02-03T06:07:39+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:45:17+00:00"
+ "time": "2023-02-03T07:05:40+00:00"
},
{
"name": "sebastian/type",
- "version": "3.2.1",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.5"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -6838,7 +6654,7 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+ "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
},
"funding": [
{
@@ -6846,29 +6662,29 @@
"type": "github"
}
],
- "time": "2023-02-03T06:13:03+00:00"
+ "time": "2023-02-03T07:10:45+00:00"
},
{
"name": "sebastian/version",
- "version": "3.0.2",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -6891,7 +6707,7 @@
"homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
},
"funding": [
{
@@ -6899,20 +6715,20 @@
"type": "github"
}
],
- "time": "2020-09-28T06:39:44+00:00"
+ "time": "2023-02-07T11:34:05+00:00"
},
{
"name": "spatie/array-to-xml",
- "version": "3.2.0",
+ "version": "3.2.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/array-to-xml.git",
- "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7"
+ "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f9ab39c808500c347d5a8b6b13310bd5221e39e7",
- "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
+ "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
"shasum": ""
},
"require": {
@@ -6950,7 +6766,7 @@
"xml"
],
"support": {
- "source": "https://github.com/spatie/array-to-xml/tree/3.2.0"
+ "source": "https://github.com/spatie/array-to-xml/tree/3.2.3"
},
"funding": [
{
@@ -6962,24 +6778,24 @@
"type": "github"
}
],
- "time": "2023-07-19T18:30:26+00:00"
+ "time": "2024-02-07T10:39:02+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v6.3.0",
+ "version": "v7.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd"
+ "reference": "700ff4096e346f54cb628ea650767c8130f1001f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd",
- "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f",
+ "reference": "700ff4096e346f54cb628ea650767c8130f1001f",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
@@ -7013,88 +6829,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v6.3.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2023-05-12T14:21:09+00:00"
- },
- {
- "name": "symfony/phpunit-bridge",
- "version": "v6.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/phpunit-bridge.git",
- "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e020e1efbd1b42cb670fcd7d19a25abbddba035d",
- "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.3"
- },
- "conflict": {
- "phpunit/phpunit": "<7.5|9.1.2"
- },
- "require-dev": {
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/error-handler": "^5.4|^6.0",
- "symfony/polyfill-php81": "^1.27"
- },
- "bin": [
- "bin/simple-phpunit"
- ],
- "type": "symfony-bridge",
- "extra": {
- "thanks": {
- "name": "phpunit/phpunit",
- "url": "https://github.com/sebastianbergmann/phpunit"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Bridge\\PhpUnit\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.2"
+ "source": "https://github.com/symfony/options-resolver/tree/v7.0.0"
},
"funding": [
{
@@ -7110,20 +6845,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-12T16:00:22+00:00"
+ "time": "2023-08-08T10:20:21+00:00"
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b"
+ "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b",
- "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d",
+ "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d",
"shasum": ""
},
"require": {
@@ -7131,9 +6866,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -7173,7 +6905,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0"
},
"funding": [
{
@@ -7189,24 +6921,24 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/process",
- "version": "v6.3.4",
+ "version": "v7.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54"
+ "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54",
- "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54",
+ "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
+ "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.2"
},
"type": "library",
"autoload": {
@@ -7234,7 +6966,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.3.4"
+ "source": "https://github.com/symfony/process/tree/v7.0.4"
},
"funding": [
{
@@ -7250,24 +6982,24 @@
"type": "tidelift"
}
],
- "time": "2023-08-07T10:39:22+00:00"
+ "time": "2024-02-22T20:27:20+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v6.3.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2"
+ "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2",
- "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112",
+ "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112",
"shasum": ""
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"symfony/service-contracts": "^2.5|^3"
},
"type": "library",
@@ -7296,7 +7028,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.3.0"
+ "source": "https://github.com/symfony/stopwatch/tree/v7.0.3"
},
"funding": [
{
@@ -7312,32 +7044,31 @@
"type": "tidelift"
}
],
- "time": "2023-02-16T10:14:28+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.3.3",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add"
+ "reference": "2d4fca631c00700597e9442a0b2451ce234513d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3",
+ "reference": "2d4fca631c00700597e9442a0b2451ce234513d3",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
+ "php": ">=8.2",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
- "symfony/console": "<5.4"
+ "symfony/console": "<6.4"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0"
+ "symfony/console": "^6.4|^7.0"
},
"bin": [
"Resources/bin/yaml-lint"
@@ -7368,7 +7099,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.3.3"
+ "source": "https://github.com/symfony/yaml/tree/v7.0.3"
},
"funding": [
{
@@ -7384,20 +7115,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.1",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"shasum": ""
},
"require": {
@@ -7426,7 +7157,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.1"
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
},
"funding": [
{
@@ -7434,20 +7165,20 @@
"type": "github"
}
],
- "time": "2021-07-28T10:34:58+00:00"
+ "time": "2024-03-03T12:36:25+00:00"
},
{
"name": "vimeo/psalm",
- "version": "5.15.0",
+ "version": "5.23.1",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
- "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352"
+ "reference": "8471a896ccea3526b26d082f4461eeea467f10a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352",
- "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4",
+ "reference": "8471a896ccea3526b26d082f4461eeea467f10a4",
"shasum": ""
},
"require": {
@@ -7466,14 +7197,14 @@
"ext-tokenizer": "*",
"felixfbecker/advanced-json-rpc": "^3.1",
"felixfbecker/language-server-protocol": "^1.5.2",
- "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1",
+ "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0",
"netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
"nikic/php-parser": "^4.16",
"php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
- "sebastian/diff": "^4.0 || ^5.0",
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
"spatie/array-to-xml": "^2.17.0 || ^3.0",
- "symfony/console": "^4.1.6 || ^5.0 || ^6.0",
- "symfony/filesystem": "^5.4 || ^6.0"
+ "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7.0"
},
"conflict": {
"nikic/php-parser": "4.17.0"
@@ -7495,7 +7226,7 @@
"psalm/plugin-phpunit": "^0.18",
"slevomat/coding-standard": "^8.4",
"squizlabs/php_codesniffer": "^3.6",
- "symfony/process": "^4.4 || ^5.0 || ^6.0"
+ "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0"
},
"suggest": {
"ext-curl": "In order to send data to shepherd",
@@ -7508,7 +7239,7 @@
"psalm-refactor",
"psalter"
],
- "type": "library",
+ "type": "project",
"extra": {
"branch-alias": {
"dev-master": "5.x-dev",
@@ -7540,10 +7271,11 @@
"static analysis"
],
"support": {
+ "docs": "https://psalm.dev/docs",
"issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/5.15.0"
+ "source": "https://github.com/vimeo/psalm"
},
- "time": "2023-08-20T23:07:30+00:00"
+ "time": "2024-03-11T20:33:46+00:00"
},
{
"name": "webmozart/assert",
@@ -7613,5 +7345,5 @@
"php": "^8.1"
},
"platform-dev": [],
- "plugin-api-version": "2.3.0"
+ "plugin-api-version": "2.6.0"
}
diff --git a/config/services.php b/config/services.php
index f926b9b..2841090 100644
--- a/config/services.php
+++ b/config/services.php
@@ -2,9 +2,13 @@
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+use Doctrine\ORM\Events;
use DualMedia\DoctrineEventConverterBundle\EventSubscriber\DispatchingSubscriber;
use DualMedia\DoctrineEventConverterBundle\Proxy\Generator;
use DualMedia\DoctrineEventConverterBundle\Service\DelayableEventDispatcher;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
+use DualMedia\DoctrineEventConverterBundle\Service\SubEventService;
+use DualMedia\DoctrineEventConverterBundle\Service\VerifierService;
use Symfony\Component\DependencyInjection\Reference;
return static function (ContainerConfigurator $container) {
@@ -16,9 +20,43 @@
->arg(0, new Reference('event_dispatcher'))
->public();
- $services->set(DispatchingSubscriber::class)
- ->arg(0, new Reference(DelayableEventDispatcher::class))
- ->tag('doctrine.event_subscriber');
+ $services->set(EventService::class)
+ ->lazy();
+
+ $services->set(SubEventService::class)
+ ->lazy();
+
+ $services->set(VerifierService::class);
+
+ $def = $services->set(DispatchingSubscriber::class)
+ ->arg('$eventService', new Reference(EventService::class))
+ ->arg('$subEventService', new Reference(SubEventService::class))
+ ->arg('$verifierService', new Reference(VerifierService::class))
+ ->arg('$dispatcher', new Reference(DelayableEventDispatcher::class))
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::prePersist,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::postPersist,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::preUpdate,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::postUpdate,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::preRemove,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::postRemove,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::preFlush,
+ ])
+ ->tag('doctrine.event_listener', [
+ 'event' => Events::postFlush,
+ ]);
$services->set(Generator::class)
->arg(0, '%kernel.cache_dir%/dm-smd-event-distributor-bundle')
diff --git a/config/services_test.php b/config/services_test.php
index d798acd..3b6e35c 100644
--- a/config/services_test.php
+++ b/config/services_test.php
@@ -2,6 +2,8 @@
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
+use DualMedia\DoctrineEventConverterBundle\Service\SubEventService;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Doctrine\EntityFixtures;
return static function (ContainerConfigurator $container) {
@@ -9,5 +11,8 @@
->defaults()
->public();
+ $services->set(EventService::class);
+ $services->set(SubEventService::class);
+
$services->set(EntityFixtures::class)->tag('doctrine.fixture.orm');
};
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 13b7f18..369da31 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,41 +1,40 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- tests
+ tests
-
-
- src
-
-
-
-
-
-
+
-
-
+
-
\ No newline at end of file
+
+
+
+ src
+
+
+
diff --git a/src/Attributes/Event.php b/src/Attributes/Event.php
index eecffc1..ae043d0 100644
--- a/src/Attributes/Event.php
+++ b/src/Attributes/Event.php
@@ -7,10 +7,9 @@
use DualMedia\DoctrineEventConverterBundle\EventSubscriber\DispatchingSubscriber;
/**
- * Base class for main events, the other annotations should be used in your code
+ * Base class for main events, the other annotations should be used in your code.
*
* @see DispatchingSubscriber
- *
* @see PrePersistEvent
* @see PostPersistEvent
* @see PreUpdateEvent
@@ -21,7 +20,7 @@
abstract class Event
{
/**
- * This value is not required assuming you override the {@link AbstractEntityEvent::getEntityClass()} method
+ * This value is not required assuming you override the {@link AbstractEntityEvent::getEntityClass()} method.
*
* @var non-empty-list|null
*/
@@ -46,5 +45,4 @@ public function getType(): string
{
return $this->type;
}
-
}
diff --git a/src/Attributes/PostPersistEvent.php b/src/Attributes/PostPersistEvent.php
index 85784d0..3aaf3cb 100644
--- a/src/Attributes/PostPersistEvent.php
+++ b/src/Attributes/PostPersistEvent.php
@@ -3,7 +3,7 @@
namespace DualMedia\DoctrineEventConverterBundle\Attributes;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PostPersistEvent extends Event
diff --git a/src/Attributes/PostRemoveEvent.php b/src/Attributes/PostRemoveEvent.php
index f2a9054..9b2b2e7 100644
--- a/src/Attributes/PostRemoveEvent.php
+++ b/src/Attributes/PostRemoveEvent.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\Events;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PostRemoveEvent extends Event
diff --git a/src/Attributes/PostUpdateEvent.php b/src/Attributes/PostUpdateEvent.php
index 5839c35..aa2b0b1 100644
--- a/src/Attributes/PostUpdateEvent.php
+++ b/src/Attributes/PostUpdateEvent.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\Events;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PostUpdateEvent extends Event
diff --git a/src/Attributes/PrePersistEvent.php b/src/Attributes/PrePersistEvent.php
index f7fbf75..638a4e1 100644
--- a/src/Attributes/PrePersistEvent.php
+++ b/src/Attributes/PrePersistEvent.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\Events;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PrePersistEvent extends Event
diff --git a/src/Attributes/PreRemoveEvent.php b/src/Attributes/PreRemoveEvent.php
index b003afa..6f5a458 100644
--- a/src/Attributes/PreRemoveEvent.php
+++ b/src/Attributes/PreRemoveEvent.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\Events;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PreRemoveEvent extends Event
diff --git a/src/Attributes/PreUpdateEvent.php b/src/Attributes/PreUpdateEvent.php
index 3a759fd..64a7502 100644
--- a/src/Attributes/PreUpdateEvent.php
+++ b/src/Attributes/PreUpdateEvent.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\Events;
/**
- * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed
+ * This attribute will cause a class to have an appropriate type event created of it and later dispatched if needed.
*/
#[\Attribute(\Attribute::TARGET_CLASS)]
final class PreUpdateEvent extends Event
diff --git a/src/Attributes/SubEvent.php b/src/Attributes/SubEvent.php
index 02cd777..944a56f 100644
--- a/src/Attributes/SubEvent.php
+++ b/src/Attributes/SubEvent.php
@@ -7,7 +7,7 @@
use DualMedia\DoctrineEventConverterBundle\Model\Change;
/**
- * Responsible for registering sub events for {@link DispatchingSubscriber} with appropriate options
+ * Responsible for registering sub events for {@link DispatchingSubscriber} with appropriate options.
*
* WARNING: You must specify the {@link SubEvent::$label} and one of {@link SubEvent::$changes} or {@link SubEvent::$requirements
*/
@@ -15,7 +15,7 @@
class SubEvent
{
/**
- * Label for the SubEvent, this will be placed in the middle of the short class name
+ * Label for the SubEvent, this will be placed in the middle of the short class name.
*
* If this annotation is placed on an event class called "FooBarEvent" and the label is "StatusChanged" then
* the final short name of the class will be "FooBarStatusChangedEvent"
@@ -28,35 +28,7 @@ class SubEvent
public readonly array|null $entity;
/**
- * List of fields to be used for searching for changes.
- *
- * WARNING: Either this field or {@link SubEvent::$requirements} is required!
- *
- * Either pass the name, names of fields, or fields with required values:
- *
- * For example:
- *
- * `fields="price"`
- *
- * `fields={"price"}`
- *
- * are the same internally and mean "When field 'price' changes"
- *
- * `fields={"price"={0.15}}`
- *
- * means "When field 'price' changes to 0.15"
- *
- * `fields={"price"={0.15, 0.30}}`
- *
- * means "When field 'price' changes from 0.15 to 0.30"
- *
- * @var string|array
- * @deprecated use {@link SubEvent::$changes} instead
- */
- public readonly string|array $fields;
-
- /**
- * If all fields are required to fire event
+ * If all fields are required to fire event.
*
* WARNING: This setting is ignored if {@link SubEvent::$types} does not include either of {@link Events::postUpdate} or {@link Events::preUpdate}
* or if the current event type is not one of the ones specified above!
@@ -91,19 +63,13 @@ class SubEvent
public readonly int $priority;
/**
- * @param string $label
- * @param string|array $fields
* @param non-empty-list|null $entity
- * @param bool $allMode
* @param array $requirements
* @param list $types
- * @param int $priority
* @param list $changes list of field changes
- * @param bool $afterFlush
*/
public function __construct(
string $label,
- string|array $fields = [],
array|null $entity = null,
bool $allMode = true,
array $requirements = [],
@@ -114,7 +80,6 @@ public function __construct(
) {
$this->label = $label;
$this->entity = $entity;
- $this->fields = $fields;
$this->allMode = $allMode;
$this->requirements = $requirements;
$this->types = $types;
diff --git a/src/DependencyInjection/CompilerPass/EventDetectionCompilerPass.php b/src/DependencyInjection/CompilerPass/EventDetectionCompilerPass.php
index 35c4ac0..db698e6 100644
--- a/src/DependencyInjection/CompilerPass/EventDetectionCompilerPass.php
+++ b/src/DependencyInjection/CompilerPass/EventDetectionCompilerPass.php
@@ -13,10 +13,8 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\SubEvent;
use DualMedia\DoctrineEventConverterBundle\DependencyInjection\Model\EventConfiguration;
use DualMedia\DoctrineEventConverterBundle\DependencyInjection\Model\SubEventConfiguration;
-use DualMedia\DoctrineEventConverterBundle\DependencyInjection\Model\Undefined;
use DualMedia\DoctrineEventConverterBundle\DoctrineEventConverterBundle;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
-use DualMedia\DoctrineEventConverterBundle\EventSubscriber\DispatchingSubscriber;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\AbstractEntityEventNotExtendedException;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\EntityInterfaceMissingException;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\NoValidEntityFoundException;
@@ -30,7 +28,11 @@
use DualMedia\DoctrineEventConverterBundle\Interfaces\EntityInterface;
use DualMedia\DoctrineEventConverterBundle\Interfaces\MainEventInterface;
use DualMedia\DoctrineEventConverterBundle\Interfaces\SubEventInterface;
+use DualMedia\DoctrineEventConverterBundle\Model\Change;
+use DualMedia\DoctrineEventConverterBundle\Model\Undefined;
use DualMedia\DoctrineEventConverterBundle\Proxy\Generator;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
+use DualMedia\DoctrineEventConverterBundle\Service\SubEventService;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Finder\Finder;
@@ -38,7 +40,7 @@
class EventDetectionCompilerPass implements CompilerPassInterface
{
/**
- * Array of maps of the doctrine events to something we can actually find quickly
+ * Array of maps of the doctrine events to something we can actually find quickly.
*
* @var array>
*/
@@ -52,8 +54,6 @@ class EventDetectionCompilerPass implements CompilerPassInterface
];
/**
- * @param ContainerBuilder $container
- *
* @throws AbstractEntityEventNotExtendedException
* @throws TargetClassFinalException
* @throws DirectoryNotWritable
@@ -69,15 +69,17 @@ class EventDetectionCompilerPass implements CompilerPassInterface
public function process(
ContainerBuilder $container
): void {
- if (!$container->hasDefinition(Generator::class) ||
- !$container->has(Generator::class) ||
- !$container->hasDefinition(DispatchingSubscriber::class)) {
+ if (!$container->hasDefinition(Generator::class)
+ || !$container->has(Generator::class)
+ || !$container->hasDefinition(EventService::class)
+ || !$container->hasDefinition(SubEventService::class)) {
return;
}
/** @var Generator $generator */
$generator = $container->get(Generator::class);
- $subscriber = $container->getDefinition(DispatchingSubscriber::class);
+ $mainEventService = $container->getDefinition(EventService::class);
+ $subEventService = $container->getDefinition(SubEventService::class);
/** @var array, non-empty-list> $events */
$events = [];
@@ -95,6 +97,7 @@ public function process(
// attempt to expand paths
$match = [];
preg_match_all('/%(.+)%/', $path, $match);
+
if (count($match[0] ?? [])) {
foreach ($match[0] as $i => $item) {
/** @var string $param */
@@ -104,15 +107,17 @@ public function process(
}
/**
- * This just lets us see if some name will be taken at any point, since SubEvents are created from a single class, they could collide
+ * This just lets us see if some name will be taken at any point, since SubEvents are created from a single class, they could collide.
*
* @var string[] $uniqueSubEventNames
*/
$uniqueSubEventNames = [];
- $nonGlobPath = rtrim($path, "*\\/");
+ $nonGlobPath = rtrim($path, '*\\/');
+
foreach ($finder->files()->in($path)->name('*.php') as $file) {
$class = $namespace.'\\'.str_replace(['.php', '/'], ['', '\\'], mb_substr($file->getRealPath(), mb_strpos($file->getRealPath(), $nonGlobPath) + mb_strlen($nonGlobPath) + 1));
+
/** @var class-string $class */
try {
$reflection = new \ReflectionClass($class);
@@ -135,6 +140,7 @@ public function process(
$this->validateEventReflection($class, $reflection);
$entities = $this->getEntityClasses($attribute, $reflection);
$this->validateEntityClasses($entities, $class);
+
/** @var non-empty-list> $entities */
if (!array_key_exists($class, $events)) {
$events[$class] = [];
@@ -154,14 +160,13 @@ public function process(
$config = (new SubEventConfiguration())
->setEntities($entities)
->setEvents($this->getSubEventTypes($attribute, $class))
- ->setChanges($this->getOldFields($attribute, $class)); // todo: remove call in 2.2
- //
- $config->setChanges(array_merge($config->getChanges(), $this->getChanges($attribute, $class, $config)))
+ ->setChanges($this->getChanges($attribute->changes))
->setLabel($attribute->label)
->setRequirements($attribute->requirements)
->setPriority($attribute->priority)
->setAllMode($attribute->allMode)
- ->setAfterFlush($attribute->afterFlush);
+ ->setAfterFlush($attribute->afterFlush)
+ ->validate($class);
if (!array_key_exists($class, $subEvents)) {
$subEvents[$class] = [];
@@ -170,6 +175,7 @@ public function process(
$subEvents[$class][] = $config;
$uniq = $class.ucfirst($attribute->label);
+
if (in_array($uniq, $uniqueSubEventNames)) {
throw SubEventNameCollisionException::new([
$class,
@@ -183,6 +189,7 @@ public function process(
}
$cacheDir = $container->getParameter('kernel.cache_dir').DIRECTORY_SEPARATOR.DoctrineEventConverterBundle::CACHE_DIRECTORY; // @phpstan-ignore-line
+
if (!is_dir($cacheDir) && (false === @mkdir($cacheDir, 0775, true))) {
throw DirectoryNotWritable::new([$cacheDir]);
}
@@ -192,11 +199,17 @@ public function process(
}
$finder = new Finder();
+
// clear old event files for regeneration
foreach ($finder->files()->in($cacheDir)->name('*.php') as $file) {
unlink($file->getRealPath());
}
+ /**
+ * @var array>> $subEventConstruct
+ */
+ $subEventConstruct = [];
+
// we're starting with sub events because those might need an implicit creation of main events
/** @var class-string $class */
foreach ($subEvents as $class => $configurations) {
@@ -208,6 +221,7 @@ public function process(
foreach ($configuration->getEvents() as $type) {
$found = false;
+
for ($i = 0; $i < count($events[$class]); $i++) {
if ($type === $events[$class][$i]->getType()) {
$found = true;
@@ -230,20 +244,38 @@ public function process(
$configuration->getLabel(),
[SubEventInterface::class]
);
- /** @see DispatchingSubscriber::registerSubEvent() */
- $subscriber->addMethodCall('registerSubEvent', [
+
+ if (!array_key_exists($configuration->getPriority(), $subEventConstruct)) {
+ $subEventConstruct[$configuration->getPriority()] = [];
+ }
+
+ $subEventConstruct[$configuration->getPriority()][] = [
$out,
$configuration->getEntities(),
$configuration->isAllMode(),
$configuration->getChanges(),
$configuration->getRequirements(),
$configuration->getEvents(),
- $configuration->getPriority(),
$configuration->isAfterFlush(),
- ]);
+ ];
+ }
+ }
+
+ /** @var list> $output */
+ $output = [];
+ krsort($subEventConstruct, SORT_NUMERIC); // sort by priorities (200 -> 0 -> -200)
+
+ foreach ($subEventConstruct as $prioritySortedList) {
+ foreach ($prioritySortedList as $data) {
+ $output[] = $data;
}
}
+ $subEventService->setArgument('$entries', $output);
+
+ /** @var list> $construct */
+ $construct = [];
+
// create and add main events
/** @var class-string $class */
foreach ($events as $class => $configurations) {
@@ -253,21 +285,20 @@ public function process(
$configuration->getType(),
[MainEventInterface::class]
);
- /** @see DispatchingSubscriber::registerEvent() */
- $subscriber->addMethodCall('registerEvent', [
+ $construct[] = [
$out,
$configuration->getEntities(),
$configuration->getType(),
$configuration->isAfterFlush(),
- ]);
+ ];
}
}
+
+ /** @see EventService::__construct() */
+ $mainEventService->setArgument('$entries', $construct);
}
/**
- * @param string $class
- * @param \ReflectionClass $reflection
- *
* @throws AbstractEntityEventNotExtendedException
* @throws TargetClassFinalException
*/
@@ -329,9 +360,6 @@ private function validateEntityClasses(
}
/**
- * @param SubEvent $event
- * @param string $class
- *
* @return non-empty-list
*
* @throws UnknownEventTypeException
@@ -357,57 +385,17 @@ private function getSubEventTypes(
}
/**
- * @param SubEvent $event
- * @param string $class
+ * @param list $changes
*
- * @return array
- */
- private function getOldFields(
- SubEvent $event,
- string $class
- ): array {
- $input = is_array($event->fields) ? $event->fields : [$event->fields];
- $out = [];
-
- foreach ($input as $possibleName => $possibleValues) {
- if (is_numeric($possibleName) && is_string($possibleValues)) {
- $out[$possibleValues] = null;
- } elseif (is_array($possibleValues)) {
- $out[$possibleName] = 2 === count($possibleValues) ? $possibleValues : [1 => $possibleValues[0]];
- }
- }
-
- if (!empty($out)) {
- trigger_deprecation(
- 'dualmedia/symfony-doctrine-event-converter-bundle',
- '2.1.2',
- 'Using "%s" is deprecated and will be removed in 2.2.0, move to using "%s" instead in class "%s"',
- 'fields',
- 'changes',
- $class
- );
- }
-
- return $out;
- }
-
- /**
- * @param SubEvent $event
- * @param string $class
- * @param SubEventConfiguration $configuration temporary parameter up for removal in 2.2
- *
- * @return array
- *
- * @throws SubEventRequiredFieldsException
+ * @return array
*/
private function getChanges(
- SubEvent $event,
- string $class,
- SubEventConfiguration $configuration
+ array $changes,
): array {
+ /** @var array $out */
$out = [];
- foreach ($event->changes as $change) {
+ foreach ($changes as $change) {
if ($change->from instanceof Undefined && $change->to instanceof Undefined) {
$out[$change->name] = null;
} else {
@@ -417,13 +405,6 @@ private function getChanges(
($change->to instanceof Undefined ? [] : [1 => $change->to]);
}
}
- /** @var array $out */
- if ((empty($out) && empty($configuration->getChanges())) && empty($event->requirements)) {
- throw SubEventRequiredFieldsException::new([
- $event->label,
- $class,
- ]);
- }
return $out;
}
diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php
index 7cbc088..870428f 100644
--- a/src/DependencyInjection/Configuration.php
+++ b/src/DependencyInjection/Configuration.php
@@ -14,6 +14,7 @@ public function getConfigTreeBuilder(): TreeBuilder
/**
* @psalm-suppress UndefinedMethod
+ *
* @phpstan-ignore-next-line
*/
$tree->getRootNode()
diff --git a/src/DependencyInjection/DoctrineEventConverterExtension.php b/src/DependencyInjection/DoctrineEventConverterExtension.php
index 94bb8b1..66bd98e 100644
--- a/src/DependencyInjection/DoctrineEventConverterExtension.php
+++ b/src/DependencyInjection/DoctrineEventConverterExtension.php
@@ -12,7 +12,6 @@ class DoctrineEventConverterExtension extends SymfonyExtension
{
/**
* @param array $configs
- * @param ContainerBuilder $container
*
* @throws \Exception
*
diff --git a/src/DependencyInjection/Model/EventConfiguration.php b/src/DependencyInjection/Model/EventConfiguration.php
index f0b2b6e..cf1991b 100644
--- a/src/DependencyInjection/Model/EventConfiguration.php
+++ b/src/DependencyInjection/Model/EventConfiguration.php
@@ -12,7 +12,7 @@ final class EventConfiguration extends AbstractEventConfiguration
private string $type = Events::postPersist;
private bool $afterFlush = false;
-
+
public function getType(): string
{
return $this->type;
@@ -35,8 +35,7 @@ public function setAfterFlush(
bool $afterFlush
): static {
$this->afterFlush = $afterFlush;
-
+
return $this;
}
-
}
diff --git a/src/DependencyInjection/Model/SubEventConfiguration.php b/src/DependencyInjection/Model/SubEventConfiguration.php
index a984b18..e4a4c55 100644
--- a/src/DependencyInjection/Model/SubEventConfiguration.php
+++ b/src/DependencyInjection/Model/SubEventConfiguration.php
@@ -3,6 +3,7 @@
namespace DualMedia\DoctrineEventConverterBundle\DependencyInjection\Model;
use Doctrine\ORM\Events;
+use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\SubEventRequiredFieldsException;
/**
* @internal
@@ -17,7 +18,7 @@ final class SubEventConfiguration extends AbstractEventConfiguration
private array $events;
/**
- * @var array
+ * @var array
*/
private array $changes = [];
@@ -53,7 +54,7 @@ public function setEvents(
}
/**
- * @return array
+ * @return array
*/
public function getChanges(): array
{
@@ -61,7 +62,7 @@ public function getChanges(): array
}
/**
- * @param array $changes
+ * @param array $changes
*/
public function setChanges(
array $changes
@@ -138,7 +139,23 @@ public function setAfterFlush(
bool $afterFlush
): static {
$this->afterFlush = $afterFlush;
+
return $this;
}
+ /**
+ * @throws SubEventRequiredFieldsException
+ */
+ public function validate(
+ string $class
+ ): static {
+ if (empty($this->getChanges()) && empty($this->getRequirements())) {
+ throw SubEventRequiredFieldsException::new([
+ $this->getLabel(),
+ $class,
+ ]);
+ }
+
+ return $this;
+ }
}
diff --git a/src/DependencyInjection/Model/Undefined.php b/src/DependencyInjection/Model/Undefined.php
deleted file mode 100644
index 983e634..0000000
--- a/src/DependencyInjection/Model/Undefined.php
+++ /dev/null
@@ -1,12 +0,0 @@
-|null
- * @psalm-pure
*/
- #[Pure]
- public static function getEntityClass(): ?string
+ public static function getEntityClass(): string|null
{
return null;
}
@@ -45,6 +43,7 @@ public static function getEntityClass(): ?string
* @param T $entity
*
* @return static
+ *
* @noinspection PhpDocSignatureInspection
*/
public function setEntity(
diff --git a/src/Event/DispatchEvent.php b/src/Event/DispatchEvent.php
index 9f1f917..613b6d3 100644
--- a/src/Event/DispatchEvent.php
+++ b/src/Event/DispatchEvent.php
@@ -5,7 +5,7 @@
use Symfony\Contracts\EventDispatcher\Event;
/**
- * Dispatched after an event has been dispatched
+ * Dispatched after an event has been dispatched.
*
* Useful if you really want to listen to all different kinds of events, but you don't want to listen to a ton of separate events
*/
diff --git a/src/EventSubscriber/DispatchingSubscriber.php b/src/EventSubscriber/DispatchingSubscriber.php
index b76ef24..4f9e5fb 100644
--- a/src/EventSubscriber/DispatchingSubscriber.php
+++ b/src/EventSubscriber/DispatchingSubscriber.php
@@ -2,42 +2,29 @@
namespace DualMedia\DoctrineEventConverterBundle\EventSubscriber;
-use Doctrine\Common\EventSubscriber;
use Doctrine\Common\Util\ClassUtils;
-use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;
+use Doctrine\ORM\Event\PostPersistEventArgs;
+use Doctrine\ORM\Event\PostRemoveEventArgs;
+use Doctrine\ORM\Event\PostUpdateEventArgs;
use Doctrine\ORM\Event\PreFlushEventArgs;
+use Doctrine\ORM\Event\PrePersistEventArgs;
+use Doctrine\ORM\Event\PreRemoveEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Events;
use Doctrine\ORM\PersistentCollection;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Interfaces\EntityInterface;
use DualMedia\DoctrineEventConverterBundle\Model\Event;
-use DualMedia\DoctrineEventConverterBundle\Model\SubEvent;
use DualMedia\DoctrineEventConverterBundle\Service\DelayableEventDispatcher;
-use Symfony\Component\PropertyAccess\PropertyAccessor;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
+use DualMedia\DoctrineEventConverterBundle\Service\SubEventService;
+use DualMedia\DoctrineEventConverterBundle\Service\VerifierService;
-class DispatchingSubscriber implements EventSubscriber
+class DispatchingSubscriber
{
- /**
- * List of events to be dispatched after entity changes.
- *
- * @var non-empty-array, list>>
- */
- private array $mainEventList = [
- Events::postPersist => [], Events::postUpdate => [], Events::postRemove => [],
- Events::prePersist => [], Events::preUpdate => [], Events::preRemove => [],
- ];
-
- /**
- * @var array, array, non-empty-list>>>
- */
- private array $subEventList = [];
-
- private bool $subEventsOptimized = false;
private bool $preFlush = false;
-
/**
* ID cache for removed entities so their ids can be temporarily remembered.
*
@@ -52,269 +39,106 @@ class DispatchingSubscriber implements EventSubscriber
*/
private array $updateObjectCache = [];
- public function getSubscribedEvents(): array
- {
- return [
- Events::prePersist,
- Events::postPersist,
- Events::preUpdate,
- Events::postUpdate,
- Events::preRemove,
- Events::postRemove,
- Events::preFlush,
- Events::postFlush,
- ];
- }
-
public function __construct(
- private readonly DelayableEventDispatcher $eventDispatcher,
- private readonly PropertyAccessor $propertyAccess = new PropertyAccessor()
+ private readonly EventService $eventService,
+ private readonly SubEventService $subEventService,
+ private readonly VerifierService $verifierService,
+ private readonly DelayableEventDispatcher $dispatcher
) {
}
- /**
- * Registers an event for use later by the dispatcher
- *
- * @param class-string $eventClass
- * @param non-empty-list> $entities
- * @param string $event
- *
- * @return void
- *
- * @internal
- */
- public function registerEvent(
- string $eventClass,
- array $entities,
- string $event,
- bool $afterFlush = false,
- ): void {
- if (!array_key_exists($event, $this->mainEventList)) {
- return;
- }
-
- foreach ($entities as $class) {
- if (!isset($this->mainEventList[$event][$class])) {
- $this->mainEventList[$event][$class] = []; // @phpstan-ignore-line
- }
-
- $this->mainEventList[$event][$class][] = new Event($eventClass, $afterFlush);
- }
- }
-
- /**
- * Gets the list of for an entity and specified Doctrine {@see Events}
- *
- * @param string $type
- * @param class-string $entity
- *
- * @return list
- */
- public function getEvents(
- string $type,
- string $entity
- ): array {
- return $this->mainEventList[$type][$entity] ?? [];
- }
-
- /**
- * Registers a sub event for use later by the dispatcher
- *
- * @param class-string $eventClass
- * @param non-empty-list> $entities
- * @param bool $allMode
- * @param array $fieldList
- * @param array $requirements
- * @param list $types
- * @param int $priority higher means the event will be checked/fired faster
- *
- * @return void
- *
- * @internal
- */
- public function registerSubEvent(
- string $eventClass,
- array $entities,
- bool $allMode,
- array $fieldList,
- array $requirements,
- array $types,
- int $priority = 0,
- bool $afterFlush = false,
- ): void {
- foreach ($entities as $entity) {
- if (!isset($this->subEventList[$entity])) {
- $this->subEventList[$entity] = [];
- }
-
- if (!isset($this->subEventList[$entity][$priority])) {
- $this->subEventList[$entity][$priority] = [];
- }
-
- if (!isset($this->subEventList[$entity][$priority][$eventClass])) {
- $this->subEventList[$entity][$priority][$eventClass] = []; // @phpstan-ignore-line
- }
- $this->subEventList[$entity][$priority][$eventClass][] = new SubEvent($allMode, $fieldList, $requirements, $types, $afterFlush); // @phpstan-ignore-line
- }
- }
-
- /**
- * Gets the list of SubEvents for an entity
- *
- * @param class-string $entity
- *
- * @return array, list>>
- */
- public function getSubEvents(
- string $entity
- ): array {
- return $this->subEventList[$entity] ?? [];
- }
-
- /**
- * @param LifecycleEventArgs $args
- *
- * @internal
- */
public function prePersist(
- LifecycleEventArgs $args
+ PrePersistEventArgs $args
): void {
if ($args->getObject() instanceof EntityInterface) {
- $this->preRunEvents(Events::prePersist, $args->getObject());
+ $this->process(Events::prePersist, $args->getObject());
}
}
- /**
- * @internal
- */
public function preFlush(
PreFlushEventArgs $args
): void {
$this->preFlush = true;
}
- /**
- * @internal
- */
public function postFlush(
PostFlushEventArgs $args
): void {
- $this->eventDispatcher->submitDelayed();
+ $this->dispatcher->submitDelayed();
$this->preFlush = false;
}
- /**
- * @internal
- */
public function postPersist(
- LifecycleEventArgs $args
+ PostPersistEventArgs $args
): void {
- $this->preRunEvents(Events::postPersist, $args->getObject());
+ $this->process(Events::postPersist, $args->getObject());
}
- /**
- * @param PreUpdateEventArgs $args
- *
- * @internal
- */
public function preUpdate(
PreUpdateEventArgs $args
): void {
$changes = [];
- if ($args->getObject() instanceof EntityInterface) {
- $changes = $this->updateObjectCache[spl_object_hash($args->getObject())] = $args->getEntityChangeSet();
+ $object = $args->getObject();
+
+ if ($object instanceof EntityInterface) {
+ $changes = $this->updateObjectCache[spl_object_hash($object)] = $args->getEntityChangeSet();
}
- $this->preRunEvents(Events::preUpdate, $args->getObject(), null, $changes);
+ $this->process(Events::preUpdate, $object, null, $changes);
}
- /**
- * @param LifecycleEventArgs $args
- *
- * @internal
- */
public function postUpdate(
- LifecycleEventArgs $args
+ PostUpdateEventArgs $args
): void {
- $hash = spl_object_hash($args->getObject());
+ $object = $args->getObject();
+ $hash = spl_object_hash($object);
$changes = $this->updateObjectCache[$hash] ?? [];
unset($this->updateObjectCache[$hash]);
- $this->preRunEvents(Events::postUpdate, $args->getObject(), null, $changes);
+
+ $this->process(Events::postUpdate, $object, null, $changes);
}
- /**
- * @param LifecycleEventArgs $args
- *
- * @internal
- */
public function preRemove(
- LifecycleEventArgs $args
+ PreRemoveEventArgs $args
): void {
+ $object = $args->getObject();
+
if ($args->getObject() instanceof EntityInterface) {
- $this->removeIdCache[spl_object_hash($args->getObject())] = $args->getObject()->getId(); // @phpstan-ignore-line
+ $this->removeIdCache[spl_object_hash($object)] = $object->getId(); // @phpstan-ignore-line
}
- $this->preRunEvents(Events::preRemove, $args->getObject());
+ $this->process(Events::preRemove, $object);
}
- /**
- * @param LifecycleEventArgs $args
- *
- * @internal
- */
public function postRemove(
- LifecycleEventArgs $args
+ PostRemoveEventArgs $args
): void {
- $hash = spl_object_hash($args->getObject());
+ $object = $args->getObject();
+ $hash = spl_object_hash($object);
+
if (isset($this->removeIdCache[$hash])) {
$id = $this->removeIdCache[$hash];
unset($this->removeIdCache[$hash]);
- $this->preRunEvents(Events::postRemove, $args->getObject(), $id);
+ $this->process(Events::postRemove, $object, $id);
}
}
/**
- * @param string $event
- * @param object $obj
- * @param int|string|null $id
* @param array|PersistentCollection> $changes
*/
- private function preRunEvents(
- string $event,
+ private function process(
+ string $type,
object $obj,
int|string|null $id = null,
array $changes = []
): void {
- $events = $this->mainEventList[$event];
$class = ClassUtils::getClass($obj);
- if (!array_key_exists($class, $events)) {
- return;
- }
- /**
- * As no non-EntityInterface object can exist in the mainEventList, we don't need to validate type in theory
- *
- * @noinspection PhpParamsInspection
- * @phpstan-ignore-next-line
- */
- $this->runEvents($event, $events[$class], $obj, $id, $changes);
- }
+ foreach ($this->eventService->get($type, $class) as $model) {
+ /**
+ * As EntityInterface is validated during cache generation there is no point in checking it here again.
+ *
+ * @var EntityInterface $obj
+ */
- /**
- * @param string $type
- * @param list $events
- * @param EntityInterface $obj
- * @param int|string|null $id
- * @param array|PersistentCollection> $changes
- *
- * @return void
- */
- private function runEvents(
- string $type,
- array $events,
- EntityInterface $obj,
- int|string|null $id = null,
- array $changes = []
- ): void {
- foreach ($events as $model) {
/**
* @var AbstractEntityEvent $event
* @var Event $model
@@ -327,144 +151,42 @@ private function runEvents(
->setDeletedId($id);
if ($this->preFlush) {
- $this->eventDispatcher->clearEvents();
+ $this->dispatcher->clearEvents();
$this->preFlush = false;
}
- $this->eventDispatcher->dispatch($event, $model->afterFlush);
+ $this->dispatcher->dispatch($event, $model->afterFlush);
- $this->runSubEvents($event);
+ $this->subEvents($event);
}
}
- private function runSubEvents(
+ private function subEvents(
AbstractEntityEvent $event
): void {
$entity = $event->getEntity();
$class = ClassUtils::getClass($entity);
- if (!isset($this->subEventList[$class])) { // No events found, simply exit
- return;
- }
- $this->optimizeSubEvents();
-
- foreach ($this->subEventList[$class] as $list) {
- foreach ($list as $eventClass => $models) {
- foreach ($models as $model) {
- if (!in_array($event->getEventType(), $model->types, true)) {
- continue; // Create event only for selected event types e.g. added, removed
- }
-
- if (!$this->validateSubEvent($event->getChanges(), $model, $entity, $event->getEventType())) { // @phpstan-ignore-line
- continue;
- }
-
- /** @var AbstractEntityEvent $subEvent */
- $subEvent = (new $eventClass());
-
- $subEvent->setEntity($entity)
- ->setChanges(array_intersect_key(
- $event->getChanges(),
- $model->fieldList
- )) // save only fields that the event requested, ignore rest
- ->setEventType($event->getEventType());
-
- $this->eventDispatcher->dispatch($subEvent, $model->afterFlush);
-
- break;
- }
- }
- }
- }
-
- /**
- * @param array> $eventChanges
- * @param SubEvent $model
- * @param EntityInterface $entity
- * @param string $event
- * @return bool
- */
- private function validateSubEvent(
- array $eventChanges,
- SubEvent $model,
- EntityInterface $entity,
- string $event
- ): bool {
- if (in_array($event, [Events::postUpdate, Events::preUpdate], true)) {
- if ($model->allMode && count(array_diff_key($model->fieldList, $eventChanges))) { // Event contains keys that haven't changed
- return false;
- } elseif (!$model->allMode && !count(array_intersect_key($eventChanges, $model->fieldList))) { // Event doesn't contain any of the required keys
- return false;
- }
-
- $validFields = [];
-
- foreach ($eventChanges as $field => $fields) {
- if (!array_key_exists($field, $model->fieldList)) {
- continue;
- } elseif (null === ($modelWantedState = $model->fieldList[$field])) {
- // if you set null instead of setting null for key 0 you're dumb and #wontfix
- $validFields[$field] = true;
+ foreach ($this->subEventService->get($class) as $eventClass => $models) {
+ foreach ($models as $model) {
+ if (!$this->verifierService->validate($event->getChanges(), $model, $entity, $event->getEventType())) { // @phpstan-ignore-line
continue;
}
- $count = count($modelWantedState);
+ /** @var AbstractEntityEvent $subEvent */
+ $subEvent = (new $eventClass());
- if (1 === $count) {
- $existingCounter = array_key_exists(0, $modelWantedState) ? 0 : 1;
- $validFields[$field] = $this->stateEquals($fields[$existingCounter], $modelWantedState[$existingCounter]);
- } elseif (2 === $count) {
- /** @var array{0: mixed, 1: mixed} $modelWantedState */
- $validFields[$field] = $this->stateEquals($fields[0], $modelWantedState[0]) && $this->stateEquals($fields[1], $modelWantedState[1]);
- }
- }
+ $subEvent->setEntity($entity)
+ ->setChanges(array_intersect_key(
+ $event->getChanges(),
+ $model->fields
+ )) // save only fields that the event requested, ignore rest
+ ->setEventType($event->getEventType());
- $reduced = array_reduce($validFields, fn ($carry, $data) => $carry + ((int) $data));
+ $this->dispatcher->dispatch($subEvent, $model->afterFlush);
- if (!(!$model->allMode ? $reduced > 0 : $reduced === count($model->fieldList))) {
- return false;
+ break;
}
}
-
- foreach ($model->requirements as $fieldName => $value) {
- try {
- if ($this->propertyAccess->getValue($entity, $fieldName) !== $value) {
- return false;
- }
- } catch (\Throwable) {
- return false;
- }
- }
-
- return true;
- }
-
- private function stateEquals(
- mixed $known,
- mixed $expected
- ): bool {
- if ($known === $expected) {
- return true;
- }
-
- if (!($known instanceof \BackedEnum) && ($expected instanceof \BackedEnum)) {
- return $known === $expected->value;
- }
-
- return false;
- }
-
- private function optimizeSubEvents(): void
- {
- if ($this->subEventsOptimized) {
- return;
- }
-
- foreach ($this->subEventList as $entity => $priorities) {
- ksort($this->subEventList[$entity]);
- $this->subEventList[$entity] = array_reverse($this->subEventList[$entity], true);
- }
-
- $this->subEventsOptimized = true;
}
}
diff --git a/src/Exception/AbstractEventDistributorException.php b/src/Exception/AbstractEventDistributorException.php
index d81652d..7208115 100644
--- a/src/Exception/AbstractEventDistributorException.php
+++ b/src/Exception/AbstractEventDistributorException.php
@@ -3,7 +3,7 @@
namespace DualMedia\DoctrineEventConverterBundle\Exception;
/**
- * Basic shared class for exceptions in the bundle
+ * Basic shared class for exceptions in the bundle.
*
* Catch this, if you're unsure what you might encounter at some point
*/
@@ -12,11 +12,9 @@ abstract class AbstractEventDistributorException extends \Exception
protected const MESSAGE_TEMPLATE = 'Unknown exception occurred';
/**
- * Returns a new exception with a preformatted message
+ * Returns a new exception with a preformatted message.
*
* @param list $arguments
- *
- * @return static
*/
public static function new(
array $arguments = []
@@ -25,11 +23,9 @@ public static function new(
}
/**
- * Get the exception message
+ * Get the exception message.
*
* @param list $arguments
- *
- * @return string
*/
public static function formatMessage(
array $arguments = []
diff --git a/src/Exception/DependencyInjection/EntityInterfaceMissingException.php b/src/Exception/DependencyInjection/EntityInterfaceMissingException.php
index 19f452a..dcd8556 100644
--- a/src/Exception/DependencyInjection/EntityInterfaceMissingException.php
+++ b/src/Exception/DependencyInjection/EntityInterfaceMissingException.php
@@ -6,7 +6,7 @@
use DualMedia\DoctrineEventConverterBundle\Interfaces\EntityInterface;
/**
- * Thrown during compiler pass processing if a class does not implement {@link EntityInterface}
+ * Thrown during compiler pass processing if a class does not implement {@link EntityInterface}.
*/
final class EntityInterfaceMissingException extends AbstractEventDistributorException
{
diff --git a/src/Exception/Proxy/DirectoryNotWritable.php b/src/Exception/Proxy/DirectoryNotWritable.php
index 8ac8a16..9b630f1 100644
--- a/src/Exception/Proxy/DirectoryNotWritable.php
+++ b/src/Exception/Proxy/DirectoryNotWritable.php
@@ -5,7 +5,7 @@
use DualMedia\DoctrineEventConverterBundle\Exception\AbstractEventDistributorException;
/**
- * Thrown if a proxy directory is not writable
+ * Thrown if a proxy directory is not writable.
*/
final class DirectoryNotWritable extends AbstractEventDistributorException
{
diff --git a/src/Exception/Proxy/NotProxyClassException.php b/src/Exception/Proxy/NotProxyClassException.php
index 1ebef36..5609e19 100644
--- a/src/Exception/Proxy/NotProxyClassException.php
+++ b/src/Exception/Proxy/NotProxyClassException.php
@@ -5,7 +5,7 @@
use DualMedia\DoctrineEventConverterBundle\Exception\AbstractEventDistributorException;
/**
- * Thrown when trying to get a path to a non-proxy class
+ * Thrown when trying to get a path to a non-proxy class.
*/
final class NotProxyClassException extends AbstractEventDistributorException
{
diff --git a/src/Exception/Proxy/TargetClassFinalException.php b/src/Exception/Proxy/TargetClassFinalException.php
index 563fe19..6aaacf5 100644
--- a/src/Exception/Proxy/TargetClassFinalException.php
+++ b/src/Exception/Proxy/TargetClassFinalException.php
@@ -6,7 +6,7 @@
use DualMedia\DoctrineEventConverterBundle\Proxy\Generator;
/**
- * Thrown if a class passed to {@link Generator} is final
+ * Thrown if a class passed to {@link Generator} is final.
*/
final class TargetClassFinalException extends AbstractEventDistributorException
{
diff --git a/src/Exception/Proxy/TargetClassNamingSchemeInvalidException.php b/src/Exception/Proxy/TargetClassNamingSchemeInvalidException.php
index 6ceae48..9b7ef5a 100644
--- a/src/Exception/Proxy/TargetClassNamingSchemeInvalidException.php
+++ b/src/Exception/Proxy/TargetClassNamingSchemeInvalidException.php
@@ -5,7 +5,7 @@
use DualMedia\DoctrineEventConverterBundle\Exception\AbstractEventDistributorException;
/**
- * Thrown if an event class does not end with "Event" which is required for proper name generation
+ * Thrown if an event class does not end with "Event" which is required for proper name generation.
*/
final class TargetClassNamingSchemeInvalidException extends AbstractEventDistributorException
{
diff --git a/src/Interfaces/EntityInterface.php b/src/Interfaces/EntityInterface.php
index b585f27..9989c82 100644
--- a/src/Interfaces/EntityInterface.php
+++ b/src/Interfaces/EntityInterface.php
@@ -5,7 +5,7 @@
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\EntityInterfaceMissingException;
/**
- * Simple interface to enforce an id getter
+ * Simple interface to enforce an id getter.
*
* Must be implemented on any entities that will use events, a runtime error will be thrown on compiler pass processing if this condition is not met
*
diff --git a/src/Interfaces/MainEventInterface.php b/src/Interfaces/MainEventInterface.php
index aeaa22a..35b1174 100644
--- a/src/Interfaces/MainEventInterface.php
+++ b/src/Interfaces/MainEventInterface.php
@@ -3,7 +3,7 @@
namespace DualMedia\DoctrineEventConverterBundle\Interfaces;
/**
- * Dummy interface which allows for easier checks to see if an event is a "main" event or not
+ * Dummy interface which allows for easier checks to see if an event is a "main" event or not.
*/
interface MainEventInterface
{
diff --git a/src/Interfaces/SubEventInterface.php b/src/Interfaces/SubEventInterface.php
index d7286c2..1b90e56 100644
--- a/src/Interfaces/SubEventInterface.php
+++ b/src/Interfaces/SubEventInterface.php
@@ -3,7 +3,7 @@
namespace DualMedia\DoctrineEventConverterBundle\Interfaces;
/**
- * Dummy interface which allows for easier checks to see if an event is a "sub" event or not
+ * Dummy interface which allows for easier checks to see if an event is a "sub" event or not.
*/
interface SubEventInterface
{
diff --git a/src/Model/Change.php b/src/Model/Change.php
index c7ef6a2..ba73e1d 100644
--- a/src/Model/Change.php
+++ b/src/Model/Change.php
@@ -2,11 +2,10 @@
namespace DualMedia\DoctrineEventConverterBundle\Model;
-use DualMedia\DoctrineEventConverterBundle\DependencyInjection\Model\Undefined;
use JetBrains\PhpStorm\Immutable;
/**
- * This object represents a database change
+ * This object represents a database change.
*
* If no exact changes are specified then it is assumed that _any_ change should trigger the event
*/
diff --git a/src/Model/SubEvent.php b/src/Model/SubEvent.php
index 65d62bd..cce334f 100644
--- a/src/Model/SubEvent.php
+++ b/src/Model/SubEvent.php
@@ -5,9 +5,10 @@
use JetBrains\PhpStorm\Immutable;
/**
- * This class contains the basic fields required for sub events to work properly
+ * This class contains the basic fields required for sub events to work properly.
*
* @psalm-immutable
+ *
* @interal
*/
#[Immutable]
@@ -15,13 +16,13 @@ class SubEvent
{
/**
* @param bool $allMode If all the fields must be meeting the requirements of the event
- * @param array $fieldList The fields that must be changed, null means that any change is required, 0 and 1 indexes match before/after
+ * @param array $fields The fields that must be changed, null means that any change is required, 0 and 1 indexes match before/after
* @param array $requirements Required field states for this event to fire
* @param list $types Event types in which this event may be triggered
*/
public function __construct(
public readonly bool $allMode,
- public readonly array $fieldList,
+ public readonly array $fields,
public readonly array $requirements,
public readonly array $types,
public readonly bool $afterFlush,
diff --git a/src/Model/Undefined.php b/src/Model/Undefined.php
new file mode 100644
index 0000000..138b576
--- /dev/null
+++ b/src/Model/Undefined.php
@@ -0,0 +1,12 @@
+ $class
- * @param string $eventName
* @param list $interfaces
*
* @return class-string
@@ -59,6 +58,7 @@ public function generateProxyClass(
array $interfaces = []
): string {
$reflection = new \ReflectionClass($class);
+
if ($reflection->isFinal()) {
throw TargetClassFinalException::new([$class]);
}
@@ -82,12 +82,13 @@ public function generateProxyClass(
/**
* @var class-string $fqcn
+ *
* @noinspection PhpRedundantVariableDocTypeInspection
*/
- $fqcn = $namespace . '\\' . $classNew;
- $fileName = $this->proxyDirectory . DIRECTORY_SEPARATOR . str_replace('\\', '', mb_substr($fqcn, mb_strlen(self::PROXY_NS))) . '.php';
+ $fqcn = $namespace.'\\'.$classNew;
+ $fileName = $this->proxyDirectory.DIRECTORY_SEPARATOR.str_replace('\\', '', mb_substr($fqcn, mb_strlen(self::PROXY_NS))).'.php';
- $parameters[''] = ' *'.implode(' *', array_map(static fn (string $s) => mb_strlen($s) ? " ".$s."\n" : "\n", $doc));
+ $parameters[''] = ' *'.implode(' *', array_map(static fn (string $s) => mb_strlen($s) ? ' '.$s."\n" : "\n", $doc));
$parameters[''] = str_replace('', $eventName, $parameters['']);
$parentDirectory = dirname($fileName);
@@ -108,10 +109,6 @@ public function generateProxyClass(
}
/**
- * @param string $class
- * @param string $eventName
- *
- * @return string
* @throws TargetClassNamingSchemeInvalidException
*/
public static function getProxyFqcn(
@@ -124,12 +121,10 @@ public static function getProxyFqcn(
$name = self::splitClassName(current($exploded));
$namespace = self::getNamespace($class);
- return $namespace . '\\' . $name[0].ucfirst($eventName).$name[1];
+ return $namespace.'\\'.$name[0].ucfirst($eventName).$name[1];
}
/**
- * @param string $classShort
- *
* @return string[]
*
* @throws TargetClassNamingSchemeInvalidException
@@ -148,10 +143,6 @@ public static function splitClassName(
}
/**
- * @param string $class
- *
- * @return string
- *
* @throws NotProxyClassException
*/
public function resolveFilePath(
@@ -162,20 +153,16 @@ public function resolveFilePath(
}
$classRelative = mb_substr($class, mb_strlen(self::PROXY_NS));
- return $this->proxyDirectory . DIRECTORY_SEPARATOR . str_replace('\\', '', $classRelative) . '.php';
+
+ return $this->proxyDirectory.DIRECTORY_SEPARATOR.str_replace('\\', '', $classRelative).'.php';
}
- /**
- * @param string $class
- *
- * @return string
- */
public static function getNamespace(
string $class
): string {
$exploded = explode('\\', $class);
array_pop($exploded);
- return self::PROXY_NS . '\\' . implode('\\', $exploded);
+ return self::PROXY_NS.'\\'.implode('\\', $exploded);
}
}
diff --git a/src/Service/DelayableEventDispatcher.php b/src/Service/DelayableEventDispatcher.php
index 0fd3415..181ba4d 100644
--- a/src/Service/DelayableEventDispatcher.php
+++ b/src/Service/DelayableEventDispatcher.php
@@ -16,7 +16,6 @@ class DelayableEventDispatcher
public function __construct(
private readonly EventDispatcherInterface $eventDispatcher,
) {
-
}
public function dispatch(
@@ -40,10 +39,9 @@ public function submitDelayed(): void
$this->eventsToDispatchAfterFlush = [];
}
-
+
public function clearEvents(): void
{
$this->eventsToDispatchAfterFlush = [];
}
-
}
diff --git a/src/Service/EventService.php b/src/Service/EventService.php
new file mode 100644
index 0000000..3e3f325
--- /dev/null
+++ b/src/Service/EventService.php
@@ -0,0 +1,64 @@
+, list>>
+ */
+ private array $events = [
+ Events::postPersist => [], Events::postUpdate => [], Events::postRemove => [],
+ Events::prePersist => [], Events::preUpdate => [], Events::preRemove => [],
+ ];
+
+ /**
+ * @param list,
+ * 1: non-empty-list>,
+ * 2: string,
+ * 3: bool
+ * }> $entries list of events to be later used by the service
+ */
+ public function __construct(
+ array $entries
+ ) {
+ foreach ($entries as $entry) {
+ [$eventClass, $entities, $event, $afterFlush] = $entry;
+
+ if (!array_key_exists($event, $this->events)) {
+ continue;
+ }
+
+ foreach ($entities as $entityClass) {
+ if (!array_key_exists($entityClass, $this->events[$event])) {
+ $this->events[$event][$entityClass] = [];
+ }
+
+ $this->events[$event][$entityClass][] = new Event($eventClass, $afterFlush);
+ }
+ }
+ }
+
+ /**
+ * @param class-string $class
+ *
+ * @return list
+ */
+ public function get(
+ string $event,
+ string $class
+ ): array {
+ return $this->events[$event][$class] ?? [];
+ }
+}
diff --git a/src/Service/SubEventService.php b/src/Service/SubEventService.php
new file mode 100644
index 0000000..47d09eb
--- /dev/null
+++ b/src/Service/SubEventService.php
@@ -0,0 +1,58 @@
+, array, non-empty-list>>
+ */
+ private array $events = [];
+
+ /**
+ * @param list,
+ * 1: non-empty-list>,
+ * 2: bool,
+ * 3: array,
+ * 4: array,
+ * 5: list,
+ * 6: bool
+ * }> $entries
+ */
+ public function __construct(
+ array $entries
+ ) {
+ foreach ($entries as $entry) {
+ [$eventClass, $entities, $allMode, $fieldList, $requirements, $types, $afterFlush] = $entry;
+
+ foreach ($entities as $entity) {
+ if (!array_key_exists($entity, $this->events)) {
+ $this->events[$entity] = [];
+ }
+
+ if (!array_key_exists($eventClass, $this->events[$entity])) {
+ $this->events[$entity][$eventClass] = []; // @phpstan-ignore-line
+ }
+
+ $this->events[$entity][$eventClass][] = new SubEvent($allMode, $fieldList, $requirements, $types, $afterFlush);
+ }
+ }
+ }
+
+ /**
+ * @return array, non-empty-list>
+ */
+ public function get(
+ string $class
+ ): array {
+ return $this->events[$class] ?? [];
+ }
+}
diff --git a/src/Service/VerifierService.php b/src/Service/VerifierService.php
new file mode 100644
index 0000000..1ab7bdc
--- /dev/null
+++ b/src/Service/VerifierService.php
@@ -0,0 +1,131 @@
+ $changes
+ */
+ public function validate(
+ array $changes,
+ SubEvent $model,
+ EntityInterface $entity,
+ string $event
+ ): bool {
+ return $this->validateType($event, $model->types)
+ && $this->validateRequirements($model->requirements, $entity)
+ && $this->validateFields($changes, $model, $event);
+ }
+
+ /**
+ * @param array $requirements
+ */
+ public function validateRequirements(
+ array $requirements,
+ EntityInterface $entity
+ ): bool {
+ foreach ($requirements as $fieldName => $value) {
+ try {
+ if ($this->propertyAccess->getValue($entity, $fieldName) !== $value) {
+ return false;
+ }
+ } catch (\Throwable) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param array $changes
+ */
+ public function validateFields(
+ array $changes,
+ SubEvent $model,
+ string $type
+ ): bool {
+ if (!in_array($type, [Events::postUpdate, Events::preUpdate], true)) {
+ return true;
+ }
+
+ if ($model->allMode && count(array_diff_key($model->fields, $changes))) { // Event contains keys that haven't changed
+ return false;
+ } elseif (!$model->allMode && !count(array_intersect_key($changes, $model->fields))) { // Event doesn't contain any of the required keys
+ return false;
+ }
+
+ $validFields = [];
+
+ foreach ($changes as $field => $fields) {
+ if (!array_key_exists($field, $model->fields)) {
+ continue;
+ }
+
+ $validFields[$field] = null === ($modelWantedState = $model->fields[$field])
+ || $this->validateField($fields, $modelWantedState);
+ }
+
+ $reduced = array_reduce($validFields, fn ($carry, $data) => $carry + ((int)$data));
+
+ return !$model->allMode ? $reduced > 0 : $reduced === count($model->fields);
+ }
+
+ /**
+ * @param array{0: mixed, 1: mixed} $changes
+ * @param array{0?: mixed, 1?: mixed} $wantedState
+ */
+ public function validateField(
+ array $changes,
+ array $wantedState
+ ): bool {
+ $count = count($wantedState);
+
+ if (1 === $count) {
+ $existingCounter = array_key_exists(0, $wantedState) ? 0 : 1;
+
+ return $this->equals($changes[$existingCounter], $wantedState[$existingCounter]); // @phpstan-ignore-line
+ } elseif (2 === $count) {
+ /** @var array{0: mixed, 1: mixed} $wantedState */
+ return $this->equals($changes[0], $wantedState[0]) && $this->equals($changes[1], $wantedState[1]);
+ }
+
+ return false;
+ }
+
+ /**
+ * @param list $types
+ */
+ public function validateType(
+ string $type,
+ array $types
+ ): bool {
+ return in_array($type, $types, true);
+ }
+
+ public function equals(
+ mixed $known,
+ mixed $expected
+ ): bool {
+ if ($known === $expected) {
+ return true;
+ }
+
+ if (!($known instanceof \BackedEnum) && ($expected instanceof \BackedEnum)) {
+ return $known === $expected->value;
+ }
+
+ return false;
+ }
+}
diff --git a/tests/DependencyInjection/CompilerPassTest.php b/tests/DependencyInjection/CompilerPassTest.php
index 9148739..143f5fd 100644
--- a/tests/DependencyInjection/CompilerPassTest.php
+++ b/tests/DependencyInjection/CompilerPassTest.php
@@ -2,12 +2,9 @@
namespace DualMedia\DoctrineEventConverterBundle\Tests\DependencyInjection;
-use Doctrine\Common\Annotations\AnnotationReader;
-use Doctrine\Common\Annotations\Reader;
use DualMedia\DoctrineEventConverterBundle\DependencyInjection\CompilerPass\EventDetectionCompilerPass;
use DualMedia\DoctrineEventConverterBundle\DoctrineEventConverterBundle;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
-use DualMedia\DoctrineEventConverterBundle\EventSubscriber\DispatchingSubscriber;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\AbstractEntityEventNotExtendedException;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\EntityInterfaceMissingException;
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\NoValidEntityFoundException;
@@ -17,6 +14,8 @@
use DualMedia\DoctrineEventConverterBundle\Exception\DependencyInjection\UnknownEventTypeException;
use DualMedia\DoctrineEventConverterBundle\Interfaces\EntityInterface;
use DualMedia\DoctrineEventConverterBundle\Proxy\Generator;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
+use DualMedia\DoctrineEventConverterBundle\Service\SubEventService;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\InvalidEntity;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Error\FinalClass\TestEvent as FinalClass;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Error\InvalidBaseEntity\TestEvent as InvalidBaseEntity;
@@ -28,20 +27,13 @@
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
-use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\EventDispatcher\EventDispatcher;
/**
- * This test must not modify setup, as that's later tested for checking if the compiler pass will work without services
+ * This test must not modify setup, as that's later tested for checking if the compiler pass will work without services.
*/
class CompilerPassTest extends AbstractCompilerPassTestCase
{
- protected function registerCompilerPass(
- ContainerBuilder $container
- ): void {
- $container->addCompilerPass(new EventDetectionCompilerPass());
- }
-
public function testInvalidBaseEntity(): void
{
$this->setDINamespace('InvalidBaseEntity');
@@ -104,7 +96,7 @@ public function testUnknownEventType(): void
$this->expectException(UnknownEventTypeException::class);
$this->expectExceptionMessage(UnknownEventTypeException::formatMessage([
- "invalid",
+ 'invalid',
UnknownEventType::class,
]));
@@ -119,7 +111,7 @@ public function testSubEventNameCollision(): void
$this->expectException(SubEventNameCollisionException::class);
$this->expectExceptionMessage(SubEventNameCollisionException::formatMessage([
SubEventNameCollision::class,
- "ExistingName",
+ 'ExistingName',
]));
$this->compile();
@@ -132,24 +124,28 @@ public function testSubEventRequiredFieldsException(): void
$this->expectException(SubEventRequiredFieldsException::class);
$this->expectExceptionMessage(SubEventRequiredFieldsException::formatMessage([
- "SomeName",
+ 'SomeName',
SubEventRequiredFields::class,
]));
$this->compile();
}
+ protected function registerCompilerPass(
+ ContainerBuilder $container
+ ): void {
+ $container->addCompilerPass(new EventDetectionCompilerPass());
+ }
+
private function loadRequiredServices(): void
{
$this->container->setParameter('kernel.cache_dir', $cache = '/'.self::getAbsolutePath(__DIR__.'/../../var/cache/test'));
- $this->setDefinition(Reader::class, new Definition(AnnotationReader::class));
$this->setDefinition(Generator::class, new Definition(Generator::class, [
$cache.'/'.DoctrineEventConverterBundle::CACHE_DIRECTORY,
]));
$this->setDefinition('event_dispatcher', new Definition(EventDispatcher::class));
- $this->setDefinition(DispatchingSubscriber::class, new Definition(DispatchingSubscriber::class, [
- new Reference('event_dispatcher'),
- ]));
+ $this->setDefinition(EventService::class, new Definition(EventService::class));
+ $this->setDefinition(SubEventService::class, new Definition(SubEventService::class));
}
private function setDINamespace(
@@ -171,16 +167,19 @@ private static function getAbsolutePath(
$path = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = [];
+
foreach ($parts as $part) {
if ('.' == $part) {
continue;
}
+
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
+
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
}
diff --git a/tests/DependencyInjection/ExtensionTest.php b/tests/DependencyInjection/ExtensionTest.php
index 0b3bdc9..7b33179 100644
--- a/tests/DependencyInjection/ExtensionTest.php
+++ b/tests/DependencyInjection/ExtensionTest.php
@@ -8,13 +8,6 @@
class ExtensionTest extends AbstractExtensionTestCase
{
- protected function getContainerExtensions(): array
- {
- return [
- new DoctrineEventConverterExtension(),
- ];
- }
-
protected function setUp(): void
{
parent::setUp();
@@ -53,4 +46,11 @@ public function testOverrides(): void
'TestNamespace'
);
}
+
+ protected function getContainerExtensions(): array
+ {
+ return [
+ new DoctrineEventConverterExtension(),
+ ];
+ }
}
diff --git a/tests/Event/SubEventTest.php b/tests/Event/SubEventTest.php
index 47202d0..1356a84 100644
--- a/tests/Event/SubEventTest.php
+++ b/tests/Event/SubEventTest.php
@@ -36,7 +36,7 @@ public function testNoEvent(): void
/** @var ComplexEntity $entity */
$entity = $this->getComplexRepo()->find(1);
- $entity->setUnimportant("new");
+ $entity->setUnimportant('new');
$this->getManager()->persist($entity);
$this->getManager()->flush();
@@ -94,8 +94,8 @@ public function testStatusPrePersistEvent(): void
$entity = new ComplexEntity();
$entity->setStatus(1)
- ->setName("Whatever")
- ->setUnimportant("something");
+ ->setName('Whatever')
+ ->setUnimportant('something');
$this->getManager()->persist($entity);
$this->getManager()->flush();
@@ -126,7 +126,7 @@ public function testStatusWithRequirements(): void
/** @var ComplexEntity $entity */
$entity = $this->getComplexRepo()->find(1);
- $entity->setUnimportant("specific")
+ $entity->setUnimportant('specific')
->setStatus(16);
$this->getManager()->persist($entity);
diff --git a/tests/Fixtures/Doctrine/EntityFixtures.php b/tests/Fixtures/Doctrine/EntityFixtures.php
index 1d4c0ef..849d6b1 100644
--- a/tests/Fixtures/Doctrine/EntityFixtures.php
+++ b/tests/Fixtures/Doctrine/EntityFixtures.php
@@ -21,7 +21,7 @@ public function load(
$entity = new ComplexEntity();
$entity->setStatus(1)
->setName('MyName')
- ->setUnimportant("old");
+ ->setUnimportant('old');
$manager->persist($entity);
$manager->flush();
diff --git a/tests/Fixtures/Entity/ComplexEntity.php b/tests/Fixtures/Entity/ComplexEntity.php
index 6c69219..916031a 100644
--- a/tests/Fixtures/Entity/ComplexEntity.php
+++ b/tests/Fixtures/Entity/ComplexEntity.php
@@ -11,23 +11,23 @@ class ComplexEntity implements EntityInterface
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
#[ORM\Column(type: 'integer')]
- private ?int $id = null;
+ private int|null $id = null;
#[ORM\Column(type: 'smallint')]
- private ?int $status = null;
+ private int|null $status = null;
#[ORM\Column(type: 'string', length: 64)]
- private ?string $name = null;
+ private string|null $name = null;
#[ORM\Column(type: 'string', length: 64)]
- private ?string $unimportant = null;
+ private string|null $unimportant = null;
public function getId()
{
return $this->id;
}
- public function getStatus(): ?int
+ public function getStatus(): int|null
{
return $this->status;
}
@@ -40,7 +40,7 @@ public function setStatus(
return $this;
}
- public function getName(): ?string
+ public function getName(): string|null
{
return $this->name;
}
@@ -53,13 +53,13 @@ public function setName(
return $this;
}
- public function getUnimportant(): ?string
+ public function getUnimportant(): string|null
{
return $this->unimportant;
}
public function setUnimportant(
- ?string $unimportant
+ string|null $unimportant
): self {
$this->unimportant = $unimportant;
diff --git a/tests/Fixtures/Entity/InvalidEntity.php b/tests/Fixtures/Entity/InvalidEntity.php
index 87eb01b..05ab9d0 100644
--- a/tests/Fixtures/Entity/InvalidEntity.php
+++ b/tests/Fixtures/Entity/InvalidEntity.php
@@ -10,17 +10,17 @@ class InvalidEntity
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
#[ORM\Column(type: 'integer')]
- private ?int $id = null;
+ private int|null $id = null;
#[ORM\Column(type: 'smallint')]
- private ?int $status = null;
+ private int|null $status = null;
public function getId()
{
return $this->id;
}
- public function getStatus(): ?int
+ public function getStatus(): int|null
{
return $this->status;
}
diff --git a/tests/Fixtures/Entity/Item.php b/tests/Fixtures/Entity/Item.php
index 15e2d5f..edd8e83 100644
--- a/tests/Fixtures/Entity/Item.php
+++ b/tests/Fixtures/Entity/Item.php
@@ -11,17 +11,17 @@ class Item implements EntityInterface
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
#[ORM\Column(type: 'integer')]
- private ?int $id = null;
+ private int|null $id = null;
#[ORM\Column(type: 'smallint')]
- private ?int $status = null;
+ private int|null $status = null;
public function getId()
{
return $this->id;
}
- public function getStatus(): ?int
+ public function getStatus(): int|null
{
return $this->status;
}
diff --git a/tests/Fixtures/Enum/BackedIntEnum.php b/tests/Fixtures/Enum/BackedIntEnum.php
new file mode 100644
index 0000000..17dfe34
--- /dev/null
+++ b/tests/Fixtures/Enum/BackedIntEnum.php
@@ -0,0 +1,8 @@
+
@@ -13,10 +12,6 @@
#[PostPersistEvent]
final class TestEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return Item::class;
diff --git a/tests/Fixtures/Error/InvalidBaseEntity/TestEvent.php b/tests/Fixtures/Error/InvalidBaseEntity/TestEvent.php
index 31b917f..a98a55c 100644
--- a/tests/Fixtures/Error/InvalidBaseEntity/TestEvent.php
+++ b/tests/Fixtures/Error/InvalidBaseEntity/TestEvent.php
@@ -5,15 +5,10 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\PreUpdateEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\InvalidEntity;
-use JetBrains\PhpStorm\Pure;
#[PreUpdateEvent]
class TestEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return InvalidEntity::class;
diff --git a/tests/Fixtures/Error/NoValidEntity/TestEvent.php b/tests/Fixtures/Error/NoValidEntity/TestEvent.php
index 1f1e01c..b1c0c00 100644
--- a/tests/Fixtures/Error/NoValidEntity/TestEvent.php
+++ b/tests/Fixtures/Error/NoValidEntity/TestEvent.php
@@ -4,8 +4,9 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\SubEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
+use DualMedia\DoctrineEventConverterBundle\Model\Change;
-#[SubEvent("SomeName", fields: "someField")]
+#[SubEvent('SomeName', changes: [new Change('someField')])]
class TestEvent extends AbstractEntityEvent
{
}
diff --git a/tests/Fixtures/Error/SubEventNameCollision/TestEvent.php b/tests/Fixtures/Error/SubEventNameCollision/TestEvent.php
index 481ff33..4524970 100644
--- a/tests/Fixtures/Error/SubEventNameCollision/TestEvent.php
+++ b/tests/Fixtures/Error/SubEventNameCollision/TestEvent.php
@@ -4,20 +4,16 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\SubEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
+use DualMedia\DoctrineEventConverterBundle\Model\Change;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\Item;
-use JetBrains\PhpStorm\Pure;
/**
* @extends AbstractEntityEvent-
*/
-#[SubEvent("ExistingName", fields: "status")]
-#[SubEvent("ExistingName", fields: "status")]
+#[SubEvent('ExistingName', changes: [new Change('status')])]
+#[SubEvent('ExistingName', changes: [new Change('status')])]
class TestEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return Item::class;
diff --git a/tests/Fixtures/Error/SubEventRequiredFields/TestEvent.php b/tests/Fixtures/Error/SubEventRequiredFields/TestEvent.php
index 3fbd36f..d405697 100644
--- a/tests/Fixtures/Error/SubEventRequiredFields/TestEvent.php
+++ b/tests/Fixtures/Error/SubEventRequiredFields/TestEvent.php
@@ -5,18 +5,13 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\SubEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\Item;
-use JetBrains\PhpStorm\Pure;
/**
* @extends AbstractEntityEvent
-
*/
-#[SubEvent("SomeName")]
+#[SubEvent('SomeName')]
class TestEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return Item::class;
diff --git a/tests/Fixtures/Error/UnknownEventType/TestEvent.php b/tests/Fixtures/Error/UnknownEventType/TestEvent.php
index 38ec708..eeda925 100644
--- a/tests/Fixtures/Error/UnknownEventType/TestEvent.php
+++ b/tests/Fixtures/Error/UnknownEventType/TestEvent.php
@@ -5,18 +5,13 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\SubEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\Item;
-use JetBrains\PhpStorm\Pure;
/**
* @extends AbstractEntityEvent
-
*/
-#[SubEvent("SomeEvent", types: ["invalid"])]
+#[SubEvent('SomeEvent', types: ['invalid'])]
class TestEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return Item::class;
diff --git a/tests/Fixtures/Event/ComplexEntityEvent.php b/tests/Fixtures/Event/ComplexEntityEvent.php
index e0c9ad0..f24a92d 100644
--- a/tests/Fixtures/Event/ComplexEntityEvent.php
+++ b/tests/Fixtures/Event/ComplexEntityEvent.php
@@ -7,30 +7,25 @@
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Model\Change;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\ComplexEntity;
-use JetBrains\PhpStorm\Pure;
/**
- * This class is used for testing SubEvent and Event (implicit) generation
+ * This class is used for testing SubEvent and Event (implicit) generation.
*
* @extends AbstractEntityEvent
*/
#[SubEvent(ComplexEntityEvent::STATUS_CHANGED, changes: [new Change('status')])]
#[SubEvent(ComplexEntityEvent::STATUS_CHANGED_PRE_PERSIST, types: [Events::prePersist], changes: [new Change('status')])]
-#[SubEvent(ComplexEntityEvent::STATUS_WITH_REQUIREMENTS, requirements: ["unimportant" => "specific"], changes: [new Change('status')])]
+#[SubEvent(ComplexEntityEvent::STATUS_WITH_REQUIREMENTS, requirements: ['unimportant' => 'specific'], changes: [new Change('status')])]
#[SubEvent(ComplexEntityEvent::STATUS_CHANGED_15, changes: [new Change('status', to: 15)])]
#[SubEvent(ComplexEntityEvent::STATUS_CHANGED_FROM_10_TO_15, changes: [new Change('status', 10, 15)])]
abstract class ComplexEntityEvent extends AbstractEntityEvent
{
- public const STATUS_CHANGED = "StatusChanged";
- public const STATUS_CHANGED_PRE_PERSIST = "StatusChangedPrePersist";
- public const STATUS_WITH_REQUIREMENTS = "StatusWithUnimportantRequirements";
- public const STATUS_CHANGED_15 = "StatusChangedTo15";
- public const STATUS_CHANGED_FROM_10_TO_15 = "StatusChangedFrom10To15";
+ public const STATUS_CHANGED = 'StatusChanged';
+ public const STATUS_CHANGED_PRE_PERSIST = 'StatusChangedPrePersist';
+ public const STATUS_WITH_REQUIREMENTS = 'StatusWithUnimportantRequirements';
+ public const STATUS_CHANGED_15 = 'StatusChangedTo15';
+ public const STATUS_CHANGED_FROM_10_TO_15 = 'StatusChangedFrom10To15';
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return ComplexEntity::class;
diff --git a/tests/Fixtures/Event/ItemEvent.php b/tests/Fixtures/Event/ItemEvent.php
index 2780a34..795ecc4 100644
--- a/tests/Fixtures/Event/ItemEvent.php
+++ b/tests/Fixtures/Event/ItemEvent.php
@@ -10,7 +10,6 @@
use DualMedia\DoctrineEventConverterBundle\Attributes\PreUpdateEvent;
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\Item;
-use JetBrains\PhpStorm\Pure;
/**
* @extends AbstractEntityEvent
-
@@ -23,10 +22,6 @@
#[PostRemoveEvent]
abstract class ItemEvent extends AbstractEntityEvent
{
- /**
- * @psalm-pure
- */
- #[Pure]
public static function getEntityClass(): string|null
{
return Item::class;
diff --git a/tests/Integration/ValidCompileTest.php b/tests/Integration/ValidCompileTest.php
index 78e5eae..56e7201 100644
--- a/tests/Integration/ValidCompileTest.php
+++ b/tests/Integration/ValidCompileTest.php
@@ -4,8 +4,8 @@
use Doctrine\ORM\Events;
use DualMedia\DoctrineEventConverterBundle\DoctrineEventConverterBundle;
-use DualMedia\DoctrineEventConverterBundle\EventSubscriber\DispatchingSubscriber;
use DualMedia\DoctrineEventConverterBundle\Model\Event;
+use DualMedia\DoctrineEventConverterBundle\Service\EventService;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\ComplexEntity;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Entity\Item;
use DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Event\ComplexEntityEvent;
@@ -22,11 +22,12 @@
use DualMedia\DoctrineEventConverterProxy\DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Event\ItemPrePersistEvent;
use DualMedia\DoctrineEventConverterProxy\DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Event\ItemPreRemoveEvent;
use DualMedia\DoctrineEventConverterProxy\DualMedia\DoctrineEventConverterBundle\Tests\Fixtures\Event\ItemPreUpdateEvent;
+use PHPUnit\Framework\Attributes\Depends;
use Symfony\Component\Finder\Finder;
class ValidCompileTest extends KernelTestCase
{
- public function testGeneration()
+ public function testGeneration(): void
{
$this->assertFileExists(
$this->getProxyClassPath(ItemEvent::class, Events::prePersist),
@@ -64,26 +65,24 @@ public function testGeneration()
$this->assertFileExists(
$this->getProxyClassPath(ComplexEntityEvent::class, ComplexEntityEvent::STATUS_CHANGED),
- ComplexEntityEvent::STATUS_CHANGED." Event should have been generated"
+ ComplexEntityEvent::STATUS_CHANGED.' Event should have been generated'
);
$this->assertFileExists(
$this->getProxyClassPath(ComplexEntityEvent::class, Events::postUpdate),
- "PostUpdate Event should have been generated implicitly"
+ 'PostUpdate Event should have been generated implicitly'
);
$this->assertFileExists(
$this->getProxyClassPath(ComplexEntityEvent::class, ComplexEntityEvent::STATUS_CHANGED_PRE_PERSIST),
- ComplexEntityEvent::STATUS_CHANGED_PRE_PERSIST." Event should have been generated"
+ ComplexEntityEvent::STATUS_CHANGED_PRE_PERSIST.' Event should have been generated'
);
$this->assertFileExists(
$this->getProxyClassPath(ComplexEntityEvent::class, Events::prePersist),
- "PrePersist Event should have been generated implicitly"
+ 'PrePersist Event should have been generated implicitly'
);
}
- /**
- * @depends testGeneration
- */
- public function testAutoload()
+ #[Depends('testGeneration')]
+ public function testAutoload(): void
{
// ItemEvent
$this->assertTrue(class_exists(ItemPrePersistEvent::class));
@@ -100,13 +99,11 @@ public function testAutoload()
$this->assertTrue(class_exists(ComplexEntityStatusChangedPrePersistEvent::class));
}
- /**
- * @depends testGeneration
- */
- public function testCorrectContainerDefinitions()
+ #[Depends('testGeneration')]
+ public function testCorrectContainerDefinitions(): void
{
- $subscriber = $this->getContainer()->get(DispatchingSubscriber::class);
-
+ $service = $this->getContainer()->get(EventService::class);
+ /** @var EventService $service */
$list = [
Events::postPersist => [
Item::class => [
@@ -150,7 +147,7 @@ public function testCorrectContainerDefinitions()
foreach ($entityList as $entity => $events) {
$this->checkArrayWithoutOrderImportance(
$events,
- $subscriber->getEvents($event, $entity)
+ $service->get($event, $entity)
);
}
}
diff --git a/tests/KernelTestCase.php b/tests/KernelTestCase.php
index b1a83bd..2f934bf 100644
--- a/tests/KernelTestCase.php
+++ b/tests/KernelTestCase.php
@@ -25,33 +25,31 @@ protected function getProxyClassPath(
string $class,
string $eventType
): string {
- return $this->getContainer()->get(Generator::class)->resolveFilePath(Generator::getProxyFqcn($class, $eventType));
+ return $this->getContainer()->get(Generator::class)->resolveFilePath(Generator::getProxyFqcn($class, $eventType)); // @phpstan-ignore-line
}
protected function getItemRepo(): EntityRepository
{
- return $this->getContainer()->get('doctrine')->getManager()->getRepository(Item::class);
+ return $this->getContainer()->get('doctrine')->getManager()->getRepository(Item::class); // @phpstan-ignore-line
}
protected function getComplexRepo(): EntityRepository
{
- return $this->getContainer()->get('doctrine')->getManager()->getRepository(ComplexEntity::class);
+ return $this->getContainer()->get('doctrine')->getManager()->getRepository(ComplexEntity::class); // @phpstan-ignore-line
}
protected function getManager(): ObjectManager
{
- return $this->getContainer()->get('doctrine')->getManager();
+ return $this->getContainer()->get('doctrine')->getManager(); // @phpstan-ignore-line
}
protected function getEventDispatcher(): EventDispatcherInterface
{
- return $this->getContainer()->get('event_dispatcher');
+ return $this->getContainer()->get('event_dispatcher'); // @phpstan-ignore-line
}
/**
* @param DispatchEvent[]|AbstractEntityEvent[] $events
- * @param array $expected
- * @param $entity
*/
protected function assertEntityEventList(
array $events,
@@ -68,7 +66,7 @@ protected function assertEntityEventList(
for ($i = 0; $i < count($events); $i++) {
if ($events[$i] instanceof DispatchEvent) {
$this->assertSame(
- $events[$i-1],
+ $events[$i - 1],
$events[$i]->getEvent()
);
$this->assertSame(
@@ -96,17 +94,13 @@ protected function addMappedListeners(
$this->listeners[$event][] = $this->getSimpleCallable($out);
$this->getEventDispatcher()->addListener(
$event,
- $this->listeners[$event][count($this->listeners[$event])-1]
+ $this->listeners[$event][count($this->listeners[$event]) - 1]
);
}
}
protected function clearListeners(): void
{
- if (null === $this->getEventDispatcher()) {
- return;
- }
-
foreach ($this->listeners as $event => $listeners) {
foreach ($listeners as $listener) {
$this->getEventDispatcher()->removeListener(
diff --git a/tests/Model/ChangeTest.php b/tests/Model/ChangeTest.php
index 2965e0b..b55bf10 100644
--- a/tests/Model/ChangeTest.php
+++ b/tests/Model/ChangeTest.php
@@ -3,11 +3,11 @@
namespace DualMedia\DoctrineEventConverterBundle\Tests\Model;
use DualMedia\DoctrineEventConverterBundle\Model\Change;
-use DualMedia\DoctrineEventConverterBundle\Tests\KernelTestCase;
+use PHPUnit\Framework\TestCase;
-class ChangeTest extends KernelTestCase
+class ChangeTest extends TestCase
{
- public function test()
+ public function test(): void
{
$change = new Change('status', 1, 2);
@@ -15,5 +15,4 @@ public function test()
$this->assertSame(1, $change->from);
$this->assertSame(2, $change->to);
}
-
}
diff --git a/tests/Service/DelayableEventDispatcherTest.php b/tests/Service/DelayableEventDispatcherTest.php
index 784f5ac..f740027 100644
--- a/tests/Service/DelayableEventDispatcherTest.php
+++ b/tests/Service/DelayableEventDispatcherTest.php
@@ -5,16 +5,20 @@
use DualMedia\DoctrineEventConverterBundle\Event\AbstractEntityEvent;
use DualMedia\DoctrineEventConverterBundle\Event\DispatchEvent;
use DualMedia\DoctrineEventConverterBundle\Service\DelayableEventDispatcher;
-use DualMedia\DoctrineEventConverterBundle\Tests\KernelTestCase;
+use PHPUnit\Framework\TestCase;
+use Pkly\ServiceMockHelperTrait;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
-class DelayableEventDispatcherTest extends KernelTestCase
+class DelayableEventDispatcherTest extends TestCase
{
- public function testService()
+ use ServiceMockHelperTrait;
+
+ public function testService(): void
{
- $dispatcher = $this->createMock(EventDispatcherInterface::class);
+ $service = $this->createRealMockedServiceInstance(DelayableEventDispatcher::class);
- $dispatcher->expects($this->exactly(2))
+ $this->getMockedService(EventDispatcherInterface::class)
+ ->expects($this->exactly(2))
->method('dispatch')
->willReturnCallback(function ($arg) {
if ($arg instanceof DispatchEvent) {
@@ -26,11 +30,8 @@ public function testService()
return $arg;
});
- $service = new DelayableEventDispatcher($dispatcher);
-
$event = $this->createMock(AbstractEntityEvent::class);
$event->method('getEntityId')->willReturn(123456);
$service->dispatch($event);
}
-
}
diff --git a/tests/Service/EventServiceTest.php b/tests/Service/EventServiceTest.php
new file mode 100644
index 0000000..3698ae8
--- /dev/null
+++ b/tests/Service/EventServiceTest.php
@@ -0,0 +1,55 @@
+service = $this->createRealMockedServiceInstance(EventService::class, [
+ 'entries' => [
+ [
+ ComplexEntityEvent::class,
+ [ComplexEntity::class],
+ Events::prePersist,
+ true,
+ ],
+ ],
+ ]);
+ }
+
+ public function test(): void
+ {
+ $this->assertNotEmpty(
+ $events = $this->service->get(Events::prePersist, ComplexEntity::class),
+ 'There should be exactly 1 event for specified inputs'
+ );
+ $this->assertCount(1, $events, 'There should be exactly 1 event for specified inputs');
+
+ $this->assertEquals(
+ ComplexEntityEvent::class,
+ $events[0]->eventClass
+ );
+ $this->assertTrue($events[0]->afterFlush);
+ }
+
+ public function testNotFound(): void
+ {
+ $this->assertEmpty(
+ $this->service->get(Events::postRemove, Item::class),
+ 'No events should be returned from service'
+ );
+ }
+}
diff --git a/tests/Service/SubEventServiceTest.php b/tests/Service/SubEventServiceTest.php
new file mode 100644
index 0000000..b88d292
--- /dev/null
+++ b/tests/Service/SubEventServiceTest.php
@@ -0,0 +1,81 @@
+service = $this->createRealMockedServiceInstance(SubEventService::class, [
+ 'entries' => [
+ [
+ ComplexEntityEvent::class,
+ [ComplexEntity::class],
+ false,
+ [
+ 'stuff' => null,
+ ],
+ [
+ 'requirement' => 42,
+ ],
+ [
+ Events::prePersist,
+ ],
+ true,
+ ],
+ ],
+ ]);
+ }
+
+ public function test(): void
+ {
+ $this->assertNotEmpty(
+ $events = $this->service->get(ComplexEntity::class),
+ 'There should be exactly 1 event for specified inputs'
+ );
+ $this->assertCount(1, $events, 'There should be exactly 1 event for specified inputs');
+
+ $this->assertArrayHasKey(
+ ComplexEntityEvent::class,
+ $events
+ );
+ $this->assertCount(1, $events[ComplexEntityEvent::class]);
+ $event = $events[ComplexEntityEvent::class][0];
+
+ $this->assertFalse(
+ $event->allMode
+ );
+ $this->assertEquals([
+ 'stuff' => null,
+ ], $event->fields);
+ $this->assertEquals([
+ 'requirement' => 42,
+ ], $event->requirements);
+ $this->assertEquals([
+ Events::prePersist,
+ ], $event->types);
+ $this->assertTrue(
+ $event->afterFlush
+ );
+ }
+
+ public function testEmpty(): void
+ {
+ $this->assertEmpty(
+ $this->service->get(Item::class),
+ 'There should be sub events for specified entity'
+ );
+ }
+}
diff --git a/tests/Service/VerifierServiceTest.php b/tests/Service/VerifierServiceTest.php
new file mode 100644
index 0000000..e252c83
--- /dev/null
+++ b/tests/Service/VerifierServiceTest.php
@@ -0,0 +1,51 @@
+service = $this->createRealPartialMockedServiceInstance(VerifierService::class, []);
+ }
+
+ #[TestWith([true, Events::prePersist, [Events::prePersist]])]
+ #[TestWith([true, Events::prePersist, [Events::prePersist, Events::preUpdate]])]
+ #[TestWith([false, Events::prePersist, [Events::preUpdate]])]
+ public function testValidateType(
+ bool $result,
+ string $type,
+ array $types
+ ): void {
+ $this->assertEquals(
+ $result,
+ $this->service->validateType($type, $types)
+ );
+ }
+
+ #[TestWith([true, 10, 10])]
+ #[TestWith([false, 5, 10])]
+ #[TestWith([true, 5, BackedIntEnum::Is5])]
+ public function testEquals(
+ bool $result,
+ mixed $known,
+ mixed $expected
+ ): void {
+ $this->assertEquals(
+ $result,
+ $this->service->equals($known, $expected)
+ );
+ }
+}
diff --git a/tests/TestKernel.php b/tests/TestKernel.php
index 9e278b4..b81ca7d 100644
--- a/tests/TestKernel.php
+++ b/tests/TestKernel.php
@@ -34,6 +34,7 @@ public function registerBundles(): array
/**
* @noinspection PhpUnusedPrivateMethodInspection
+ *
* @phpstan-ignore-next-line
*/
private function configureContainer(
@@ -44,7 +45,7 @@ private function configureContainer(
$loader->load(__DIR__.'/../config/services_test.php');
$container->extension(DoctrineEventConverterBundle::CONFIGURATION_ROOT, [
- 'parent_directory' => realpath(__DIR__ . '/Fixtures/Event'),
+ 'parent_directory' => realpath(__DIR__.'/Fixtures/Event'),
'parent_namespace' => 'DualMedia\\DoctrineEventConverterBundle\\Tests\\Fixtures\\Event',
]);
@@ -57,6 +58,7 @@ private function configureContainer(
'dbal' => [
'driver' => 'pdo_sqlite',
'path' => '%kernel.cache_dir%/test_db.sqlite',
+ 'use_savepoints' => true,
],
'orm' => [