diff --git a/.env b/.env index b16fd383e..626e85902 100644 --- a/.env +++ b/.env @@ -101,7 +101,7 @@ UPLOADER_STORAGE_USE_PATH_STYLE_ENDPOINT=true UPLOADER_REQUEST_SIGNATURE_TTL=600 UPLOADER_DELETE_ASSET_GRACEFUL_TIME=30 UPLOADER_RABBITMQ_VHOST=uploader -UPLOADER_ALLOWED_FILE_TYPES='image/*(.jpg,.jpeg,.bmp,.tif,.gif,.png,.heic),application/*(.pdf,.doc,.docx,.xls,.xlsx,.odt),video/*(.mpg,.mpeg,.mov,.avi,.mp3,.mp2,.mp4,.m4v,.m4a,.mkv,.hevc)audio/*(.aac,.aiff,.wav)' +UPLOADER_ALLOWED_FILE_TYPES='image/*(.jpg,.jpeg,.bmp,.tif,.gif,.png,.heic,.webp,.svg),application/*(.pdf,.doc,.docx,.xls,.xlsx,.odt),video/*(.mpg,.mpeg,.mov,.avi,.mp3,.mp2,.mp4,.m4v,.m4a,.mkv,.hevc)audio/*(.aac,.aiff,.wav)' # For admin OAuth clients EXPOSE_ADMIN_CLIENT_ID=expose-admin diff --git a/bin/vars.sh b/bin/vars.sh index 35bcd649b..affb0f7d8 100644 --- a/bin/vars.sh +++ b/bin/vars.sh @@ -30,6 +30,8 @@ lib/php/test-bundle lib/php/webhook-bundle lib/php/workflow lib/php/workflow-bundle +lib/php/rendition-factory +lib/php/rendition-factory-bundle " JS_LIBS=" diff --git a/databox/api/Dockerfile b/databox/api/Dockerfile index 3edc39435..78f2d2ee0 100644 --- a/databox/api/Dockerfile +++ b/databox/api/Dockerfile @@ -11,6 +11,8 @@ RUN apk add --no-cache \ libjpeg-turbo \ libpng \ libwebp \ + ffmpeg \ + libreoffice \ && apk add --no-cache --virtual build-essentials \ g++ \ make \ diff --git a/databox/api/composer.json b/databox/api/composer.json index 129a4b08b..03477914c 100644 --- a/databox/api/composer.json +++ b/databox/api/composer.json @@ -43,6 +43,20 @@ "symlink": true } }, + { + "type": "path", + "url": "../../lib/php/rendition-factory", + "options": { + "symlink": true + } + }, + { + "type": "path", + "url": "../../lib/php/rendition-factory-bundle", + "options": { + "symlink": true + } + }, { "type": "path", "url": "../../lib/php/storage-bundle", @@ -121,6 +135,8 @@ "alchemy/es-bundle": "@dev", "alchemy/messenger-bundle": "@dev", "alchemy/metadata-manipulator-bundle": "@dev", + "alchemy/rendition-factory": "@dev", + "alchemy/rendition-factory-bundle": "@dev", "alchemy/storage-bundle": "*", "alchemy/test-bundle": "*", "alchemy/webhook-bundle": "@dev", @@ -141,8 +157,8 @@ "hautelook/alice-bundle": "^2.10", "intervention/image": "^2.7", "kornrunner/blurhash": "^1.2", - "lcobucci/jwt": "^5", "lcobucci/clock": "^3.2", + "lcobucci/jwt": "^5", "nelmio/cors-bundle": "^2.1", "phpdocumentor/reflection-docblock": "^5.2", "predis/predis": "^1.1", diff --git a/databox/api/composer.lock b/databox/api/composer.lock index 801c83268..36d219ba8 100644 --- a/databox/api/composer.lock +++ b/databox/api/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": "90cdbaeb6ec5b8bc03fa70fce292438a", + "content-hash": "95461355655698eda7e053538f30d997", "packages": [ { "name": "alchemy/acl-bundle", @@ -60,7 +60,7 @@ }, { "name": "alchemy/admin-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/admin-bundle", @@ -118,7 +118,7 @@ }, { "name": "alchemy/auth-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/auth-bundle", @@ -175,7 +175,7 @@ }, { "name": "alchemy/core-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/core-bundle", @@ -234,7 +234,7 @@ }, { "name": "alchemy/es-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/es-bundle", @@ -290,7 +290,7 @@ }, { "name": "alchemy/messenger-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/messenger-bundle", @@ -342,7 +342,7 @@ }, { "name": "alchemy/metadata-manipulator-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/metadata-manipulator-bundle", @@ -463,9 +463,125 @@ ], "time": "2024-05-16T07:52:37+00:00" }, + { + "name": "alchemy/rendition-factory", + "version": "dev-PS-670-rendition-factory", + "dist": { + "type": "path", + "url": "../../lib/php/rendition-factory", + "reference": "0473e34447893f1d3c26cc73974d6705f702409a" + }, + "require": { + "ext-imagick": "^3.7", + "imagine/imagine": "^1.3", + "liip/imagine-bundle": "^2.13", + "php": "^8.2", + "php-ffmpeg/php-ffmpeg": "^1.2", + "spatie/pdf-to-image": "^3.1", + "symfony/console": "^6", + "symfony/http-client": "^6.4.11", + "symfony/process": "^6.3", + "symfony/yaml": "^6.2" + }, + "require-dev": { + "colinodell/psr-testlogger": "^1.2", + "friendsofphp/php-cs-fixer": "^3.17", + "phpunit/phpunit": "^11.3.2", + "rector/rector": "^1.2.4", + "symfony/mime": "^7.1", + "symfony/var-dumper": "^6.4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Alchemy\\RenditionFactory\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Alchemy\\RenditionFactory\\Tests\\": "tests/" + } + }, + "scripts": { + "rector": [ + "vendor/bin/rector" + ], + "test": [ + "./vendor/bin/phpunit" + ], + "cs": [ + "vendor/bin/php-cs-fixer fix" + ] + }, + "license": [ + "MIT" + ], + "description": "Rendition factory", + "keywords": [ + "builder" + ], + "transport-options": { + "symlink": true, + "relative": true + } + }, + { + "name": "alchemy/rendition-factory-bundle", + "version": "dev-PS-670-rendition-factory", + "dist": { + "type": "path", + "url": "../../lib/php/rendition-factory-bundle", + "reference": "1fb1c8288b4d1a0c0a99f4a1771004f7511f2280" + }, + "require": { + "php": "^8.2", + "symfony/framework-bundle": "^6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.17", + "rector/rector": "^1.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Alchemy\\RenditionFactoryBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "autoload-dev": { + "psr-4": { + "Alchemy\\RenditionFactoryBundle\\Tests\\": "/Tests/" + } + }, + "scripts": { + "rector": [ + "vendor/bin/rector" + ], + "cs": [ + "vendor/bin/php-cs-fixer fix" + ], + "test": [ + "echo 'This project has no test...'" + ] + }, + "license": [ + "MIT" + ], + "description": "Symfony rendition-factory bundle", + "homepage": "https://www.alchemy.fr/", + "keywords": [ + "rendition-factory" + ], + "transport-options": { + "symlink": true, + "relative": true + } + }, { "name": "alchemy/storage-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/storage-bundle", @@ -520,7 +636,7 @@ }, { "name": "alchemy/test-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/test-bundle", @@ -572,7 +688,7 @@ }, { "name": "alchemy/webhook-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/webhook-bundle", @@ -629,11 +745,11 @@ }, { "name": "alchemy/workflow", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/workflow", - "reference": "24d2648612a470425894c601626effbbe01a2890" + "reference": "ee2c7434eb13f7004c9c0ca5e4206005ac27985f" }, "require": { "ext-json": "*", @@ -679,12 +795,6 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Arthur de Moulins", - "email": "arthurdemoulins@gmail.com" - } - ], "description": "Workflow engine", "keywords": [ "async", @@ -699,7 +809,7 @@ }, { "name": "alchemy/workflow-bundle", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/workflow-bundle", @@ -755,16 +865,16 @@ }, { "name": "api-platform/core", - "version": "v3.3.5", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/api-platform/core.git", - "reference": "b5a93fb0bb855273aabb0807505ba61b68813246" + "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/core/zipball/b5a93fb0bb855273aabb0807505ba61b68813246", - "reference": "b5a93fb0bb855273aabb0807505ba61b68813246", + "url": "https://api.github.com/repos/api-platform/core/zipball/e2eeb6b710f96542b75357a13d8d69ed4d8be5e2", + "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2", "shasum": "" }, "require": { @@ -937,9 +1047,9 @@ ], "support": { "issues": "https://github.com/api-platform/core/issues", - "source": "https://github.com/api-platform/core/tree/v3.3.5" + "source": "https://github.com/api-platform/core/tree/v3.3.12" }, - "time": "2024-05-29T05:48:47+00:00" + "time": "2024-08-30T14:44:44+00:00" }, { "name": "arthem/object-reference-bundle", @@ -988,16 +1098,16 @@ }, { "name": "aws/aws-crt-php", - "version": "v1.2.5", + "version": "v1.2.6", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b" + "reference": "a63485b65b6b3367039306496d49737cf1995408" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408", + "reference": "a63485b65b6b3367039306496d49737cf1995408", "shasum": "" }, "require": { @@ -1036,22 +1146,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6" }, - "time": "2024-04-19T21:30:56+00:00" + "time": "2024-06-13T17:21:28+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.311.2", + "version": "3.321.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "731cd73062909594c5f7443413c4c4c40ed1c25c" + "reference": "92e5d5fbfd3b29522b763d49d8f2fdf32e58fc1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/731cd73062909594c5f7443413c4c4c40ed1c25c", - "reference": "731cd73062909594c5f7443413c4c4c40ed1c25c", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/92e5d5fbfd3b29522b763d49d8f2fdf32e58fc1e", + "reference": "92e5d5fbfd3b29522b763d49d8f2fdf32e58fc1e", "shasum": "" }, "require": { @@ -1104,7 +1214,10 @@ ], "psr-4": { "Aws\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/data/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1131,9 +1244,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.311.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.321.3" }, - "time": "2024-06-07T18:05:33+00:00" + "time": "2024-09-03T18:04:21+00:00" }, { "name": "beberlei/doctrineextensions", @@ -2208,16 +2321,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.4", + "version": "3.9.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd" + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", "shasum": "" }, "require": { @@ -2233,12 +2346,12 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.58", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.16", + "phpstan/phpstan": "1.12.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.9.0", + "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" @@ -2301,7 +2414,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.4" + "source": "https://github.com/doctrine/dbal/tree/3.9.1" }, "funding": [ { @@ -2317,7 +2430,7 @@ "type": "tidelift" } ], - "time": "2024-04-25T07:04:44+00:00" + "time": "2024-09-01T13:49:23+00:00" }, { "name": "doctrine/deprecations", @@ -2368,16 +2481,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5418e811a14724068e95e0ba43353b903ada530f" + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f", - "reference": "5418e811a14724068e95e0ba43353b903ada530f", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", "shasum": "" }, "require": { @@ -2468,7 +2581,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0" }, "funding": [ { @@ -2484,7 +2597,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T07:20:37+00:00" + "time": "2024-09-01T09:46:40+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -2909,21 +3022,21 @@ }, { "name": "doctrine/migrations", - "version": "3.7.4", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "954e0a314c2f0eb9fb418210445111747de254a6" + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/954e0a314c2f0eb9fb418210445111747de254a6", - "reference": "954e0a314c2f0eb9fb418210445111747de254a6", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877", + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/dbal": "^3.5.1 || ^4", + "doctrine/dbal": "^3.6 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2.0", "php": "^8.1", @@ -2941,6 +3054,7 @@ "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", + "fig/log-test": "^1", "phpstan/phpstan": "^1.10", "phpstan/phpstan-deprecation-rules": "^1.1", "phpstan/phpstan-phpunit": "^1.3", @@ -2961,7 +3075,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + "Doctrine\\Migrations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2991,7 +3105,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.7.4" + "source": "https://github.com/doctrine/migrations/tree/3.8.1" }, "funding": [ { @@ -3007,20 +3121,20 @@ "type": "tidelift" } ], - "time": "2024-03-06T13:41:11+00:00" + "time": "2024-08-28T13:17:28+00:00" }, { "name": "doctrine/orm", - "version": "2.19.5", + "version": "2.19.7", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "94986af28452da42a46a4489d1c958a2e5d710e5" + "reference": "168ac31084226f94d42e7461a40ff5607a56bd35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/94986af28452da42a46a4489d1c958a2e5d710e5", - "reference": "94986af28452da42a46a4489d1c958a2e5d710e5", + "url": "https://api.github.com/repos/doctrine/orm/zipball/168ac31084226f94d42e7461a40ff5607a56bd35", + "reference": "168ac31084226f94d42e7461a40ff5607a56bd35", "shasum": "" }, "require": { @@ -3049,14 +3163,14 @@ "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.59", + "phpstan/phpstan": "~1.4.10 || 1.11.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "vimeo/psalm": "4.30.0 || 5.22.2" + "vimeo/psalm": "4.30.0 || 5.24.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -3106,22 +3220,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.5" + "source": "https://github.com/doctrine/orm/tree/2.19.7" }, - "time": "2024-04-30T06:49:54+00:00" + "time": "2024-08-23T06:54:57+00:00" }, { "name": "doctrine/persistence", - "version": "3.3.2", + "version": "3.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "477da35bd0255e032826f440b94b3e37f2d56f42" + "reference": "b337726451f5d530df338fc7f68dee8781b49779" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/477da35bd0255e032826f440b94b3e37f2d56f42", - "reference": "477da35bd0255e032826f440b94b3e37f2d56f42", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", + "reference": "b337726451f5d530df338fc7f68dee8781b49779", "shasum": "" }, "require": { @@ -3133,15 +3247,14 @@ "doctrine/common": "<2.10" }, "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^12", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.9.4", + "phpstan/phpstan": "1.11.1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.3.0" + "vimeo/psalm": "4.30.0 || 5.24.0" }, "type": "library", "autoload": { @@ -3190,7 +3303,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.2" + "source": "https://github.com/doctrine/persistence/tree/3.3.3" }, "funding": [ { @@ -3206,20 +3319,20 @@ "type": "tidelift" } ], - "time": "2024-03-12T14:54:36+00:00" + "time": "2024-06-20T10:14:30+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc" + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", "shasum": "" }, "require": { @@ -3259,22 +3372,22 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0" + "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" }, - "time": "2024-05-08T08:12:09+00:00" + "time": "2024-08-05T20:32:22+00:00" }, { "name": "easycorp/easyadmin-bundle", - "version": "v4.10.2", + "version": "v4.12.0", "source": { "type": "git", "url": "https://github.com/EasyCorp/EasyAdminBundle.git", - "reference": "a2775352f5e0f0a778516eb7d6c62ff8eb417ecb" + "reference": "d21c3222a660f6aa9748623e53db8be5d8d98e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/a2775352f5e0f0a778516eb7d6c62ff8eb417ecb", - "reference": "a2775352f5e0f0a778516eb7d6c62ff8eb417ecb", + "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/d21c3222a660f6aa9748623e53db8be5d8d98e78", + "reference": "d21c3222a660f6aa9748623e53db8be5d8d98e78", "shasum": "" }, "require": { @@ -3348,7 +3461,7 @@ ], "support": { "issues": "https://github.com/EasyCorp/EasyAdminBundle/issues", - "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.10.2" + "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.12.0" }, "funding": [ { @@ -3356,7 +3469,7 @@ "type": "github" } ], - "time": "2024-05-21T19:52:09+00:00" + "time": "2024-09-02T17:48:17+00:00" }, { "name": "elasticsearch/elasticsearch", @@ -3425,6 +3538,53 @@ }, "time": "2023-04-21T15:31:12+00:00" }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, { "name": "exercise/htmlpurifier-bundle", "version": "4.1.2", @@ -3833,16 +3993,16 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.15.0", + "version": "v3.16.1", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "2a89103f4984d8970f3855284c8c04e6e6a63c0f" + "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/2a89103f4984d8970f3855284c8c04e6e6a63c0f", - "reference": "2a89103f4984d8970f3855284c8c04e6e6a63c0f", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e85560ed96f977b8c29428a99222cb2ef2f0e80d", + "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d", "shasum": "" }, "require": { @@ -3861,7 +4021,7 @@ "doctrine/annotations": "<1.13 || >=3.0", "doctrine/dbal": "<3.2 || >=4.0", "doctrine/mongodb-odm": "<2.3 || >=3.0", - "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=3.0" + "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=4.0" }, "require-dev": { "doctrine/annotations": "^1.13 || ^2.0", @@ -3869,16 +4029,18 @@ "doctrine/dbal": "^3.2", "doctrine/doctrine-bundle": "^2.3", "doctrine/mongodb-odm": "^2.3", - "doctrine/orm": "^2.14.0", + "doctrine/orm": "^2.14.0 || ^3.0", "friendsofphp/php-cs-fixer": "^3.14.0", "nesbot/carbon": "^2.71 || ^3.0", - "phpstan/phpstan": "^1.10.2", - "phpstan/phpstan-doctrine": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-doctrine": "^1.4", + "phpstan/phpstan-phpunit": "^1.4", "phpunit/phpunit": "^9.6", - "rector/rector": "^0.19", + "rector/rector": "^1.1", "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0", "symfony/phpunit-bridge": "^6.0 || ^7.0", + "symfony/uid": "^5.4 || ^6.0 || ^7.0", "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { @@ -3888,7 +4050,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.13-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -3936,7 +4098,7 @@ "support": { "email": "gediminas.morkevicius@gmail.com", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.15.0", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.16.1", "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" }, "funding": [ @@ -3957,26 +4119,26 @@ "type": "github" } ], - "time": "2024-02-12T15:17:22+00:00" + "time": "2024-06-25T16:22:14+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -3987,9 +4149,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -4067,7 +4229,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -4083,20 +4245,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -4104,7 +4266,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -4150,7 +4312,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -4166,20 +4328,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -4194,8 +4356,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -4266,7 +4428,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -4282,7 +4444,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "hautelook/alice-bundle", @@ -4416,6 +4578,68 @@ }, "time": "2021-07-21T13:50:14+00:00" }, + { + "name": "imagine/imagine", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/php-imagine/Imagine.git", + "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/7151d553edec4dc2bbac60419f7a74ff34700e7f", + "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" + }, + "suggest": { + "ext-exif": "to read EXIF metadata", + "ext-gd": "to use the GD implementation", + "ext-gmagick": "to use the Gmagick implementation", + "ext-imagick": "to use the Imagick implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Imagine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com", + "homepage": "http://avalanche123.com" + } + ], + "description": "Image processing for PHP 5.3", + "homepage": "http://imagine.readthedocs.org/", + "keywords": [ + "drawing", + "graphics", + "image manipulation", + "image processing" + ], + "support": { + "issues": "https://github.com/php-imagine/Imagine/issues", + "source": "https://github.com/php-imagine/Imagine/tree/1.3.5" + }, + "time": "2023-06-07T14:49:52+00:00" + }, { "name": "intervention/image", "version": "2.7.2", @@ -4987,6 +5211,112 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "liip/imagine-bundle", + "version": "2.13.2", + "source": { + "type": "git", + "url": "https://github.com/liip/LiipImagineBundle.git", + "reference": "98e0318ea0f7b9500343236e63cc29ded58a1d43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/98e0318ea0f7b9500343236e63cc29ded58a1d43", + "reference": "98e0318ea0f7b9500343236e63cc29ded58a1d43", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "imagine/imagine": "^1.3.2", + "php": "^7.2|^8.0", + "symfony/filesystem": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/finder": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/framework-bundle": "^3.4.23|^4.4|^5.3|^6.0|^7.0", + "symfony/mime": "^4.4|^5.3|^6.0|^7.0", + "symfony/options-resolver": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/process": "^3.4|^4.4|^5.3|^6.0|^7.0", + "twig/twig": "^1.44|^2.9|^3.0" + }, + "require-dev": { + "amazonwebservices/aws-sdk-for-php": "^1.0", + "aws/aws-sdk-php": "^2.4|^3.0", + "doctrine/cache": "^1.11|^2.0", + "doctrine/persistence": "^1.3|^2.0", + "enqueue/enqueue-bundle": "^0.9|^0.10", + "ext-gd": "*", + "league/flysystem": "^1.0|^2.0|^3.0", + "phpstan/phpstan": "^1.10.0", + "psr/cache": "^1.0|^2.0|^3.0", + "psr/log": "^1.0", + "symfony/asset": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/browser-kit": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/cache": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/console": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/dependency-injection": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/form": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/messenger": "^4.4|^5.3|^6.0|^7.0", + "symfony/phpunit-bridge": "^7.0.2", + "symfony/templating": "^3.4|^4.4|^5.3|^6.0", + "symfony/validator": "^3.4|^4.4|^5.3|^6.0|^7.0", + "symfony/yaml": "^3.4|^4.4|^5.3|^6.0|^7.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "required for mongodb components", + "amazonwebservices/aws-sdk-for-php": "required to use AWS version 1 cache resolver", + "aws/aws-sdk-php": "required to use AWS version 2/3 cache resolver", + "doctrine/mongodb-odm": "required to use mongodb-backed doctrine components", + "enqueue/enqueue-bundle": "^0.9 add if you like to process images in background", + "ext-exif": "required to read EXIF metadata from images", + "ext-gd": "required to use gd driver", + "ext-gmagick": "required to use gmagick driver", + "ext-imagick": "required to use imagick driver", + "ext-json": "required to read JSON manifest versioning", + "ext-mongodb": "required for mongodb components", + "league/flysystem": "required to use FlySystem data loader or cache resolver", + "monolog/monolog": "A psr/log compatible logger is required to enable logging", + "rokka/imagine-vips": "required to use 'vips' driver", + "symfony/asset": "If you want to use asset versioning", + "symfony/messenger": "If you like to process images in background", + "symfony/templating": "required to use deprecated Templating component instead of Twig" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Liip\\ImagineBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip and other contributors", + "homepage": "https://github.com/liip/LiipImagineBundle/contributors" + } + ], + "description": "This bundle provides an image manipulation abstraction toolkit for Symfony-based projects.", + "homepage": "https://www.liip.ch", + "keywords": [ + "bundle", + "image", + "imagine", + "liip", + "manipulation", + "photos", + "pictures", + "symfony", + "transformation" + ], + "support": { + "issues": "https://github.com/liip/LiipImagineBundle/issues", + "source": "https://github.com/liip/LiipImagineBundle/tree/2.13.2" + }, + "time": "2024-09-04T12:55:26+00:00" + }, { "name": "masterminds/html5", "version": "2.9.0", @@ -5056,16 +5386,16 @@ }, { "name": "monolog/monolog", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -5141,7 +5471,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.6.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -5153,7 +5483,7 @@ "type": "tidelift" } ], - "time": "2024-04-12T21:02:21+00:00" + "time": "2024-06-28T09:40:51+00:00" }, { "name": "mtdowling/jmespath.php", @@ -5223,16 +5553,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -5240,11 +5570,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -5270,7 +5601,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -5278,20 +5609,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "nelmio/alice", - "version": "3.13.5", + "version": "3.13.6", "source": { "type": "git", "url": "https://github.com/nelmio/alice.git", - "reference": "f05bd9740f8513da8a9ca78df6a08451a1dea787" + "reference": "76caab8675c68956d56a2dd03f66384251e0aa7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/alice/zipball/f05bd9740f8513da8a9ca78df6a08451a1dea787", - "reference": "f05bd9740f8513da8a9ca78df6a08451a1dea787", + "url": "https://api.github.com/repos/nelmio/alice/zipball/76caab8675c68956d56a2dd03f66384251e0aa7c", + "reference": "76caab8675c68956d56a2dd03f66384251e0aa7c", "shasum": "" }, "require": { @@ -5365,7 +5696,7 @@ ], "support": { "issues": "https://github.com/nelmio/alice/issues", - "source": "https://github.com/nelmio/alice/tree/3.13.5" + "source": "https://github.com/nelmio/alice/tree/3.13.6" }, "funding": [ { @@ -5373,20 +5704,20 @@ "type": "github" } ], - "time": "2024-04-02T09:07:42+00:00" + "time": "2024-07-03T17:54:12+00:00" }, { "name": "nelmio/cors-bundle", - "version": "2.4.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "78fcdb91f76b080a1008133def9c7f613833933d" + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/78fcdb91f76b080a1008133def9c7f613833933d", - "reference": "78fcdb91f76b080a1008133def9c7f613833933d", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544", "shasum": "" }, "require": { @@ -5433,9 +5764,9 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", - "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.4.0" + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.5.0" }, - "time": "2023-11-30T16:41:19+00:00" + "time": "2024-06-24T21:25:28+00:00" }, { "name": "nyholm/dsn", @@ -5500,16 +5831,16 @@ }, { "name": "oneup/flysystem-bundle", - "version": "4.12.1", + "version": "4.12.2", "source": { "type": "git", "url": "https://github.com/1up-lab/OneupFlysystemBundle.git", - "reference": "625175dcb65f4cdedd52d0a644683a2ebdc688d2" + "reference": "888cceb2ee641b0d59d5feb31a2447318c311a48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/625175dcb65f4cdedd52d0a644683a2ebdc688d2", - "reference": "625175dcb65f4cdedd52d0a644683a2ebdc688d2", + "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/888cceb2ee641b0d59d5feb31a2447318c311a48", + "reference": "888cceb2ee641b0d59d5feb31a2447318c311a48", "shasum": "" }, "require": { @@ -5583,22 +5914,22 @@ ], "support": { "issues": "https://github.com/1up-lab/OneupFlysystemBundle/issues", - "source": "https://github.com/1up-lab/OneupFlysystemBundle/tree/4.12.1" + "source": "https://github.com/1up-lab/OneupFlysystemBundle/tree/4.12.2" }, - "time": "2024-04-08T13:50:27+00:00" + "time": "2024-06-10T12:55:36+00:00" }, { "name": "pagerfanta/pagerfanta", - "version": "v4.6.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/BabDev/Pagerfanta.git", - "reference": "155317cf06e0a01f7567d5381fc89fdd7df6f60d" + "reference": "301903c1be505769e932ba5523cc01969f954d37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BabDev/Pagerfanta/zipball/155317cf06e0a01f7567d5381fc89fdd7df6f60d", - "reference": "155317cf06e0a01f7567d5381fc89fdd7df6f60d", + "url": "https://api.github.com/repos/BabDev/Pagerfanta/zipball/301903c1be505769e932ba5523cc01969f954d37", + "reference": "301903c1be505769e932ba5523cc01969f954d37", "shasum": "" }, "require": { @@ -5636,10 +5967,10 @@ "doctrine/phpcr-odm": "^1.7 || ^2.0", "jackalope/jackalope-doctrine-dbal": "^1.9 || ^2.0", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "1.11.2", + "phpstan/phpstan": "1.11.10", "phpstan/phpstan-phpunit": "1.4.0", - "phpunit/phpunit": "10.5.20", - "rector/rector": "1.1.0", + "phpunit/phpunit": "10.5.30", + "rector/rector": "1.2.3", "ruflin/elastica": "^7.3 || ^8.0", "solarium/solarium": "^6.2", "symfony/cache": "^5.4 || ^6.3 || ^7.0", @@ -5678,7 +6009,7 @@ ], "support": { "issues": "https://github.com/BabDev/Pagerfanta/issues", - "source": "https://github.com/BabDev/Pagerfanta/tree/v4.6.0" + "source": "https://github.com/BabDev/Pagerfanta/tree/v4.7.0" }, "funding": [ { @@ -5686,7 +6017,7 @@ "type": "github" } ], - "time": "2024-05-29T22:05:52+00:00" + "time": "2024-08-13T23:52:34+00:00" }, { "name": "paragonie/sodium_compat", @@ -5775,16 +6106,105 @@ "time": "2024-04-22T22:05:04+00:00" }, { - "name": "php-http/client-common", - "version": "2.7.1", + "name": "php-ffmpeg/php-ffmpeg", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612" + "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", + "reference": "785a5ba05dd88b3b8146f85f18476b259b23917c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/785a5ba05dd88b3b8146f85f18476b259b23917c", + "reference": "785a5ba05dd88b3b8146f85f18476b259b23917c", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0", + "php": "^8.0 || ^8.1 || ^8.2 || ^8.3", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "spatie/temporary-directory": "^2.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5.10" + }, + "suggest": { + "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" + }, + "type": "library", + "autoload": { + "psr-4": { + "FFMpeg\\": "src/FFMpeg", + "Alchemy\\BinaryDriver\\": "src/Alchemy/BinaryDriver" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + }, + { + "name": "Patrik Karisch", + "email": "patrik@karisch.guru", + "homepage": "http://www.karisch.guru" + }, + { + "name": "Romain Biard", + "email": "romain.biard@gmail.com", + "homepage": "https://www.strime.io/" + }, + { + "name": "Jens Hausdorf", + "email": "hello@jens-hausdorf.de", + "homepage": "https://jens-hausdorf.de" + }, + { + "name": "Pascal Baljet", + "email": "pascal@protone.media", + "homepage": "https://protone.media" + } + ], + "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg", + "keywords": [ + "audio", + "audio processing", + "avconv", + "avprobe", + "ffmpeg", + "ffprobe", + "video", + "video processing" + ], + "support": { + "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues", + "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.2.0" + }, + "time": "2024-01-02T10:37:01+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612", "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612", "shasum": "" }, @@ -6332,16 +6752,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "version": "1.30.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f", + "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f", "shasum": "" }, "require": { @@ -6373,9 +6793,9 @@ "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.29.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0" }, - "time": "2024-05-31T08:52:43+00:00" + "time": "2024-08-29T09:54:52+00:00" }, { "name": "predis/predis", @@ -6861,16 +7281,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -6905,9 +7325,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -7990,18 +8410,149 @@ ], "time": "2024-02-26T09:27:19+00:00" }, + { + "name": "spatie/pdf-to-image", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/pdf-to-image.git", + "reference": "acc31c5236180e475c09c1a5c68412876f0bd89a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/pdf-to-image/zipball/acc31c5236180e475c09c1a5c68412876f0bd89a", + "reference": "acc31c5236180e475c09c1a5c68412876f0bd89a", + "shasum": "" + }, + "require": { + "ext-imagick": "*", + "php": "^8.2" + }, + "require-dev": { + "pestphp/pest": "^2.34" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\PdfToImage\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Patrick Organ", + "email": "patrick@permafrost.dev", + "homepage": "https://permafrost.dev", + "role": "Developer" + } + ], + "description": "Convert a pdf to an image", + "homepage": "https://github.com/spatie/pdf-to-image", + "keywords": [ + "convert", + "image", + "pdf", + "pdf-to-image", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/pdf-to-image/issues", + "source": "https://github.com/spatie/pdf-to-image/tree/3.1.0" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-09-14T17:02:32+00:00" + }, + { + "name": "spatie/temporary-directory", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/temporary-directory.git", + "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", + "reference": "76949fa18f8e1a7f663fd2eaa1d00e0bcea0752a", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\TemporaryDirectory\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Vanderbist", + "email": "alex@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily create, use and destroy temporary directories", + "homepage": "https://github.com/spatie/temporary-directory", + "keywords": [ + "php", + "spatie", + "temporary-directory" + ], + "support": { + "issues": "https://github.com/spatie/temporary-directory/issues", + "source": "https://github.com/spatie/temporary-directory/tree/2.2.1" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-12-25T11:46:58+00:00" + }, { "name": "stof/doctrine-extensions-bundle", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git", - "reference": "9f7023e4c8a1c00a5627d41c1027a3f89e477630" + "reference": "473ae65598fa4160654c350e139e20ee75d9a91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/9f7023e4c8a1c00a5627d41c1027a3f89e477630", - "reference": "9f7023e4c8a1c00a5627d41c1027a3f89e477630", + "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/473ae65598fa4160654c350e139e20ee75d9a91a", + "reference": "473ae65598fa4160654c350e139e20ee75d9a91a", "shasum": "" }, "require": { @@ -8066,9 +8617,9 @@ ], "support": { "issues": "https://github.com/stof/StofDoctrineExtensionsBundle/issues", - "source": "https://github.com/stof/StofDoctrineExtensionsBundle/tree/v1.11.0" + "source": "https://github.com/stof/StofDoctrineExtensionsBundle/tree/v1.12.0" }, - "time": "2024-02-13T14:43:20+00:00" + "time": "2024-06-10T12:27:27+00:00" }, { "name": "symfony/amqp-messenger", @@ -8210,16 +8761,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "287142df5579ce223c485b3872df3efae8390984" + "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/287142df5579ce223c485b3872df3efae8390984", - "reference": "287142df5579ce223c485b3872df3efae8390984", + "url": "https://api.github.com/repos/symfony/cache/zipball/36daef8fce88fe0b9a4f8cf4c342ced5c05616dc", + "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc", "shasum": "" }, "require": { @@ -8286,7 +8837,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.8" + "source": "https://github.com/symfony/cache/tree/v6.4.11" }, "funding": [ { @@ -8302,7 +8853,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-05T07:40:31+00:00" }, { "name": "symfony/cache-contracts", @@ -8534,16 +9085,16 @@ }, { "name": "symfony/console", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" + "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998", + "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998", "shasum": "" }, "require": { @@ -8608,7 +9159,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.8" + "source": "https://github.com/symfony/console/tree/v6.4.11" }, "funding": [ { @@ -8624,7 +9175,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-15T22:48:29+00:00" }, { "name": "symfony/css-selector", @@ -8693,16 +9244,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c" + "reference": "e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d3b618176e8c3a9e5772151c51eba0c52a0c771c", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e", + "reference": "e93c8368dc9915c2fe12018ff22fcbbdd32c9a9e", "shasum": "" }, "require": { @@ -8754,7 +9305,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.4.8" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.11" }, "funding": [ { @@ -8770,7 +9321,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-29T08:15:38+00:00" }, { "name": "symfony/deprecation-contracts", @@ -8841,16 +9392,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04" + "reference": "3c7a50bb920a5398c906725942d947493b1b044c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04", - "reference": "afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3c7a50bb920a5398c906725942d947493b1b044c", + "reference": "3c7a50bb920a5398c906725942d947493b1b044c", "shasum": "" }, "require": { @@ -8929,7 +9480,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.11" }, "funding": [ { @@ -8945,20 +9496,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-13T10:11:51+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "71de78d0531fe8f1d884746df7170a3c9a473210" + "reference": "b2b05fefcc906695d4a10151089483a96cd65cdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/71de78d0531fe8f1d884746df7170a3c9a473210", - "reference": "71de78d0531fe8f1d884746df7170a3c9a473210", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/b2b05fefcc906695d4a10151089483a96cd65cdd", + "reference": "b2b05fefcc906695d4a10151089483a96cd65cdd", "shasum": "" }, "require": { @@ -9001,7 +9552,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.4.8" + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.4.11" }, "funding": [ { @@ -9017,7 +9568,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-30T06:59:46+00:00" }, { "name": "symfony/dom-crawler", @@ -9088,16 +9639,16 @@ }, { "name": "symfony/dotenv", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "55aefa0029adff89ecffdb560820e945c7983f06" + "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/55aefa0029adff89ecffdb560820e945c7983f06", - "reference": "55aefa0029adff89ecffdb560820e945c7983f06", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/2ae0c84cc9be0dc1eeb86016970b63c764d8472e", + "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e", "shasum": "" }, "require": { @@ -9142,7 +9693,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.8" + "source": "https://github.com/symfony/dotenv/tree/v6.4.10" }, "funding": [ { @@ -9158,20 +9709,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-09T18:29:35+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc" + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", "shasum": "" }, "require": { @@ -9217,7 +9768,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.4.8" + "source": "https://github.com/symfony/error-handler/tree/v6.4.10" }, "funding": [ { @@ -9233,7 +9784,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/event-dispatcher", @@ -9393,16 +9944,16 @@ }, { "name": "symfony/expression-language", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a" + "reference": "564e109c40d3637053c942a29a58e9434592a8bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a", - "reference": "0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/564e109c40d3637053c942a29a58e9434592a8bf", + "reference": "564e109c40d3637053c942a29a58e9434592a8bf", "shasum": "" }, "require": { @@ -9437,7 +9988,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.4.8" + "source": "https://github.com/symfony/expression-language/tree/v6.4.11" }, "funding": [ { @@ -9453,20 +10004,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3" + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d37529150e7081c51b3c5d5718c55a04a9503f3", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", "shasum": "" }, "require": { @@ -9503,7 +10054,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.8" + "source": "https://github.com/symfony/filesystem/tree/v6.4.9" }, "funding": [ { @@ -9519,20 +10070,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/finder", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c" + "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c", + "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", + "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", "shasum": "" }, "require": { @@ -9567,7 +10118,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.8" + "source": "https://github.com/symfony/finder/tree/v6.4.11" }, "funding": [ { @@ -9583,20 +10134,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-13T14:27:37+00:00" }, { "name": "symfony/flex", - "version": "v1.21.6", + "version": "v1.21.7", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8" + "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8", - "reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8", + "url": "https://api.github.com/repos/symfony/flex/zipball/33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", + "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", "shasum": "" }, "require": { @@ -9632,7 +10183,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v1.21.6" + "source": "https://github.com/symfony/flex/tree/v1.21.7" }, "funding": [ { @@ -9648,20 +10199,20 @@ "type": "tidelift" } ], - "time": "2024-03-02T08:16:37+00:00" + "time": "2024-04-27T10:20:37+00:00" }, { "name": "symfony/form", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "196ebc738e59bec2bbf1f49c24cc221b47f77f5d" + "reference": "330d337558ecd77c664ae71e99fbc8dbc4032246" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/196ebc738e59bec2bbf1f49c24cc221b47f77f5d", - "reference": "196ebc738e59bec2bbf1f49c24cc221b47f77f5d", + "url": "https://api.github.com/repos/symfony/form/zipball/330d337558ecd77c664ae71e99fbc8dbc4032246", + "reference": "330d337558ecd77c664ae71e99fbc8dbc4032246", "shasum": "" }, "require": { @@ -9729,7 +10280,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.8" + "source": "https://github.com/symfony/form/tree/v6.4.11" }, "funding": [ { @@ -9745,20 +10296,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "7c7739f87f1a8be1c2f5e7d28addfe763a917acb" + "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/7c7739f87f1a8be1c2f5e7d28addfe763a917acb", - "reference": "7c7739f87f1a8be1c2f5e7d28addfe763a917acb", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6cbdb0cc3ddbb63499262cd3036882b08ee2690b", + "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b", "shasum": "" }, "require": { @@ -9877,7 +10428,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.4.8" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.10" }, "funding": [ { @@ -9893,20 +10444,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T13:24:20+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05" + "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05", - "reference": "61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4c92046bb788648ff1098cc66da69aa7eac8cb65", + "reference": "4c92046bb788648ff1098cc66da69aa7eac8cb65", "shasum": "" }, "require": { @@ -9970,7 +10521,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.8" + "source": "https://github.com/symfony/http-client/tree/v6.4.11" }, "funding": [ { @@ -9986,7 +10537,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-26T06:30:21+00:00" }, { "name": "symfony/http-client-contracts", @@ -10068,16 +10619,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947" + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/27de8cc95e11db7a50b027e71caaab9024545947", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b", + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b", "shasum": "" }, "require": { @@ -10125,7 +10676,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.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.10" }, "funding": [ { @@ -10141,20 +10692,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:36:27+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1" + "reference": "1ba6b89d781cb47448155cc70dd2e0f1b0584c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1ba6b89d781cb47448155cc70dd2e0f1b0584c79", + "reference": "1ba6b89d781cb47448155cc70dd2e0f1b0584c79", "shasum": "" }, "require": { @@ -10239,7 +10790,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.4.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.11" }, "funding": [ { @@ -10255,7 +10806,7 @@ "type": "tidelift" } ], - "time": "2024-06-02T16:06:25+00:00" + "time": "2024-08-30T16:57:20+00:00" }, { "name": "symfony/intl", @@ -10421,16 +10972,16 @@ }, { "name": "symfony/messenger", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "0b3b27ec0b10364a28109ef323c67c6e0ac97380" + "reference": "7985801bc96cd5c130746b422d49e371ba5d66de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/0b3b27ec0b10364a28109ef323c67c6e0ac97380", - "reference": "0b3b27ec0b10364a28109ef323c67c6e0ac97380", + "url": "https://api.github.com/repos/symfony/messenger/zipball/7985801bc96cd5c130746b422d49e371ba5d66de", + "reference": "7985801bc96cd5c130746b422d49e371ba5d66de", "shasum": "" }, "require": { @@ -10488,7 +11039,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.4.8" + "source": "https://github.com/symfony/messenger/tree/v6.4.10" }, "funding": [ { @@ -10504,20 +11055,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-09T18:35:14+00:00" }, { "name": "symfony/mime", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33" + "reference": "dba5d5f6073baf7a3576b580cc4a208b4ca00553" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/618597ab8b78ac86d1c75a9d0b35540cda074f33", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33", + "url": "https://api.github.com/repos/symfony/mime/zipball/dba5d5f6073baf7a3576b580cc4a208b4ca00553", + "reference": "dba5d5f6073baf7a3576b580cc4a208b4ca00553", "shasum": "" }, "require": { @@ -10531,7 +11082,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -10541,7 +11092,7 @@ "symfony/process": "^5.4|^6.4|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -10573,7 +11124,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.8" + "source": "https://github.com/symfony/mime/tree/v6.4.11" }, "funding": [ { @@ -10589,7 +11140,7 @@ "type": "tidelift" } ], - "time": "2024-06-01T07:50:16+00:00" + "time": "2024-08-13T12:15:02+00:00" }, { "name": "symfony/monolog-bridge", @@ -10892,20 +11443,20 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -10950,7 +11501,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -10966,20 +11517,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1" + "reference": "e76343c631b453088e2260ac41dfebe21954de81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/07094a28851a49107f3ab4f9120ca2975a64b6e1", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", + "reference": "e76343c631b453088e2260ac41dfebe21954de81", "shasum": "" }, "require": { @@ -11034,7 +11585,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" }, "funding": [ { @@ -11050,26 +11601,25 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:12:16+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -11118,7 +11668,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -11134,24 +11684,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -11199,7 +11749,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -11215,24 +11765,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -11279,7 +11829,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -11295,24 +11845,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -11355,7 +11905,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -11371,24 +11921,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -11435,7 +11985,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -11451,25 +12001,100 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2" }, "type": "library", "extra": { @@ -11512,7 +12137,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -11528,20 +12153,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", "shasum": "" }, "require": { @@ -11591,7 +12216,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" }, "funding": [ { @@ -11607,7 +12232,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/process", @@ -11672,16 +12297,16 @@ }, { "name": "symfony/property-access", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "e4d9b00983612f9c0013ca37c61affdba2dd975a" + "reference": "866f6cd84f2094cbc6f66ce9752faf749916e2a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/e4d9b00983612f9c0013ca37c61affdba2dd975a", - "reference": "e4d9b00983612f9c0013ca37c61affdba2dd975a", + "url": "https://api.github.com/repos/symfony/property-access/zipball/866f6cd84f2094cbc6f66ce9752faf749916e2a9", + "reference": "866f6cd84f2094cbc6f66ce9752faf749916e2a9", "shasum": "" }, "require": { @@ -11729,7 +12354,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.8" + "source": "https://github.com/symfony/property-access/tree/v6.4.11" }, "funding": [ { @@ -11745,20 +12370,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-30T16:10:11+00:00" }, { "name": "symfony/property-info", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "7f544bc6ceb1a6a2283c7af8e8621262c43b7ede" + "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/7f544bc6ceb1a6a2283c7af8e8621262c43b7ede", - "reference": "7f544bc6ceb1a6a2283c7af8e8621262c43b7ede", + "url": "https://api.github.com/repos/symfony/property-info/zipball/edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", + "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", "shasum": "" }, "require": { @@ -11812,7 +12437,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.8" + "source": "https://github.com/symfony/property-info/tree/v6.4.10" }, "funding": [ { @@ -11828,7 +12453,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T07:32:07+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -11992,16 +12617,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" + "reference": "8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "url": "https://api.github.com/repos/symfony/routing/zipball/8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a", + "reference": "8ee0c24c1bf61c263a26f1b9b6d19e83b1121f2a", "shasum": "" }, "require": { @@ -12055,7 +12680,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.8" + "source": "https://github.com/symfony/routing/tree/v6.4.11" }, "funding": [ { @@ -12071,20 +12696,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-29T08:15:38+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "dfb286069b0332e1f1c21962133d17c0fbc1e5e7" + "reference": "620be16fceded671823ce6332d06f44bb327096d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/dfb286069b0332e1f1c21962133d17c0fbc1e5e7", - "reference": "dfb286069b0332e1f1c21962133d17c0fbc1e5e7", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/620be16fceded671823ce6332d06f44bb327096d", + "reference": "620be16fceded671823ce6332d06f44bb327096d", "shasum": "" }, "require": { @@ -12093,7 +12718,7 @@ "php": ">=8.1", "symfony/clock": "^6.3|^7.0", "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.2|^7.0", + "symfony/dependency-injection": "^6.4.11|^7.1.4", "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^6.2|^7.0", @@ -12167,7 +12792,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.11" }, "funding": [ { @@ -12183,20 +12808,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-20T11:22:16+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "5fc7850ada5e8e03d78c1739c82c64d5e2f7d495" + "reference": "a8e106dc62e2b778093b29800187edbe62bbaa4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/5fc7850ada5e8e03d78c1739c82c64d5e2f7d495", - "reference": "5fc7850ada5e8e03d78c1739c82c64d5e2f7d495", + "url": "https://api.github.com/repos/symfony/security-core/zipball/a8e106dc62e2b778093b29800187edbe62bbaa4e", + "reference": "a8e106dc62e2b778093b29800187edbe62bbaa4e", "shasum": "" }, "require": { @@ -12253,7 +12878,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.8" + "source": "https://github.com/symfony/security-core/tree/v6.4.11" }, "funding": [ { @@ -12269,7 +12894,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-29T08:15:38+00:00" }, { "name": "symfony/security-csrf", @@ -12341,16 +12966,16 @@ }, { "name": "symfony/security-http", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "fb82ddec887dc67f3bcf4d6df3cb8efd529be104" + "reference": "f502530fd13b2d6dac62446e10ad86c95d63e044" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/fb82ddec887dc67f3bcf4d6df3cb8efd529be104", - "reference": "fb82ddec887dc67f3bcf4d6df3cb8efd529be104", + "url": "https://api.github.com/repos/symfony/security-http/zipball/f502530fd13b2d6dac62446e10ad86c95d63e044", + "reference": "f502530fd13b2d6dac62446e10ad86c95d63e044", "shasum": "" }, "require": { @@ -12409,7 +13034,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.8" + "source": "https://github.com/symfony/security-http/tree/v6.4.11" }, "funding": [ { @@ -12425,20 +13050,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-15T22:52:23+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c" + "reference": "a75d03d7720417f8a654e73e8f02acdea8779cd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/a75d03d7720417f8a654e73e8f02acdea8779cd0", + "reference": "a75d03d7720417f8a654e73e8f02acdea8779cd0", "shasum": "" }, "require": { @@ -12507,7 +13132,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.8" + "source": "https://github.com/symfony/serializer/tree/v6.4.11" }, "funding": [ { @@ -12523,7 +13148,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-17T07:51:47+00:00" }, { "name": "symfony/service-contracts", @@ -12672,16 +13297,16 @@ }, { "name": "symfony/string", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" + "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b", + "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b", "shasum": "" }, "require": { @@ -12738,7 +13363,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.11" }, "funding": [ { @@ -12754,7 +13379,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "symfony/templating", @@ -12824,16 +13449,16 @@ }, { "name": "symfony/translation", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" + "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", + "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9", + "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9", "shasum": "" }, "require": { @@ -12899,7 +13524,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.8" + "source": "https://github.com/symfony/translation/tree/v6.4.10" }, "funding": [ { @@ -12915,7 +13540,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/translation-contracts", @@ -12997,16 +13622,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "57de1b7d7499053a2c5beb9344751e8bfd332649" + "reference": "2cf03a4012631b74d68f9e6c3e03798ac592cbe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/57de1b7d7499053a2c5beb9344751e8bfd332649", - "reference": "57de1b7d7499053a2c5beb9344751e8bfd332649", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2cf03a4012631b74d68f9e6c3e03798ac592cbe5", + "reference": "2cf03a4012631b74d68f9e6c3e03798ac592cbe5", "shasum": "" }, "require": { @@ -13086,7 +13711,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.11" }, "funding": [ { @@ -13102,7 +13727,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-29T08:15:38+00:00" }, { "name": "symfony/twig-bundle", @@ -13190,16 +13815,16 @@ }, { "name": "symfony/uid", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf" + "reference": "6a0394ad707de386547223948fac1e0f2805bc0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", - "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", + "url": "https://api.github.com/repos/symfony/uid/zipball/6a0394ad707de386547223948fac1e0f2805bc0b", + "reference": "6a0394ad707de386547223948fac1e0f2805bc0b", "shasum": "" }, "require": { @@ -13244,7 +13869,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.8" + "source": "https://github.com/symfony/uid/tree/v6.4.11" }, "funding": [ { @@ -13260,20 +13885,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "symfony/validator", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c" + "reference": "4ff41cf10af1de99ad92895411b55c9f309bc2d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dab2781371d54c86f6b25623ab16abb2dde2870c", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c", + "url": "https://api.github.com/repos/symfony/validator/zipball/4ff41cf10af1de99ad92895411b55c9f309bc2d8", + "reference": "4ff41cf10af1de99ad92895411b55c9f309bc2d8", "shasum": "" }, "require": { @@ -13341,7 +13966,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.8" + "source": "https://github.com/symfony/validator/tree/v6.4.11" }, "funding": [ { @@ -13357,20 +13982,20 @@ "type": "tidelift" } ], - "time": "2024-06-02T15:48:50+00:00" + "time": "2024-08-30T15:57:55+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", "shasum": "" }, "require": { @@ -13426,7 +14051,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" }, "funding": [ { @@ -13442,20 +14067,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-30T16:03:21+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "792ca836f99b340f2e9ca9497c7953948c49a504" + "reference": "f9a060622e0d93777b7f8687ec4860191e16802e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/792ca836f99b340f2e9ca9497c7953948c49a504", - "reference": "792ca836f99b340f2e9ca9497c7953948c49a504", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e", + "reference": "f9a060622e0d93777b7f8687ec4860191e16802e", "shasum": "" }, "require": { @@ -13503,7 +14128,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.8" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.9" }, "funding": [ { @@ -13519,7 +14144,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-24T15:53:56+00:00" }, { "name": "symfony/web-link", @@ -13606,16 +14231,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9" + "reference": "be37e7f13195e05ab84ca5269365591edd240335" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/be37e7f13195e05ab84ca5269365591edd240335", + "reference": "be37e7f13195e05ab84ca5269365591edd240335", "shasum": "" }, "require": { @@ -13658,7 +14283,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.8" + "source": "https://github.com/symfony/yaml/tree/v6.4.11" }, "funding": [ { @@ -13674,20 +14299,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "theofidry/alice-data-fixtures", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/theofidry/AliceDataFixtures.git", - "reference": "c05882a3ba35f8858de189aec0029b0598de7dce" + "reference": "39a2fb2d83d683bec58e9fa0c1e22feceb17056e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/AliceDataFixtures/zipball/c05882a3ba35f8858de189aec0029b0598de7dce", - "reference": "c05882a3ba35f8858de189aec0029b0598de7dce", + "url": "https://api.github.com/repos/theofidry/AliceDataFixtures/zipball/39a2fb2d83d683bec58e9fa0c1e22feceb17056e", + "reference": "39a2fb2d83d683bec58e9fa0c1e22feceb17056e", "shasum": "" }, "require": { @@ -13762,7 +14387,7 @@ ], "support": { "issues": "https://github.com/theofidry/AliceDataFixtures/issues", - "source": "https://github.com/theofidry/AliceDataFixtures/tree/1.7.1" + "source": "https://github.com/theofidry/AliceDataFixtures/tree/1.7.2" }, "funding": [ { @@ -13770,28 +14395,28 @@ "type": "github" } ], - "time": "2024-03-18T12:41:21+00:00" + "time": "2024-07-05T21:18:40+00:00" }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.14.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -13837,7 +14462,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.14.0" }, "funding": [ { @@ -13849,7 +14474,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-09-09T17:55:12+00:00" }, { "name": "webmozart/assert", @@ -13969,7 +14594,7 @@ "packages-dev": [ { "name": "alchemy/api-test", - "version": "dev-master", + "version": "dev-PS-670-rendition-factory", "dist": { "type": "path", "url": "../../lib/php/api-test", @@ -14086,30 +14711,38 @@ }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -14137,7 +14770,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -14153,20 +14786,20 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-08-27T18:44:43+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -14218,7 +14851,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -14234,7 +14867,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "composer/xdebug-handler", @@ -14302,65 +14935,18 @@ ], "time": "2024-05-06T16:37:16+00:00" }, - { - "name": "evenement/evenement", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^9 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Evenement\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/v3.0.2" - }, - "time": "2023-08-08T05:53:35+00:00" - }, { "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -14400,7 +14986,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { @@ -14408,20 +14994,20 @@ "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.58.1", + "version": "v3.64.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff" + "reference": "58dd9c931c785a79739310aef5178928305ffa67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/04e9424025677a86914b9a4944dbbf4060bb0aff", - "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67", + "reference": "58dd9c931c785a79739310aef5178928305ffa67", "shasum": "" }, "require": { @@ -14451,16 +15037,16 @@ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "infection/infection": "^0.27.11", + "facile-it/paraunit": "^1.3 || ^2.3", + "infection/infection": "^0.29.5", "justinrainbow/json-schema": "^5.2", "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "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", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, @@ -14475,7 +15061,10 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -14500,7 +15089,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.58.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0" }, "funding": [ { @@ -14508,24 +15097,24 @@ "type": "github" } ], - "time": "2024-05-29T16:39:07+00:00" + "time": "2024-08-30T23:09:38+00:00" }, { "name": "justinrainbow/json-schema", - "version": "v5.2.13", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", @@ -14536,11 +15125,6 @@ "bin/validate-json" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -14576,22 +15160,22 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/v5.2.13" + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" }, - "time": "2023-09-26T02:20:38+00:00" + "time": "2024-07-06T21:00:26+00:00" }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -14602,7 +15186,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -14634,9 +15218,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "phar-io/manifest", @@ -14811,16 +15395,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.4", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82" + "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2", + "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2", "shasum": "" }, "require": { @@ -14865,39 +15449,39 @@ "type": "github" } ], - "time": "2024-06-06T12:19:22+00:00" + "time": "2024-09-03T19:55:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "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", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -14906,7 +15490,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -14935,7 +15519,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.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -14943,7 +15527,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -15188,45 +15772,45 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.19", + "version": "9.6.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + "reference": "49d7820565836236411f5dc002d16dd689cde42f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", + "reference": "49d7820565836236411f5dc002d16dd689cde42f", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-file-iterator": "^3.0.6", "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", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "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/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { @@ -15271,7 +15855,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.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" }, "funding": [ { @@ -15287,7 +15871,7 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:35:58+00:00" + "time": "2024-07-10T11:45:39+00:00" }, { "name": "react/cache", @@ -15442,28 +16026,28 @@ }, { "name": "react/dns", - "version": "v1.12.0", + "version": "v1.13.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec" + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", "shasum": "" }, "require": { "php": ">=5.3.0", "react/cache": "^1.0 || ^0.6 || ^0.5", "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1" + "react/promise": "^3.2 || ^2.7 || ^1.2.1" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", - "react/promise-timer": "^1.9" + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -15506,7 +16090,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.12.0" + "source": "https://github.com/reactphp/dns/tree/v1.13.0" }, "funding": [ { @@ -15514,7 +16098,7 @@ "type": "open_collective" } ], - "time": "2023-11-29T12:41:06+00:00" + "time": "2024-06-13T14:18:03+00:00" }, { "name": "react/event-loop", @@ -15590,31 +16174,31 @@ }, { "name": "react/socket", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "react/dns": "^1.11", + "react/dns": "^1.13", "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.6 || ^1.2.1", - "react/stream": "^1.2" + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", + "react/async": "^4.3 || ^3.3 || ^2", "react/promise-stream": "^1.4", - "react/promise-timer": "^1.10" + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -15658,7 +16242,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.15.0" + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, "funding": [ { @@ -15666,20 +16250,20 @@ "type": "open_collective" } ], - "time": "2023-12-15T11:02:10+00:00" + "time": "2024-07-26T10:38:09+00:00" }, { "name": "react/stream", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/reactphp/stream.git", - "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66" + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/6fbc9672905c7d5a885f2da2fc696f65840f4a66", - "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { @@ -15689,7 +16273,7 @@ }, "require-dev": { "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -15736,7 +16320,7 @@ ], "support": { "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.3.0" + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, "funding": [ { @@ -15744,25 +16328,25 @@ "type": "open_collective" } ], - "time": "2023-06-16T10:52:11+00:00" + "time": "2024-06-11T12:45:25+00:00" }, { "name": "rector/rector", - "version": "1.1.0", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "556509e2dcf527369892b7d411379c4a02f31859" + "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/556509e2dcf527369892b7d411379c4a02f31859", - "reference": "556509e2dcf527369892b7d411379c4a02f31859", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381", + "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.11.11" }, "conflict": { "rector/rector-doctrine": "*", @@ -15795,7 +16379,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.1.0" + "source": "https://github.com/rectorphp/rector/tree/1.2.4" }, "funding": [ { @@ -15803,7 +16387,7 @@ "type": "github" } ], - "time": "2024-05-18T09:40:27+00:00" + "time": "2024-08-23T09:03:01+00:00" }, { "name": "sebastian/cli-parser", @@ -16632,16 +17216,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "937f47cc64922f283bb0c474f33415bba0a9fc0d" + "reference": "168f412dcd6caf3813a9cc0f286cd68f6a76f070" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/937f47cc64922f283bb0c474f33415bba0a9fc0d", - "reference": "937f47cc64922f283bb0c474f33415bba0a9fc0d", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/168f412dcd6caf3813a9cc0f286cd68f6a76f070", + "reference": "168f412dcd6caf3813a9cc0f286cd68f6a76f070", "shasum": "" }, "require": { @@ -16694,83 +17278,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-06-02T15:48:50+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.11" }, "funding": [ { @@ -16786,20 +17294,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-08-13T14:27:37+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.8", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "bcc806d1360991de3bf78ac5ca0202db85de9bfc" + "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/bcc806d1360991de3bf78ac5ca0202db85de9bfc", - "reference": "bcc806d1360991de3bf78ac5ca0202db85de9bfc", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3", + "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3", "shasum": "" }, "require": { @@ -16852,7 +17360,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.11" }, "funding": [ { @@ -16868,7 +17376,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-08-12T09:55:28+00:00" }, { "name": "theseer/tokenizer", @@ -16930,6 +17438,8 @@ "alchemy/es-bundle": 20, "alchemy/messenger-bundle": 20, "alchemy/metadata-manipulator-bundle": 20, + "alchemy/rendition-factory": 20, + "alchemy/rendition-factory-bundle": 20, "alchemy/webhook-bundle": 20, "alchemy/workflow-bundle": 20, "arthem/object-reference-bundle": 20, diff --git a/databox/api/config/bundles.php b/databox/api/config/bundles.php index c86f2993e..50835713d 100644 --- a/databox/api/config/bundles.php +++ b/databox/api/config/bundles.php @@ -32,4 +32,5 @@ Alchemy\MessengerBundle\AlchemyMessengerBundle::class => ['all' => true], Sentry\SentryBundle\SentryBundle::class => ['prod' => true], Arthem\ObjectReferenceBundle\ArthemObjectReferenceBundle::class => ['all' => true], + Alchemy\RenditionFactoryBundle\AlchemyRenditionFactoryBundle::class => ['all' => true], ]; diff --git a/databox/api/config/services.yaml b/databox/api/config/services.yaml index c02681174..4c13a3c69 100644 --- a/databox/api/config/services.yaml +++ b/databox/api/config/services.yaml @@ -129,3 +129,5 @@ services: decorates: 'alchemy.workflow.workflow_repository.default' arguments: $decorated: '@.inner' + + Alchemy\RenditionFactory\Templating\TemplateResolverInterface: '@App\Asset\Attribute\TemplateResolver' diff --git a/databox/api/config/validator/validation.yaml b/databox/api/config/validator/validation.yaml index 36ce5ed7e..3c5cd68ed 100644 --- a/databox/api/config/validator/validation.yaml +++ b/databox/api/config/validator/validation.yaml @@ -126,6 +126,7 @@ App\Entity\Core\RenditionDefinition: properties: - workspace - class.workspace + - parent.workspace properties: class: - NotNull: ~ diff --git a/databox/api/migrations/Version20240828200522.php b/databox/api/migrations/Version20240828200522.php new file mode 100644 index 000000000..a68044bae --- /dev/null +++ b/databox/api/migrations/Version20240828200522.php @@ -0,0 +1,39 @@ +addSql('ALTER TABLE rendition_definition ADD parent_id UUID DEFAULT NULL'); + $this->addSql('ALTER TABLE rendition_definition ALTER substitutable DROP DEFAULT'); + $this->addSql('COMMENT ON COLUMN rendition_definition.parent_id IS \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE rendition_definition ADD CONSTRAINT FK_63599969727ACA70 FOREIGN KEY (parent_id) REFERENCES rendition_definition (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('CREATE INDEX IDX_63599969727ACA70 ON rendition_definition (parent_id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE rendition_definition DROP CONSTRAINT FK_63599969727ACA70'); + $this->addSql('DROP INDEX IDX_63599969727ACA70'); + $this->addSql('ALTER TABLE rendition_definition DROP parent_id'); + $this->addSql('ALTER TABLE rendition_definition ALTER substitutable SET DEFAULT true'); + } +} diff --git a/databox/api/migrations/Version20240903143441.php b/databox/api/migrations/Version20240903143441.php new file mode 100644 index 000000000..ec62d3412 --- /dev/null +++ b/databox/api/migrations/Version20240903143441.php @@ -0,0 +1,32 @@ +addSql('ALTER TABLE asset_rendition ADD build_hash VARCHAR(32) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE asset_rendition DROP build_hash'); + } +} diff --git a/databox/api/migrations/Version20240919100619.php b/databox/api/migrations/Version20240919100619.php new file mode 100644 index 000000000..6ce1cc27b --- /dev/null +++ b/databox/api/migrations/Version20240919100619.php @@ -0,0 +1,32 @@ +addSql('ALTER TABLE asset_rendition ADD module_hashes JSON DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE asset_rendition DROP module_hashes'); + } +} diff --git a/databox/api/src/Admin/Field/IntegrationChoiceField.php b/databox/api/src/Admin/Field/IntegrationChoiceField.php index 5b6a2a4b6..577930dc5 100644 --- a/databox/api/src/Admin/Field/IntegrationChoiceField.php +++ b/databox/api/src/Admin/Field/IntegrationChoiceField.php @@ -6,6 +6,7 @@ use App\Integration\IntegrationRegistry; use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField; +use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter; final readonly class IntegrationChoiceField { @@ -13,17 +14,23 @@ public function __construct(private IntegrationRegistry $integrationRegistry) { } - public function create(string $propertyName, ?string $label = null): ChoiceField + private function getChoices(): array { $choices = []; foreach ($this->integrationRegistry->getIntegrations() as $type) { $choices[$type::getTitle()] = $type::getName(); } - if (empty($choices)) { - $choices = ['' => '']; - } + return $choices ?: ['' => '']; + } + + public function create(string $propertyName, ?string $label = null): ChoiceField + { + return ChoiceField::new($propertyName, $label)->setChoices($this->getChoices()); + } - return ChoiceField::new($propertyName, $label)->setChoices($choices); + public function createFilter(string $propertyName, ?string $label = null): ChoiceFilter + { + return ChoiceFilter::new($propertyName, $label)->setChoices($this->getChoices()); } } diff --git a/databox/api/src/Api/InputTransformer/RenditionDefinitionInputTransformer.php b/databox/api/src/Api/InputTransformer/RenditionDefinitionInputTransformer.php index 26082b78b..06c31c5ed 100644 --- a/databox/api/src/Api/InputTransformer/RenditionDefinitionInputTransformer.php +++ b/databox/api/src/Api/InputTransformer/RenditionDefinitionInputTransformer.php @@ -55,6 +55,8 @@ public function transform(object $data, string $resourceClass, array $context = $object->setKey($data->key); } + $object->setParent($data->parent); + if (null !== $data->name) { $object->setName($data->name); } diff --git a/databox/api/src/Api/Model/Input/RenditionDefinitionInput.php b/databox/api/src/Api/Model/Input/RenditionDefinitionInput.php index ceedddfc3..d0d7bdd3d 100644 --- a/databox/api/src/Api/Model/Input/RenditionDefinitionInput.php +++ b/databox/api/src/Api/Model/Input/RenditionDefinitionInput.php @@ -17,6 +17,12 @@ class RenditionDefinitionInput #[Groups([RenditionDefinition::GROUP_WRITE])] public $workspace; + /** + * @var RenditionDefinition|null + */ + #[Groups([RenditionDefinition::GROUP_WRITE])] + public $parent; + /** * @var RenditionClass|null */ diff --git a/databox/api/src/Api/Model/Output/AssetRenditionOutput.php b/databox/api/src/Api/Model/Output/AssetRenditionOutput.php new file mode 100644 index 000000000..5e8b37c4f --- /dev/null +++ b/databox/api/src/Api/Model/Output/AssetRenditionOutput.php @@ -0,0 +1,32 @@ +setCreatedAt($data->getCreatedAt()); + $output->setUpdatedAt($data->getUpdatedAt()); + + $output->asset = $data->getAsset(); + $definition = $data->getDefinition(); + $output->definition = $definition; + $output->file = $data->getFile(); + $output->name = $data->getName(); + + if ($this->hasGroup([AssetRendition::GROUP_LIST, AssetRendition::GROUP_READ], $context)) { + $output->dirty = $this->renditionBuildHashManager->isRenditionDirty($data); + } + + return $output; + } +} diff --git a/databox/api/src/Controller/Core/ExportAction.php b/databox/api/src/Api/Processor/ExportProcessor.php similarity index 86% rename from databox/api/src/Controller/Core/ExportAction.php rename to databox/api/src/Api/Processor/ExportProcessor.php index bb50603be..5e1df15ed 100644 --- a/databox/api/src/Controller/Core/ExportAction.php +++ b/databox/api/src/Api/Processor/ExportProcessor.php @@ -2,10 +2,13 @@ declare(strict_types=1); -namespace App\Controller\Core; +namespace App\Api\Processor; use Alchemy\AuthBundle\Security\JwtUser; +use Alchemy\AuthBundle\Security\Traits\SecurityAwareTrait; use Alchemy\StorageBundle\Util\FileUtil; +use ApiPlatform\Metadata\Operation; +use ApiPlatform\State\ProcessorInterface; use ApiPlatform\Validator\ValidatorInterface; use App\Asset\FileUrlResolver; use App\Entity\Core\AssetRendition; @@ -13,12 +16,12 @@ use App\Repository\Core\AssetRenditionRepository; use App\Security\RenditionPermissionManager; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\Request; use Symfony\Contracts\HttpClient\HttpClientInterface; -class ExportAction extends AbstractController +class ExportProcessor implements ProcessorInterface { + use SecurityAwareTrait; + public function __construct( private readonly HttpClientInterface $zippyClient, private readonly ValidatorInterface $validator, @@ -28,7 +31,10 @@ public function __construct( ) { } - public function __invoke(Export $data, Request $request): Export + /** + * @param Export $data + */ + public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): Export { $user = $this->getUser(); $userId = $user instanceof JwtUser ? $user->getId() : null; diff --git a/databox/api/src/Asset/Attribute/FallbackResolver.php b/databox/api/src/Asset/Attribute/FallbackResolver.php index 09977cc6c..9ab1f5295 100644 --- a/databox/api/src/Asset/Attribute/FallbackResolver.php +++ b/databox/api/src/Asset/Attribute/FallbackResolver.php @@ -9,19 +9,16 @@ use App\Entity\Core\Attribute; use App\Entity\Core\AttributeDefinition; use Doctrine\ORM\EntityManagerInterface; -use Twig\Environment; -use Twig\Loader\ArrayLoader; class FallbackResolver { - private readonly Environment $twig; private ?array $indexByName = null; - public function __construct(private readonly EntityManagerInterface $em) + public function __construct( + private readonly EntityManagerInterface $em, + private readonly TemplateResolver $templateResolver, + ) { - $this->twig = new Environment(new ArrayLoader(), [ - 'autoescape' => false, - ]); } private function getDefinitionIndexByName(string $workspaceId): array @@ -51,7 +48,7 @@ public function resolveAttrFallback( if (!empty($fallbacks[$locale])) { if (null === $attributesIndex->getAttribute($definition->getId(), $locale)) { - $fallbackValue = $this->resolveFallback($fallbacks[$locale], [ + $fallbackValue = $this->templateResolver->resolve($fallbacks[$locale], [ 'file' => $asset->getSource(), 'asset' => $asset, 'attr' => new DynamicAttributeBag($attributesIndex, $definitionsIndex, function (AttributeDefinition $depDef) use ( @@ -85,11 +82,4 @@ public function resolveAttrFallback( return null; } - - private function resolveFallback(string $fallbackTemplate, array $values): string - { - $template = $this->twig->createTemplate($fallbackTemplate); - - return $this->twig->render($template, $values); - } } diff --git a/databox/api/src/Asset/Attribute/TemplateResolver.php b/databox/api/src/Asset/Attribute/TemplateResolver.php new file mode 100644 index 000000000..a2214521e --- /dev/null +++ b/databox/api/src/Asset/Attribute/TemplateResolver.php @@ -0,0 +1,26 @@ +twig = new Environment(new ArrayLoader(), [ + 'autoescape' => false, + ]); + } + + public function resolve(string $template, array $values): string + { + $template = $this->twig->createTemplate($template); + + return $this->twig->render($template, $values); + } +} diff --git a/databox/api/src/Asset/RenditionBuildHashManager.php b/databox/api/src/Asset/RenditionBuildHashManager.php new file mode 100644 index 000000000..e93ef83bb --- /dev/null +++ b/databox/api/src/Asset/RenditionBuildHashManager.php @@ -0,0 +1,76 @@ +isPickSourceFile() + || null === $definition->getDefinition()) { + return null; + } + + return md5(implode('|', [ + $source->getId(), + $definition->getId(), + $definition->getDefinition(), + ])); + } + + public function isRenditionDirty(AssetRendition $assetRendition): bool + { + $definition = $assetRendition->getDefinition(); + + if (null !== $parentDefinition = $definition->getParent()) { + $parentRendition = $this->renditionManager->getAssetRenditionByDefinition($assetRendition->getAsset(), $parentDefinition); + if (null === $parentRendition) { + throw new \LogicException(sprintf('Parent rendition "%s" not found for asset "%s"', $parentDefinition->getName(), $asset->getId())); + } + + $source = $parentRendition->getFile(); + } else { + $source = $assetRendition->getAsset()->getSource(); + } + + if ($this->getBuildHash($source, $definition) !== $assetRendition->getBuildHash()) { + dump($assetRendition->getId()); + dump($this->getBuildHash($assetRendition->getFile(), $definition)); + dump($assetRendition->getBuildHash()); + return true; + } + + if (!empty($moduleHashes = $assetRendition->getModuleHashes())) { + return $this->renditionCreator->buildHashesDiffer( + $moduleHashes, + $this->loader->parse($definition->getDefinition()), + new CreateRenditionOptions( + metadataContainer: new AssetMetadataContainer($assetRendition->getAsset(), $this->attributesResolver, $this->assetTitleResolver), + ), + ); + } + + return false; + } +} diff --git a/databox/api/src/Asset/RenditionBuilder.php b/databox/api/src/Asset/RenditionBuilder.php new file mode 100644 index 000000000..35046e1cb --- /dev/null +++ b/databox/api/src/Asset/RenditionBuilder.php @@ -0,0 +1,114 @@ +isPickSourceFile()) { + $this->renditionManager->createOrReplaceRenditionFile($asset, + $renditionDefinition, + $asset->getSource(), + null, + null, + ); + $this->em->flush(); + + return; + } + + if (null !== $parentDefinition = $renditionDefinition->getParent()) { + $parentRendition = $this->renditionManager->getAssetRenditionByDefinition($asset, $parentDefinition); + if (null === $parentRendition) { + throw new \LogicException(sprintf('Parent rendition "%s" not found for asset "%s"', $parentDefinition->getName(), $asset->getId())); + } + + $source = $parentRendition->getFile(); + } else { + $source = $asset->getSource(); + } + + $buildHash = $this->buildHashManager->getBuildHash($source, $renditionDefinition); + + $existingRendition = $this->renditionManager->getAssetRenditionByDefinition($asset, $renditionDefinition); + if (!$force && $existingRendition?->getBuildHash() === $buildHash) { + return; + } + + $metadataContainer = new AssetMetadataContainer($asset, $this->attributesResolver, $this->assetTitleResolver); + + try { + $outputFile = $this->createRendition($source, $renditionDefinition->getDefinition(), $metadataContainer); + + if (null !== $outputFile) { + $file = $this->fileManager->createFileFromPath( + $asset->getWorkspace(), + $outputFile->getPath(), + $outputFile->getType() + ); + } else { + $file = $source; + } + + $this->renditionManager->createOrReplaceRenditionFile( + $asset, + $renditionDefinition, + $file, + $buildHash, + $outputFile->getBuildHashes(), + ); + $this->em->flush(); + } finally { + $this->renditionCreator->cleanUp(); + } + } + + private function createRendition(File $source, string $buildDef, AssetMetadataContainer $metadataContainer): ?OutputFileInterface + { + $sourcePath = $this->fileFetcher->getFile($source); + + $outputFile = $this->renditionCreator->createRendition( + $sourcePath, + $source->getType(), + $this->loader->parse($buildDef), + new CreateRenditionOptions( + metadataContainer: $metadataContainer, + ) + ); + + if ($sourcePath === $outputFile->getPath()) { + return null; + } + + return $outputFile; + } +} diff --git a/databox/api/src/Consumer/Handler/Phraseanet/PhraseanetDownloadSubdefHandler.php b/databox/api/src/Consumer/Handler/Phraseanet/PhraseanetDownloadSubdefHandler.php index a2aed3a94..a687e1f6a 100644 --- a/databox/api/src/Consumer/Handler/Phraseanet/PhraseanetDownloadSubdefHandler.php +++ b/databox/api/src/Consumer/Handler/Phraseanet/PhraseanetDownloadSubdefHandler.php @@ -54,7 +54,9 @@ public function __invoke(PhraseanetDownloadSubdef $message): void $permalink, $message->getType(), $message->getSize(), - basename($urlPart) + basename($urlPart), + null, + null ); $this->em->flush(); diff --git a/databox/api/src/Controller/Admin/AssetRenditionCrudController.php b/databox/api/src/Controller/Admin/AssetRenditionCrudController.php index 532f44ed7..4602757ce 100644 --- a/databox/api/src/Controller/Admin/AssetRenditionCrudController.php +++ b/databox/api/src/Controller/Admin/AssetRenditionCrudController.php @@ -3,15 +3,20 @@ namespace App\Controller\Admin; use Alchemy\AdminBundle\Controller\AbstractAdminCrudController; +use Alchemy\AdminBundle\Field\CodeField; use Alchemy\AdminBundle\Field\IdField; +use Alchemy\AdminBundle\Field\JsonField; use App\Entity\Core\AssetRendition; use EasyCorp\Bundle\EasyAdminBundle\Config\Action; use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Config\Filters; +use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField; use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField; +use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField; use EasyCorp\Bundle\EasyAdminBundle\Field\Field; +use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter; class AssetRenditionCrudController extends AbstractAdminCrudController @@ -26,6 +31,7 @@ public function configureActions(Actions $actions): Actions return parent::configureActions($actions) ->remove(Crud::PAGE_INDEX, Action::EDIT) ->remove(Crud::PAGE_INDEX, Action::NEW) + ->add(Crud::PAGE_INDEX, Action::DETAIL) ; } @@ -47,25 +53,17 @@ public function configureFilters(Filters $filters): Filters public function configureFields(string $pageName): iterable { - $ready = Field::new('ready'); - $createdAt = DateTimeField::new('createdAt'); - $updatedAt = DateTimeField::new('updatedAt'); - $definition = AssociationField::new('definition'); - $asset = AssociationField::new('asset'); - $file = AssociationField::new('file'); - $id = IdField::new(); - $fileId = IdField::new('file.id'); - - if (Crud::PAGE_INDEX === $pageName) { - return [$id, $definition, $asset, $fileId, $updatedAt, $createdAt]; - } elseif (Crud::PAGE_DETAIL === $pageName) { - return [$id, $ready, $createdAt, $updatedAt, $definition, $asset, $file]; - } elseif (Crud::PAGE_NEW === $pageName) { - return [$ready, $createdAt, $updatedAt, $definition, $asset, $file]; - } elseif (Crud::PAGE_EDIT === $pageName) { - return [$ready, $createdAt, $updatedAt, $definition, $asset, $file]; - } - - return []; + yield IdField::new(); + yield AssociationField::new('asset'); + yield AssociationField::new('definition'); + yield CodeField::new('buildHash') + ->hideOnIndex(); + yield JsonField::new('moduleHashes') + ->hideOnIndex(); + yield AssociationField::new('file'); + yield BooleanField::new('ready') + ->renderAsSwitch(false); + yield DateTimeField::new('updatedAt'); + yield DateTimeField::new('createdAt'); } } diff --git a/databox/api/src/Controller/Admin/IntegrationCrudController.php b/databox/api/src/Controller/Admin/IntegrationCrudController.php index fd7cbfc01..1fc9f1c9c 100644 --- a/databox/api/src/Controller/Admin/IntegrationCrudController.php +++ b/databox/api/src/Controller/Admin/IntegrationCrudController.php @@ -8,12 +8,16 @@ use App\Admin\Field\IntegrationChoiceField; use App\Entity\Integration\WorkspaceIntegration; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; +use EasyCorp\Bundle\EasyAdminBundle\Config\Filters; use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField; use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField; +use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField; use EasyCorp\Bundle\EasyAdminBundle\Field\Field; use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; +use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter; +use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter; class IntegrationCrudController extends AbstractAdminCrudController { @@ -26,6 +30,14 @@ public static function getEntityFqcn(): string return WorkspaceIntegration::class; } + public function configureFilters(Filters $filters): Filters + { + return $filters + ->add(EntityFilter::new('workspace')) + ->add($this->integrationChoiceField->createFilter('integration')) + ; + } + public function configureCrud(Crud $crud): Crud { return parent::configureCrud($crud) @@ -34,35 +46,30 @@ public function configureCrud(Crud $crud): Crud public function configureFields(string $pageName): iterable { - $title = TextField::new('title'); - $workspace = AssociationField::new('workspace'); - $needs = AssociationField::new('needs'); - $if = TextField::new('if') + yield IdField::new(); + yield BooleanField::new('enabled'); + yield TextField::new('title'); + yield AssociationField::new('workspace'); + yield AssociationField::new('needs'); + yield TextField::new('if') ->setHelp('Based on Symfony Expression Language.
e.g.
asset.getSource().getType() matches \'#^image/#\'
or
asset.getCreatedAt() > date(\'2000-01-01\') -'); - $integration = $this->integrationChoiceField->create('integration'); - $optionsYaml = TextareaField::new('optionsYaml'); - $enabled = Field::new('enabled'); - $id = IdField::new(); - $config = JsonField::new('config'); - $createdAt = DateTimeField::new('createdAt'); - $updatedAt = DateTimeField::new('updatedAt'); - $that = ArrayField::new('this', 'Config info')->setTemplatePath('admin/integration_config_info.html.twig'); - - if (Crud::PAGE_INDEX === $pageName) { - return [$enabled, $title, $integration, $workspace, $createdAt, $that, $updatedAt]; - } elseif (Crud::PAGE_DETAIL === $pageName) { - return [$id, $title, $integration, $enabled, $config, $createdAt, $updatedAt, $workspace, $needs]; - } elseif (Crud::PAGE_NEW === $pageName) { - return [$title, $workspace, $integration, $optionsYaml, $enabled, $needs, $if]; - } elseif (Crud::PAGE_EDIT === $pageName) { - return [$title, $workspace, $integration, $optionsYaml, $enabled, $needs, $if]; - } - - return []; +') + ->hideOnIndex(); + yield $this->integrationChoiceField->create('integration'); + yield TextareaField::new('optionsYaml') + ->hideOnIndex(); + yield JsonField::new('config') + ->hideOnIndex(); + yield ArrayField::new('this', 'Config info') + ->setTemplatePath('admin/integration_config_info.html.twig') + ->hideOnForm(); + yield DateTimeField::new('createdAt') + ->hideOnForm(); + yield DateTimeField::new('updatedAt') + ->hideOnForm(); } } diff --git a/databox/api/src/Controller/Admin/RenditionDefinitionCrudController.php b/databox/api/src/Controller/Admin/RenditionDefinitionCrudController.php index 9963bc3c1..db37de64d 100644 --- a/databox/api/src/Controller/Admin/RenditionDefinitionCrudController.php +++ b/databox/api/src/Controller/Admin/RenditionDefinitionCrudController.php @@ -15,6 +15,7 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField; use EasyCorp\Bundle\EasyAdminBundle\Field\Field; use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField; +use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter; @@ -51,6 +52,7 @@ public function configureFields(string $pageName): iterable { yield IdField::new(); yield TextField::new('name'); + yield AssociationField::new('parent'); yield AssociationField::new('class'); yield AssociationField::new('workspace'); yield TextField::new('key') @@ -60,6 +62,8 @@ public function configureFields(string $pageName): iterable ->hideOnIndex(); yield Field::new('pickSourceFile') ->hideOnIndex(); + yield TextareaField::new('definition') + ->hideOnIndex(); yield BooleanField::new('useAsOriginal'); yield BooleanField::new('useAsPreview'); yield BooleanField::new('useAsThumbnail'); diff --git a/databox/api/src/Controller/Integration/PhraseanetIntegrationController.php b/databox/api/src/Controller/Integration/PhraseanetIntegrationController.php index f161b4d2d..458a30b88 100644 --- a/databox/api/src/Controller/Integration/PhraseanetIntegrationController.php +++ b/databox/api/src/Controller/Integration/PhraseanetIntegrationController.php @@ -97,6 +97,8 @@ public function incomingRenditionAction( $asset, $definition, $file, + null, + null, ); $em->flush(); diff --git a/databox/api/src/Entity/Core/AssetRendition.php b/databox/api/src/Entity/Core/AssetRendition.php index 6db85cb6a..4921d8801 100644 --- a/databox/api/src/Entity/Core/AssetRendition.php +++ b/databox/api/src/Entity/Core/AssetRendition.php @@ -13,6 +13,7 @@ use ApiPlatform\Metadata\Post; use ApiPlatform\Metadata\Put; use App\Api\Model\Input\RenditionInput; +use App\Api\Model\Output\AssetRenditionOutput; use App\Api\Provider\RenditionCollectionProvider; use App\Entity\AbstractUuidEntity; use App\Entity\Traits\CreatedAtTrait; @@ -112,6 +113,7 @@ 'groups' => [AssetRendition::GROUP_LIST], ], input: RenditionInput::class, + output: AssetRenditionOutput::class, provider: RenditionCollectionProvider::class, )] #[ORM\Table] @@ -124,17 +126,14 @@ class AssetRendition extends AbstractUuidEntity final public const GROUP_READ = 'assetrend:read'; final public const GROUP_LIST = 'assetrend:index'; - #[Groups([AssetRendition::GROUP_LIST, AssetRendition::GROUP_READ])] #[ORM\ManyToOne(targetEntity: RenditionDefinition::class, inversedBy: 'renditions')] #[ORM\JoinColumn(nullable: false)] private ?RenditionDefinition $definition = null; - #[Groups([AssetRendition::GROUP_LIST, AssetRendition::GROUP_READ])] #[ORM\ManyToOne(targetEntity: Asset::class, inversedBy: 'renditions')] #[ORM\JoinColumn(nullable: false)] private ?Asset $asset = null; - #[Groups([AssetRendition::GROUP_LIST, AssetRendition::GROUP_READ, Asset::GROUP_LIST, Asset::GROUP_READ])] #[ORM\ManyToOne(targetEntity: File::class)] #[ORM\JoinColumn(nullable: true)] private ?File $file = null; @@ -146,6 +145,18 @@ class AssetRendition extends AbstractUuidEntity #[ORM\Column(type: Types::BOOLEAN, nullable: true)] private ?bool $projection = null; + /** + * Hash based on the build process. + */ + #[ORM\Column(type: Types::STRING, length: 32, nullable: true)] + private ?string $buildHash = null; + + /** + * Hash based on the build process. + */ + #[ORM\Column(type: Types::JSON, nullable: true)] + private ?array $moduleHashes = null; + public function getAsset(): Asset { return $this->asset; @@ -198,4 +209,24 @@ public function setProjection(?bool $projection): void { $this->projection = $projection; } + + public function getBuildHash(): ?string + { + return $this->buildHash; + } + + public function setBuildHash(?string $buildHash): void + { + $this->buildHash = $buildHash; + } + + public function getModuleHashes(): ?array + { + return $this->moduleHashes; + } + + public function setModuleHashes(?array $moduleHashes): void + { + $this->moduleHashes = $moduleHashes; + } } diff --git a/databox/api/src/Entity/Core/RenditionDefinition.php b/databox/api/src/Entity/Core/RenditionDefinition.php index ffd757880..5d4731e26 100644 --- a/databox/api/src/Entity/Core/RenditionDefinition.php +++ b/databox/api/src/Entity/Core/RenditionDefinition.php @@ -97,6 +97,11 @@ class RenditionDefinition extends AbstractUuidEntity implements \Stringable #[Groups(['_'])] protected ?Workspace $workspace = null; + #[ORM\ManyToOne(targetEntity: self::class)] + #[ORM\JoinColumn(nullable: true)] + #[Groups([RenditionDefinition::GROUP_LIST, RenditionDefinition::GROUP_READ, RenditionDefinition::GROUP_WRITE])] + protected ?self $parent = null; + /** * Unique key by workspace. Used to prevent duplicates. */ @@ -310,4 +315,18 @@ public function setSubstitutable(bool $substitutable): void { $this->substitutable = $substitutable; } + + public function getParent(): ?self + { + return $this->parent; + } + + public function setParent(?self $parent): void + { + if ($parent === $this) { + throw new \InvalidArgumentException('Parent cannot be the same as the definition'); + } + + $this->parent = $parent; + } } diff --git a/databox/api/src/Integration/AbstractIntegrationAction.php b/databox/api/src/Integration/AbstractIntegrationAction.php index a0256fd94..7841e6d80 100644 --- a/databox/api/src/Integration/AbstractIntegrationAction.php +++ b/databox/api/src/Integration/AbstractIntegrationAction.php @@ -15,7 +15,7 @@ abstract class AbstractIntegrationAction implements IfActionInterface { private IntegrationManager $integrationManager; - private EntityManagerInterface $em; + protected EntityManagerInterface $em; private ExpressionParser $expressionParser; /** diff --git a/databox/api/src/Integration/Core/Rendition/AssetAttributeAccessor.php b/databox/api/src/Integration/Core/Rendition/AssetAttributeAccessor.php new file mode 100644 index 000000000..a10f63d41 --- /dev/null +++ b/databox/api/src/Integration/Core/Rendition/AssetAttributeAccessor.php @@ -0,0 +1,32 @@ +container->getAttribute($offset); + } + + public function offsetGet(mixed $offset): mixed + { + return $this->container->getAttribute($offset); + } + + public function offsetSet(mixed $offset, mixed $value): void + { + throw new \InvalidArgumentException('Readonly metadata accessor'); + } + + public function offsetUnset(mixed $offset): void + { + throw new \InvalidArgumentException('Readonly metadata accessor'); + } +} diff --git a/databox/api/src/Integration/Core/Rendition/AssetMetadataContainer.php b/databox/api/src/Integration/Core/Rendition/AssetMetadataContainer.php new file mode 100644 index 000000000..c8d374ec9 --- /dev/null +++ b/databox/api/src/Integration/Core/Rendition/AssetMetadataContainer.php @@ -0,0 +1,67 @@ +getAttribute(substr($name, strlen($prefix))); + } + + switch ($name) { + case 'title': + $this->fetchAttributes(); + + return $this->assetTitleResolver->resolveTitle($this->asset, $this->attributeIndex, ['en']); + default: + return null; + } + } + + public function getAttribute(string $name): mixed + { + $this->fetchAttributes(); + + return $this->attributes[$name] ?? null; + } + + private function fetchAttributes(): void + { + if (null === $this->attributeIndex) { + $this->attributeIndex = $this->attributesResolver->resolveAssetAttributes($this->asset, false); + + foreach ($this->attributeIndex->getFlattenAttributes() as $attribute) { + $this->attributes[$attribute->getDefinition()->getSlug()] = $attribute->getValue(); + } + } + } + + public function getTemplatingContext(): array + { + return [ + 'asset' => $this->asset, + 'file' => $this->asset->getSource(), + 'attr' => new AssetAttributeAccessor($this), + ]; + } +} diff --git a/databox/api/src/Integration/Core/Rendition/RenditionBuildAction.php b/databox/api/src/Integration/Core/Rendition/RenditionBuildAction.php new file mode 100644 index 000000000..745b68648 --- /dev/null +++ b/databox/api/src/Integration/Core/Rendition/RenditionBuildAction.php @@ -0,0 +1,32 @@ +getInputs()['rerun'] ?? false; + $asset = $this->getAsset($context); + $inputs = $context->getInputs(); + $renditionDefinition = DoctrineUtil::findStrict($this->em, RenditionDefinition::class, $inputs['definition']); + + $this->renditionBuilder->buildRendition($renditionDefinition, $asset, $force); + } +} diff --git a/databox/api/src/Integration/Core/Rendition/RenditionIntegration.php b/databox/api/src/Integration/Core/Rendition/RenditionIntegration.php new file mode 100644 index 000000000..d86935f52 --- /dev/null +++ b/databox/api/src/Integration/Core/Rendition/RenditionIntegration.php @@ -0,0 +1,58 @@ +renditionManager->getRenditionDefinitions($config->getWorkspaceId()); + + $jobs = []; + + foreach ($definitions as $definition) { + $j = WorkflowHelper::createIntegrationJob( + $config, + RenditionBuildAction::class, + RenditionBuildAction::JOB_ID.':'.$definition->getId(), + $definition->getName(), + ); + $j->getWith()->offsetSet('definition', $definition->getId()); + $jobs[$definition->getId()] = $j; + } + + foreach ($definitions as $definition) { + if (null !== $parent = $definition->getParent()) { + $jobs[$definition->getId()]->getNeeds()->append($jobs[$parent->getId()]->getId()); + } + } + + return $jobs; + } + + public static function getName(): string + { + return 'core.rendition'; + } + + public static function getTitle(): string + { + return 'Rendition'; + } +} diff --git a/databox/api/src/Integration/Core/Watermark/WatermarkAction.php b/databox/api/src/Integration/Core/Watermark/WatermarkAction.php index 4c7f5299f..5c1b3b18e 100644 --- a/databox/api/src/Integration/Core/Watermark/WatermarkAction.php +++ b/databox/api/src/Integration/Core/Watermark/WatermarkAction.php @@ -28,7 +28,6 @@ public function __construct( private readonly RenditionManager $renditionManager, private readonly AttributeManager $attributeManager, private readonly FileManager $fileManager, - private readonly EntityManagerInterface $em, ) { } @@ -87,7 +86,9 @@ public function handle(RunContext $context): void $this->renditionManager->createOrReplaceRenditionFile( $asset, $rendition->getDefinition(), - $newRenditionFile + $newRenditionFile, + null, + null, ); } diff --git a/databox/api/src/Model/Export.php b/databox/api/src/Model/Export.php index ca0acada2..f07461d7f 100644 --- a/databox/api/src/Model/Export.php +++ b/databox/api/src/Model/Export.php @@ -8,7 +8,7 @@ use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\Get; use ApiPlatform\Metadata\Post; -use App\Controller\Core\ExportAction; +use App\Api\Processor\ExportProcessor; use Symfony\Component\Serializer\Annotation\Groups; #[ApiResource( @@ -17,9 +17,7 @@ new Get(), new Post( uriTemplate: '/export', - controller: ExportAction::class, - read: true, - validate: false + processor: ExportProcessor::class, ), ], normalizationContext: [ diff --git a/databox/api/src/Storage/FileManager.php b/databox/api/src/Storage/FileManager.php index 66908eb1b..0f5193557 100644 --- a/databox/api/src/Storage/FileManager.php +++ b/databox/api/src/Storage/FileManager.php @@ -57,10 +57,14 @@ public function storeFile(Workspace $workspace, string $src, ?string $type, ?str return $path; } - public function createFileFromPath(Workspace $workspace, string $src, ?string $type, ?string $extension, ?string $originalName): File + public function createFileFromPath(Workspace $workspace, string $src, ?string $type, ?string $extension = null, ?string $originalName = null): File { if (null === $extension) { - $extension = FileUtil::guessExtension($type, $originalName); + $extension = FileUtil::guessExtension($type, $originalName ?? $src); + + if (null === $extension && null !== $type) { + $extension = FileUtil::getExtensionFromType($type); + } } if (null === $type) { diff --git a/databox/api/src/Storage/RenditionManager.php b/databox/api/src/Storage/RenditionManager.php index 671f1f44a..dd5bfc6ce 100644 --- a/databox/api/src/Storage/RenditionManager.php +++ b/databox/api/src/Storage/RenditionManager.php @@ -4,6 +4,8 @@ namespace App\Storage; +use Alchemy\CoreBundle\Pusher\PusherManager; +use Alchemy\MessengerBundle\Listener\PostFlushStack; use App\Entity\Core\Asset; use App\Entity\Core\AssetRendition; use App\Entity\Core\File; @@ -11,12 +13,18 @@ use App\Entity\Core\Workspace; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\PersistentCollection; +use InvalidArgumentException; -class RenditionManager +final class RenditionManager { private array $renditionsToDelete = []; - public function __construct(private readonly EntityManagerInterface $em, private readonly FileManager $fileManager) + public function __construct( + private readonly EntityManagerInterface $em, + private readonly FileManager $fileManager, + private readonly PusherManager $pusherManager, + private readonly PostFlushStack $postFlushStack, + ) { } @@ -27,7 +35,9 @@ public function createOrReplaceRenditionByPath( string $path, ?string $type, ?int $size, - ?string $originalName + ?string $originalName, + ?string $buildHash, + ?array $moduleHashes, ): AssetRendition { $file = $this->fileManager->createFile( $storage, @@ -41,14 +51,18 @@ public function createOrReplaceRenditionByPath( return $this->createOrReplaceRenditionFile( $asset, $definition, - $file + $file, + $buildHash, + $moduleHashes, ); } public function createOrReplaceRenditionFile( Asset $asset, RenditionDefinition $definition, - File $file + File $file, + ?string $buildHash, + ?array $moduleHashes, ): AssetRendition { if (null === $asset->getSource() && $definition->isUseAsOriginal()) { $asset->setSource($file); @@ -57,12 +71,36 @@ public function createOrReplaceRenditionFile( $rendition = $this->getOrCreateRendition($asset, $definition); $rendition->setFile($file); + $rendition->setBuildHash($buildHash); + $rendition->setModuleHashes($moduleHashes); $this->em->persist($rendition); + $this->postFlushStack->addBusMessage($this->pusherManager->createBusMessage( + 'assets', + 'rendition-update', + [ + 'assetId' => $asset->getId(), + 'definition' => $definition->getId(), + ] + )); + return $rendition; } public function getOrCreateRendition(Asset $asset, RenditionDefinition $definition): AssetRendition + { + if (null !== $assetRendition = $this->getAssetRenditionByDefinition($asset, $definition)) { + return $assetRendition; + } + + $rendition = new AssetRendition(); + $rendition->setAsset($asset); + $rendition->setDefinition($definition); + + return $rendition; + } + + public function getAssetRenditionByDefinition(Asset $asset, RenditionDefinition $definition): ?AssetRendition { $renditions = $asset->getRenditions(); $collectionReady = !$renditions instanceof PersistentCollection || $renditions->isInitialized(); @@ -74,25 +112,21 @@ public function getOrCreateRendition(Asset $asset, RenditionDefinition $definiti return $rendition; } } - } else { - $rendition = $this->em->getRepository(AssetRendition::class) - ->findOneBy([ - 'asset' => $asset->getId(), - 'definition' => $definition->getId(), - ]); + } - if ($rendition instanceof AssetRendition) { - unset($this->renditionsToDelete[$rendition->getId()]); + $rendition = $this->em->getRepository(AssetRendition::class) + ->findOneBy([ + 'asset' => $asset->getId(), + 'definition' => $definition->getId(), + ]); - return $rendition; - } - } + if ($rendition instanceof AssetRendition) { + unset($this->renditionsToDelete[$rendition->getId()]); - $rendition = new AssetRendition(); - $rendition->setAsset($asset); - $rendition->setDefinition($definition); + return $rendition; + } - return $rendition; + return null; } public function getAssetRenditionByName(string $assetId, string $renditionName): ?AssetRendition @@ -140,12 +174,22 @@ public function getRenditionDefinitionByName(Workspace $workspace, string $name) ]); if (!$definition instanceof RenditionDefinition) { - throw new \InvalidArgumentException(sprintf('Rendition definition "%s" not found', $name)); + throw new InvalidArgumentException(sprintf('Rendition definition "%s" not found', $name)); } return $definition; } + public function getRenditionDefinitions(string $workspaceId): array + { + return $this + ->em + ->getRepository(RenditionDefinition::class) + ->findBy([ + 'workspace' => $workspaceId, + ]); + } + public function getRenditionDefinitionById(Workspace $workspace, string $id): RenditionDefinition { $definition = $this @@ -157,7 +201,7 @@ public function getRenditionDefinitionById(Workspace $workspace, string $id): Re ]); if (!$definition instanceof RenditionDefinition) { - throw new \InvalidArgumentException(sprintf('Rendition definition "%s" not found', $id)); + throw new InvalidArgumentException(sprintf('Rendition definition "%s" not found', $id)); } return $definition; diff --git a/databox/api/src/Workflow/Action/ReadMetadataAction.php b/databox/api/src/Workflow/Action/ReadMetadataAction.php index 512669d92..d50c80dbd 100644 --- a/databox/api/src/Workflow/Action/ReadMetadataAction.php +++ b/databox/api/src/Workflow/Action/ReadMetadataAction.php @@ -19,7 +19,6 @@ public function __construct( private readonly MetadataManipulator $metadataManipulator, private readonly MetadataNormalizer $metadataNormalizer, private readonly FileFetcher $fileFetcher, - private readonly EntityManagerInterface $em, ) { } diff --git a/databox/api/src/Workflow/IntegrationWorkflowRepository.php b/databox/api/src/Workflow/IntegrationWorkflowRepository.php index 3615e78bc..067148b81 100644 --- a/databox/api/src/Workflow/IntegrationWorkflowRepository.php +++ b/databox/api/src/Workflow/IntegrationWorkflowRepository.php @@ -7,6 +7,7 @@ use Alchemy\Workflow\Event\WorkflowEvent; use Alchemy\Workflow\Model\Job; use Alchemy\Workflow\Model\Workflow; +use Alchemy\Workflow\Normalizer\DisabledNeedNormalizer; use Alchemy\Workflow\Repository\WorkflowRepositoryInterface; use App\Entity\Integration\WorkspaceIntegration; use App\Integration\IntegrationManager; @@ -75,7 +76,6 @@ private function createIntegrationsToWorkflow(Workflow $workflow, string $worksp $workspaceIntegrations = $this->em->getRepository(WorkspaceIntegration::class) ->findBy([ 'workspace' => $workspaceId, - 'enabled' => true, ], [ 'createdAt' => 'ASC', 'id' => 'ASC', @@ -102,6 +102,11 @@ private function createIntegrationsToWorkflow(Workflow $workflow, string $worksp foreach ($integration->getWorkflowJobDefinitions($config, $workflow) as $jobDefinition) { $jobList->offsetSet($jobDefinition->getId(), $jobDefinition); $jobDefinition->setContinueOnError(true); + + if (!$config->getWorkspaceIntegration()->isEnabled()) { + $jobDefinition->markDisabled('Integration is disabled'); + } + $jobs[] = $jobDefinition; } $jobMap[$config->getIntegrationId()] = $jobs; @@ -127,6 +132,8 @@ private function createIntegrationsToWorkflow(Workflow $workflow, string $worksp } } + (new DisabledNeedNormalizer())->normalizeWorkflow($integrationWorkflow); + return $integrationWorkflow; } diff --git a/databox/api/symfony.lock b/databox/api/symfony.lock index d032ba53d..7e52a0ac0 100644 --- a/databox/api/symfony.lock +++ b/databox/api/symfony.lock @@ -26,6 +26,9 @@ "alchemy/oauth-server-bundle": { "version": "dev-ps-248-databox" }, + "alchemy/rendition-factory-bundle": { + "version": "dev-PS-670-rendition-factory" + }, "alchemy/storage-bundle": { "version": "dev-ps-355" }, @@ -272,6 +275,15 @@ "league/mime-type-detection": { "version": "1.8.0" }, + "liip/imagine-bundle": { + "version": "2.13", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "main", + "version": "1.8", + "ref": "d1227d002b70d1a1f941d91845fcd7ac7fbfc929" + } + }, "monolog/monolog": { "version": "2.2.0" }, diff --git a/databox/client/package.json b/databox/client/package.json index b8d2ba0cb..959f41f50 100644 --- a/databox/client/package.json +++ b/databox/client/package.json @@ -26,6 +26,7 @@ "@mui/lab": "5.0.0-alpha.168", "@mui/material": "^5.15.13", "@mui/x-tree-view": "^6.17.0", + "@tanstack/react-query": "^5.56.2", "@toast-ui/react-image-editor": "^3.15.2", "ace-builds": "^1.32.7", "axios": "^1.6.7", diff --git a/databox/client/src/components/Dialog/Asset/Rendition.tsx b/databox/client/src/components/Dialog/Asset/Rendition.tsx index a307bee06..7df297e0d 100644 --- a/databox/client/src/components/Dialog/Asset/Rendition.tsx +++ b/databox/client/src/components/Dialog/Asset/Rendition.tsx @@ -2,19 +2,11 @@ import {ReactNode} from 'react'; import {Asset, AssetRendition} from '../../../types'; import FilePlayer from '../../Media/Asset/FilePlayer'; import {Dimensions} from '../../Media/Asset/Players'; -import { - Button, - Card, - CardActions, - CardContent, - CardMedia, - Skeleton, - Typography, -} from '@mui/material'; +import {Button, Card, CardActions, CardContent, CardMedia, Chip, Skeleton, Typography,} from '@mui/material'; import byteSize from 'byte-size'; -import {useTranslation} from 'react-i18next'; import DownloadIcon from '@mui/icons-material/Download'; import SaveAsButton from '../../Media/Asset/Actions/SaveAsButton'; +import {useTranslation} from 'react-i18next'; const cardProps = { elevation: 2, @@ -39,7 +31,7 @@ export function Rendition({ title, asset, dimensions, - rendition: {name, file}, + rendition: {name, file, dirty}, }: Props) { const {t} = useTranslation(); @@ -67,6 +59,14 @@ export function Rendition({ '' )} {file.type ? file.type : ''} + {dirty ? <> + {` • `} + + : ''} ) } @@ -75,7 +75,7 @@ export function Rendition({ {file?.url && ( <>