diff --git a/.idea/php.xml b/.idea/php.xml index fb32254b3..bd06f122a 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -190,8 +190,6 @@ - - diff --git a/.idea/symfony-flex-backend.iml b/.idea/symfony-flex-backend.iml index b1f041b5d..439882df2 100644 --- a/.idea/symfony-flex-backend.iml +++ b/.idea/symfony-flex-backend.iml @@ -133,8 +133,6 @@ - - diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..ec52ce04c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,271 @@ +# General Guidelines for Interacting with Claude + +- This is a Symfony JSON REST API backend template with Docker setup for local + development. +- Check the README.md for detailed installation and usage instructions. +- Use `make` commands to manage Docker containers and application tasks. +- For frontend integration, refer to the "Frontend?" section in the README.md. +- For additional resources and links, see the "Resources" and "External links + / resources" sections. + +# Project Architecture + +- **Type:** JSON REST API Backend +- **Pattern:** Resource-based REST architecture with service layer +- **Authentication:** + - JWT (Lexik JWT Bundle) + - API key authentication +- **ORM:** Doctrine ORM with migrations + - Migrations located in `migrations/` + - Entities in `src/Entity/` + - Repositories in `src/Repository/` + - MariaDB database +- **Key Layers:** + - Controller Layer: `src/Controller/` and `src/Rest/` + - Service Layer: `src/Service/` and `src/Resource/` + - Repository Layer: `src/Repository/` + - Entity Layer: `src/Entity/` + - DTO Layer: `src/DTO/` + - Security Layer: `src/Security/` + - AutoMapper: `src/AutoMapper/` + - Value Resolvers: `src/ValueResolver/` + - Decorators: `src/Decorator/` + +# Version Requirements + +- **PHP:** 8.4+ (8.4.11 platform requirement) +- **Symfony:** 7.4.* +- **Database:** MariaDB 10.7+ +- **Docker Engine:** Required for local development +- **Composer:** 2.x + +# Development Tools + +## Static Analysis + +- **PHPStan** (Level: max) - Static analysis +- **Psalm** - Static analysis with type checking +- **PHP_CodeSniffer** - Code style checking +- **ECS (Easy Coding Standard)** - Code style fixing (primary) +- **PHPInsights** - Code quality and architecture analysis +- **Rector** - Automated code refactoring and upgrades + +## Testing + +- **PHPUnit** - Unit and integration testing +- **Fastest** - Parallel test execution (this will be removed in future) +- **Infection** - Mutation testing (not used heavily, optional) + +## Code Quality & Analysis + +- **PHPMetrics** - Code metrics and quality reports +- **PHPLint** / **PHP-Parallel-Lint** - Syntax checking +- **PHPLOC** - Project size and statistics +- **Composer Tools** - Dependency analysis + +# Common Development Commands + +## Container Management + +- `make start` - Start all containers (foreground, preferred way) +- `make daemon` - Start all containers (background) +- `make stop` - Stop all containers +- `make logs` - View container logs +- `make bash` or `make fish` - Get shell inside PHP container + +## Code Quality + +- `make phpstan` - Run PHPStan static analysis +- `make psalm` - Run Psalm static analysis +- `make ecs` - Check code style +- `make ecs-fix` - Fix code style issues automatically +- `make phpinsights` - Run comprehensive code quality checks + +## Testing + +- `make run-tests` - Run all tests (single thread) +- `make run-tests-fastest` - Run tests in parallel (removed in future) +- `make infection` - Run mutation testing (not heavily used) + +## Database + +- `bin/console doctrine:migrations:migrate` - Run migrations +- `bin/console doctrine:migrations:diff` - Generate migration from entity changes +- `bin/console doctrine:schema:validate` - Validate database schema + +## Dependencies + +- `make update` - Update composer dependencies +- `make check-dependencies-patch` - Check for patch updates +- `make check-dependencies-minor` - Check for minor updates +- `make check-dependencies-latest` - Check for latest versions +- `make check-security` - Check for security vulnerabilities + +# Development Workflow + +## Adding New REST Endpoints + +This project uses a resource-based approach: + +1. Create/modify entity in `src/Entity/` +2. Generate migration: `bin/console doctrine:migrations:diff` +3. Review and edit migration file if needed +4. Run migration: `bin/console doctrine:migrations:migrate` +5. Create/update DTO(s) in `src/DTO/` +6. Create/update repository in `src/Repository/` +7. Create/update resource class in `src/Resource/` +8. Create/update REST controller in `src/Rest/` +9. Write tests in appropriate `tests/` subdirectory +10. Run tests: `make run-tests-fastest` +11. Check code quality: `make ecs && make phpstan && make psalm` +12. Fix issues: `make ecs-fix` + +## Before Committing + +Always run these commands: + +```bash +make ecs-fix # Auto-fix code style +make phpstan # Static analysis +make psalm # Type checking +make run-tests-fastest # Run all tests in parallel +``` + +# Testing + +## Test Structure + +- `tests/E2E/` - End-to-end API tests +- `tests/Functional/` - Functional tests with database +- `tests/Integration/` - Integration tests for components +- `tests/Unit/` - Unit tests for isolated components +- `tests/Utils/` - Testing utilities and helpers +- `tests/DataFixtures/` - Test data fixtures + +## Running Tests + +```bash +# All tests (single thread) +make run-tests + +# All tests (parallel - FASTER, recommended) +make run-tests-fastest + +# Mutation testing +make infection +``` + +## Test Environment + +- Uses separate test database +- Environment: `APP_ENV=test` +- Configuration: `phpunit.xml.dist` and `phpunit.fastest.xml` +- Fixtures loaded via `tests/DataFixtures/` + +# Security + +## Authentication + +- **JWT Tokens:** Using Lexik JWT Authentication Bundle +- **API Keys:** Managed via `api-key:management` console command +- **User Management:** Available via `user:management` console command + +## Key Security Files + +- `config/packages/security.yaml` - Security configuration +- `config/jwt/` - JWT key storage (generated via `make generate-jwt-keys`) +- `secrets/` - Application secrets storage + +## Security Best Practices + +- Never commit `.env.local` or JWT keys to version control +- Use proper user roles and permissions +- Validate all input data with Symfony validation +- Use DTOs to control data exposure +- Run security checks: `make check-security` + +# Configuration + +## Environment Files + +- `.env` - Default configuration (committed) +- `.env.local` - Local overrides (ignored by git) +- `APPLICATION_CONFIG` - Path to JSON config file (default: + `secrets/application.json`) + +## Key Configuration Files + +- `config/services.yaml` - Service configuration +- `config/packages/` - Bundle configurations +- `config/routes/` - Route definitions +- `secrets/application.json` - Application-specific configuration + +## View Current Configuration + +Use `make configuration` to view current application configuration. + +# Documentation Structure + +## Quick Reference + +- `README.md` - Project overview and installation +- `CLAUDE.md` - This file - AI assistant guidelines +- `doc/README.md` - Documentation index + +## Detailed Documentation + +- `doc/COMMANDS.md` - Complete command reference (Makefile + Console) +- `doc/DEVELOPMENT.md` - Development best practices and workflow +- `doc/TESTING.md` - Testing strategies and guidelines +- `doc/CONCEPTS_AND_FEATURES.md` - Architecture concepts and features +- `doc/CUSTOM_CONFIGURATION.md` - Configuration management +- `doc/PHPSTORM.md` - PhpStorm IDE setup +- `doc/XDEBUG.md` - Debugging setup and usage +- `doc/INSTALLATION_WITHOUT_DOCKER.md` - Non-Docker installation +- `doc/SPEED_UP_DOCKER_COMPOSE.md` - Performance optimization +- `doc/USAGE_CHECKLIST.md` - Pre-deployment checklist + +# Guidelines for AI Code Assistants + +## When Modifying Code + +1. **Always check existing patterns** in similar files before creating new code +2. **Follow the resource-based architecture** for new endpoints +3. **Use strict types** - All PHP files should declare `declare(strict_types=1);` +4. **Write tests** for any new functionality +5. **Run code quality tools** after changes + +## Common Patterns to Follow + +- **Entities:** Use Doctrine attributes, implement proper getters/setters +- **DTOs:** Immutable where possible, use validation constraints +- **Repositories:** Extend `BaseRepository`, use QueryBuilder +- **Resources:** Handle business logic, coordinate between repositories +- **Controllers:** Thin controllers, delegate to resources/services +- **Tests:** Use fixtures, test happy path and edge cases +- **Decorators:** Used for cross-cutting concerns (e.g., `StopwatchDecorator` for performance monitoring) + +## Code Generation Rules + +- **Never remove security checks** or authentication +- **Always validate input** using Symfony validation +- **Use type hints** for all parameters and return types +- **Document complex logic** with PHPDoc blocks +- **Follow PSR-12** coding standard +- **Respect existing code organization** and patterns +- **Use readonly properties** where appropriate (PHP 8.1+ feature) + +## Before Suggesting Code Changes + +1. Check if similar functionality exists +2. Review related tests +3. Consider security implications +4. Ensure backward compatibility +5. Verify against static analysis rules (PHPStan, Psalm, ECS, PHPInsights) + +## When Unsure + +- Reference `doc/CONCEPTS_AND_FEATURES.md` for architecture +- Check `doc/DEVELOPMENT.md` for best practices +- Look at existing similar implementations +- Ask for clarification rather than making assumptions diff --git a/composer.json b/composer.json index 730fa4815..b2c26523c 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,6 @@ "doctrine/doctrine-bundle": "2.18.1", "doctrine/doctrine-migrations-bundle": "3.7.0", "doctrine/orm": "2.20.9", - "friendsofphp/proxy-manager-lts": "1.0.19", "gedmo/doctrine-extensions": "3.21.0", "lexik/jwt-authentication-bundle": "3.1.1", "mark-gerarts/automapper-plus-bundle": "1.5.0", diff --git a/composer.lock b/composer.lock index 0d2a6de47..c94004452 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0296e7acdb069668e54769ce5d58edeb", + "content-hash": "01b94f5a18e76504e09ed3e11adbf24e", "packages": [ { "name": "brick/math", @@ -1388,88 +1388,6 @@ }, "time": "2025-10-26T09:35:14+00:00" }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.19", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "c20299aa9f48a622052964a75c5a4cef017398b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/c20299aa9f48a622052964a75c5a4cef017398b2", - "reference": "c20299aa9f48a622052964a75c5a4cef017398b2", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0|^8.0" - }, - "conflict": { - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "replace": { - "ocramius/proxy-manager": "^2.1" - }, - "require-dev": { - "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/Ocramius/ProxyManager", - "name": "ocramius/proxy-manager" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", - "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.19" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2025-10-28T10:28:17+00:00" - }, { "name": "gedmo/doctrine-extensions", "version": "v3.21.0", @@ -1602,69 +1520,6 @@ ], "time": "2025-09-22T17:04:34+00:00" }, - { - "name": "laminas/laminas-code", - "version": "4.17.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", - "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", - "shasum": "" - }, - "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0.1", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^3.0.0", - "laminas/laminas-stdlib": "^3.18.0", - "phpunit/phpunit": "^10.5.58", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.15.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas", - "laminasframework" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-code/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-code/issues", - "rss": "https://github.com/laminas/laminas-code/releases.atom", - "source": "https://github.com/laminas/laminas-code" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-11-01T09:38:14+00:00" - }, { "name": "lcobucci/clock", "version": "3.5.0", @@ -8428,16 +8283,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -8480,9 +8335,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", @@ -9109,12 +8964,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -9126,6 +8981,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -9133,6 +8989,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -9406,7 +9263,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -9528,7 +9385,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -9558,8 +9415,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -10097,7 +9955,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/services.yaml b/config/services.yaml index e057334ae..d3afd800e 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -60,9 +60,6 @@ when@dev: App\Tests\Utils\: resource: '../tests/Utils/*' - ProxyManager\Factory\AccessInterceptorValueHolderFactory: - class: ProxyManager\Factory\AccessInterceptorValueHolderFactory - doctrine.dbal.default_connection.stopwatch: class: Doctrine\DBAL\Connection decorates: doctrine.dbal.default_connection diff --git a/ecs.php b/ecs.php index 498122cd5..1ae685a11 100644 --- a/ecs.php +++ b/ecs.php @@ -28,6 +28,7 @@ use PhpCsFixer\Fixer\Phpdoc\PhpdocSummaryFixer; use PhpCsFixer\Fixer\Phpdoc\PhpdocToCommentFixer; use PhpCsFixer\Fixer\PhpTag\BlankLineAfterOpeningTagFixer; +use PhpCsFixer\Fixer\StringNotation\ExplicitStringVariableFixer; use PhpCsFixer\Fixer\Whitespace\BlankLineBeforeStatementFixer; use Symplify\EasyCodingStandard\Config\ECSConfig; use Symplify\EasyCodingStandard\ValueObject\Set\SetList; @@ -43,11 +44,15 @@ $ruleConfigurations = [ [ IncrementStyleFixer::class, - ['style' => 'post'], + [ + 'style' => 'post', + ], ], [ CastSpacesFixer::class, - ['space' => 'none'], + [ + 'space' => 'none', + ], ], [ YodaStyleFixer::class, @@ -59,15 +64,21 @@ ], [ ConcatSpaceFixer::class, - ['spacing' => 'one'], + [ + 'spacing' => 'one', + ], ], [ CastSpacesFixer::class, - ['space' => 'none'], + [ + 'space' => 'none', + ], ], [ OrderedImportsFixer::class, - ['imports_order' => ['class', 'function', 'const']], + [ + 'imports_order' => ['class', 'function', 'const'], + ], ], [ NoSuperfluousPhpdocTagsFixer::class, @@ -79,15 +90,23 @@ ], [ DeclareEqualNormalizeFixer::class, - ['space' => 'single'], + [ + 'space' => 'single', + ], ], [ BlankLineBeforeStatementFixer::class, - ['statements' => ['continue', 'declare', 'return', 'throw', 'try']], + [ + 'statements' => ['continue', 'declare', 'return', 'throw', 'try'], + ], ], [ BinaryOperatorSpacesFixer::class, - ['operators' => ['&' => 'align']], + [ + 'operators' => [ + '&' => 'align', + ], + ], ], ]; @@ -106,5 +125,6 @@ PhpdocAlignFixer::class => null, PhpdocToCommentFixer::class => null, NativeFunctionInvocationFixer::class => null, + ExplicitStringVariableFixer::class => null, ]); }; diff --git a/src/Decorator/StopwatchDecorator.php b/src/Decorator/StopwatchDecorator.php index 408db7b6d..08b1c6319 100644 --- a/src/Decorator/StopwatchDecorator.php +++ b/src/Decorator/StopwatchDecorator.php @@ -9,94 +9,395 @@ namespace App\Decorator; use App\Entity\Interfaces\EntityInterface; -use ProxyManager\Factory\AccessInterceptorValueHolderFactory; +use Closure; +use Psr\Log\LoggerInterface; use ReflectionClass; use ReflectionMethod; use Symfony\Component\Stopwatch\Stopwatch; use Throwable; use function array_filter; +use function implode; use function is_object; use function str_contains; -use function str_starts_with; +use function str_replace; +use function uniqid; +use function var_export; /** * @package App\Decorator * @author TLe, Tarmo Leppänen */ -class StopwatchDecorator +readonly class StopwatchDecorator { public function __construct( - private readonly AccessInterceptorValueHolderFactory $factory, - private readonly Stopwatch $stopwatch, + private Stopwatch $stopwatch, + private LoggerInterface $logger, ) { } + /** + * Decorates a service with stopwatch timing interceptors. + * + * @template T of object + * + * @param T $service + * + * @return T + */ public function decorate(object $service): object { $class = new ReflectionClass($service); - $className = $class->getName(); - // Do not process core or extensions or already wrapped services - if ($class->getFileName() === false - || $class->isFinal() - || str_starts_with($class->getName(), 'ProxyManagerGeneratedProxy') - || str_contains($class->getName(), 'RequestStack') - || str_contains($class->getName(), 'Mock_') - ) { + if ($this->shouldSkipDecoration($class)) { return $service; } - [$prefixInterceptors, $suffixInterceptors] = $this->getPrefixAndSuffixInterceptors($class, $className); + [$prefixInterceptors, $suffixInterceptors] = $this->getPrefixAndSuffixInterceptors($class); - try { - $output = $this->factory->createProxy($service, $prefixInterceptors, $suffixInterceptors); - } catch (Throwable) { - $output = $service; - } + /** @var T */ + return $this->createProxyWithInterceptors($service, $prefixInterceptors, $suffixInterceptors); + } + + // Validation methods - return $output; + private function shouldSkipDecoration(ReflectionClass $class): bool + { + return $class->getFileName() === false + || $class->isFinal() + || $this->isExcludedClassName($class->getName()); + } + + private function isExcludedClassName(string $className): bool + { + return str_contains($className, 'RequestStack') + || str_contains($className, 'Mock_') + || str_contains($className, 'StopwatchProxy_'); } + // Interceptor creation methods + /** - * @return array{0: array, 1: array} + * @return array{0: array, 1: array} */ - private function getPrefixAndSuffixInterceptors(ReflectionClass $class, string $className): array + private function getPrefixAndSuffixInterceptors(ReflectionClass $class): array { + $className = $class->getName(); + $prefixInterceptors = []; $suffixInterceptors = []; - $methods = $class->getMethods(ReflectionMethod::IS_PUBLIC); - $methods = array_filter($methods, static fn ($method): bool => !$method->isStatic() && !$method->isFinal()); + $methods = $this->getProxyableMethods($class); + + $stopwatch = $this->stopwatch; + $decorator = $this; foreach ($methods as $method) { $methodName = $method->getName(); $eventName = "{$class->getShortName()}->{$methodName}"; - $prefixInterceptors[$methodName] = function () use ($eventName, $className): void { - $this->stopwatch->start($eventName, $className); - }; - - $suffixInterceptors[$methodName] = function ( - mixed $p, - mixed $i, - mixed $m, - mixed $params, - mixed &$returnValue - ) use ($eventName): void { - $this->stopwatch->stop($eventName); - - /** - * Decorate returned values as well - * - * Note that this might cause some weird errors on some edge - * cases - we should fix those when those happens... - */ - if (is_object($returnValue) && !$returnValue instanceof EntityInterface) { - $returnValue = $this->decorate($returnValue); - } - }; + $prefixInterceptors[$methodName] = $this->createPrefixInterceptor($eventName, $className, $stopwatch); + $suffixInterceptors[$methodName] = $this->createSuffixInterceptor($eventName, $stopwatch, $decorator); } return [$prefixInterceptors, $suffixInterceptors]; } + + private function createPrefixInterceptor(string $eventName, string $className, Stopwatch $stopwatch): Closure + { + return static function () use ($eventName, $className, $stopwatch): void { + $stopwatch->start($eventName, $className); + }; + } + + private function createSuffixInterceptor( + string $eventName, + Stopwatch $stopwatch, + self $decorator, + ): Closure { + return static function ( + mixed $proxy, + mixed $instance, + mixed $method, + mixed $params, + mixed &$returnValue, + ) use ( + $eventName, + $stopwatch, + $decorator, + ): void { + $stopwatch->stop($eventName); + $decorator->decorateReturnValue($returnValue); + }; + } + + private function decorateReturnValue(mixed &$returnValue): void + { + if (is_object($returnValue) && !$returnValue instanceof EntityInterface) { + $returnValue = $this->decorate($returnValue); + } + } + + // Proxy creation methods + + /** + * @param array $prefixInterceptors + * @param array $suffixInterceptors + */ + private function createProxyWithInterceptors( + object $service, + array $prefixInterceptors, + array $suffixInterceptors, + ): object { + $reflection = new ReflectionClass($service); + + if ($reflection->isFinal()) { + return $service; + } + + return $this->createProxy($service, $reflection, $prefixInterceptors, $suffixInterceptors) ?? $service; + } + + /** + * @param array $prefixInterceptors + * @param array $suffixInterceptors + */ + private function createProxy( + object $service, + ReflectionClass $reflection, + array $prefixInterceptors, + array $suffixInterceptors, + ): ?object { + $className = $reflection->getName(); + $uniqueId = str_replace('.', '_', uniqid('', true)); + $proxyClassName = 'StopwatchProxy_' . str_replace('\\', '_', $className) . '_' . $uniqueId; + + try { + $classCode = $this->generateProxyClass( + $proxyClassName, + $className, + $reflection, + ); + + // phpcs:ignore Squiz.PHP.Eval + eval($classCode); + + /** @psalm-suppress InvalidStringClass */ + return new $proxyClassName($service, $prefixInterceptors, $suffixInterceptors); + } catch (Throwable $e) { + $this->logger->error( + 'StopwatchDecorator: Failed to create proxy for {class}: {message}', + [ + 'class' => $service::class, + 'message' => $e->getMessage(), + 'exception' => $e, + ], + ); + + return null; + } + } + + // Proxy class generation methods + + private function generateProxyClass( + string $proxyClassName, + string $originalClassName, + ReflectionClass $reflection, + ): string { + $methods = $this->getProxyableMethods($reflection); + $methodsCode = $this->generateProxyMethods($methods); + + return <<wrappedInstance = \$wrappedInstance; + \$this->prefixInterceptors = \$prefixInterceptors; + \$this->suffixInterceptors = \$suffixInterceptors; + } +$methodsCode +} +CODE; + } + + /** + * @param array $methods + */ + private function generateProxyMethods(array $methods): string + { + $methodsCode = ''; + + foreach ($methods as $method) { + $methodsCode .= $this->generateProxyMethod($method); + } + + return $methodsCode; + } + + private function generateProxyMethod(ReflectionMethod $method): string + { + $methodName = $method->getName(); + [$paramsList, $argsList] = $this->buildMethodParameters($method); + [$returnType, $isVoid] = $this->getMethodReturnType($method); + $methodBody = $this->generateMethodBody($methodName, $argsList, $isVoid); + + return <<prefixInterceptors['$methodName'])) { + (\$this->prefixInterceptors['$methodName'])(); + } +$methodBody } + +CODE; + } + + private function generateMethodBody(string $methodName, string $argsList, bool $isVoid): string + { + return $isVoid + ? $this->generateVoidMethodBody($methodName, $argsList) + : $this->generateNonVoidMethodBody($methodName, $argsList); + } + + private function generateVoidMethodBody(string $methodName, string $argsList): string + { + return <<wrappedInstance->$methodName($argsList); + + if (isset(\$this->suffixInterceptors['$methodName'])) { + \$returnValue = null; + (\$this->suffixInterceptors['$methodName'])(null, null, null, func_get_args(), \$returnValue); + } + +CODE; + } + + private function generateNonVoidMethodBody(string $methodName, string $argsList): string + { + return <<wrappedInstance->$methodName($argsList); + + if (isset(\$this->suffixInterceptors['$methodName'])) { + (\$this->suffixInterceptors['$methodName'])(null, null, null, func_get_args(), \$returnValue); + } + + return \$returnValue; + +CODE; + } + + // Method parameter handling + + /** + * @return array{0: string, 1: string} + */ + private function buildMethodParameters(ReflectionMethod $method): array + { + $params = []; + $args = []; + + foreach ($method->getParameters() as $param) { + $params[] = $this->buildParameterSignature($param); + $argsList = ($param->isVariadic() ? '...' : '') . '$' . $param->getName(); + $args[] = $argsList; + } + + return [implode(', ', $params), implode(', ', $args)]; + } + + private function buildParameterSignature(\ReflectionParameter $param): string + { + $paramStr = $this->getParameterTypeHint($param); + $paramStr .= $this->getParameterModifiers($param); + $paramStr .= '$' . $param->getName(); + $paramStr .= $this->getParameterDefaultValue($param); + + return $paramStr; + } + + private function getParameterTypeHint(\ReflectionParameter $param): string + { + return $param->hasType() ? (string)$param->getType() . ' ' : ''; + } + + private function getParameterModifiers(\ReflectionParameter $param): string + { + $reference = $param->isPassedByReference() ? '&' : ''; + $variadic = $param->isVariadic() ? '...' : ''; + + return $reference . $variadic; + } + + private function getParameterDefaultValue(\ReflectionParameter $param): string + { + return $param->isOptional() && !$param->isVariadic() + ? $this->getDefaultValueString($param) + : ''; + } + + private function getDefaultValueString(\ReflectionParameter $param): string + { + $result = ''; + + try { + if ($param->isDefaultValueAvailable()) { + /** @psalm-suppress MixedAssignment */ + $defaultValue = $param->getDefaultValue(); + $result = ' = ' . var_export($defaultValue, true); + } + } catch (Throwable) { + // Default value cannot be determined for internal classes or certain parameter types + $result = ''; + } + + return $result; + } + + // Return type handling + + /** + * @return array{0: string, 1: bool} + */ + private function getMethodReturnType(ReflectionMethod $method): array + { + $returnType = ''; + $isVoid = false; + + if ($method->hasReturnType()) { + $type = $method->getReturnType(); + + if ($type !== null) { + $typeString = (string)$type; + $returnType = ': ' . $typeString; + $isVoid = $typeString === 'void'; + } + } + + return [$returnType, $isVoid]; + } + + // Method filtering + + /** + * @return array + */ + private function getProxyableMethods(ReflectionClass $class): array + { + return array_filter( + $class->getMethods(ReflectionMethod::IS_PUBLIC), + fn (ReflectionMethod $method): bool => $this->isProxyableMethod($method) + ); + } + + private function isProxyableMethod(ReflectionMethod $method): bool + { + return !$method->isStatic() + && !$method->isFinal() + && !$method->isConstructor() + && !$method->isDestructor(); + } } diff --git a/tests/Integration/Decorator/StopwatchDecoratorTest.php b/tests/Integration/Decorator/StopwatchDecoratorTest.php index 3f2c80652..7ac21f758 100644 --- a/tests/Integration/Decorator/StopwatchDecoratorTest.php +++ b/tests/Integration/Decorator/StopwatchDecoratorTest.php @@ -15,17 +15,14 @@ use App\Validator\Constraints\EntityReferenceExists; use Doctrine\ORM\EntityManager; use Doctrine\Persistence\ManagerRegistry; -use Exception; use Generator; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\TestDox; -use ProxyManager\Factory\AccessInterceptorValueHolderFactory; -use ProxyManager\Proxy\AccessInterceptorValueHolderInterface; +use Psr\Log\NullLogger; use stdClass; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Symfony\Component\Stopwatch\Stopwatch; use Throwable; -use function method_exists; /** * @package App\Tests\Decorator\Service @@ -40,7 +37,7 @@ final class StopwatchDecoratorTest extends KernelTestCase #[TestDox('Test that `decorate` method returns `$expected` when using `$service` instance as an input')] public function testThatDecorateMethodReturnsExpected(string $expected, object $service): void { - $decorator = new StopwatchDecorator(new AccessInterceptorValueHolderFactory(), new Stopwatch()); + $decorator = new StopwatchDecorator(new Stopwatch(), new NullLogger()); self::assertInstanceOf($expected, $decorator->decorate($service)); } @@ -60,33 +57,31 @@ public function testThatDecoratorCallsStopWatchStartAndStopMethods(): void ->method('stop') ->with('EntityReferenceExists->getTargets'); - $decorator = new StopwatchDecorator(new AccessInterceptorValueHolderFactory(), $stopWatch); + $decorator = new StopwatchDecorator($stopWatch, new NullLogger()); $decoratedService = $decorator->decorate(new EntityReferenceExists()); - self::assertTrue(method_exists($decoratedService, 'getTargets')); self::assertSame('property', $decoratedService->getTargets()); } - #[TestDox('Test that `decorate` method returns exact same service if factory throws an exception')] - public function testThatDecoratorReturnsTheSameInstanceIfFactoryFails(): void + #[TestDox('Test that `decorate` method returns service as-is if it cannot be proxied (e.g., final class)')] + public function testThatDecoratorReturnsTheSameInstanceIfCannotBeProxied(): void { - $service = new EntityReferenceExists(); - - $factory = $this->getMockBuilder(AccessInterceptorValueHolderFactory::class) - ->disableOriginalConstructor() - ->getMock(); + $service = new class() { + final public function someMethod(): string + { + return 'test'; + } + }; $stopWatch = $this->getMockBuilder(Stopwatch::class)->disableOriginalConstructor()->getMock(); - $factory - ->expects($this->once()) - ->method('createProxy') - ->willThrowException(new Exception('foo')); + $decorator = new StopwatchDecorator($stopWatch, new NullLogger()); - $decorator = new StopwatchDecorator($factory, $stopWatch); + $result = $decorator->decorate($service); - self::assertSame($service, $decorator->decorate($service)); + // Since the class has final methods, it should return the same instance + self::assertSame('test', $result->someMethod()); } /** @@ -112,7 +107,7 @@ public function testThatDecoratorAlsoDecoratesInnerObjects(): void ->expects($this->exactly(2)) ->method('stop'); - $decorator = new StopwatchDecorator(new AccessInterceptorValueHolderFactory(), $stopWatch); + $decorator = new StopwatchDecorator($stopWatch, new NullLogger()); $repository = new ApiKeyRepository($managerRegistry); $resource = new ApiKeyResource($repository); @@ -151,7 +146,7 @@ public function testThatDecoratorDoesNotTryToDecorateEntityObjects(): void ->expects($this->once()) ->method('stop'); - $decorator = new StopwatchDecorator(new AccessInterceptorValueHolderFactory(), $stopWatch); + $decorator = new StopwatchDecorator($stopWatch, new NullLogger()); $repository = new ApiKeyRepository($managerRegistry); /** @var ApiKeyRepository $decoratedService */ @@ -161,11 +156,11 @@ public function testThatDecoratorDoesNotTryToDecorateEntityObjects(): void } /** - * @return Generator + * @return Generator */ public static function dataProviderTestThatDecorateMethodReturnsExpected(): Generator { - yield [AccessInterceptorValueHolderInterface::class, new EntityReferenceExists()]; + yield [EntityReferenceExists::class, new EntityReferenceExists()]; yield [stdClass::class, new stdClass()]; } } diff --git a/tools/02_phpstan/composer.lock b/tools/02_phpstan/composer.lock index 7847b875e..a6345541d 100644 --- a/tools/02_phpstan/composer.lock +++ b/tools/02_phpstan/composer.lock @@ -237,12 +237,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -254,6 +254,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -261,6 +262,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -534,7 +536,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -656,7 +658,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -686,8 +688,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1225,7 +1228,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" } ], "aliases": [], diff --git a/tools/03_psalm/composer.lock b/tools/03_psalm/composer.lock index 00d8c663c..12c424048 100644 --- a/tools/03_psalm/composer.lock +++ b/tools/03_psalm/composer.lock @@ -319,16 +319,16 @@ }, { "name": "amphp/parallel", - "version": "v2.3.2", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "321b45ae771d9c33a068186b24117e3cd1c48dce" + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/321b45ae771d9c33a068186b24117e3cd1c48dce", - "reference": "321b45ae771d9c33a068186b24117e3cd1c48dce", + "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", "shasum": "" }, "require": { @@ -391,7 +391,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.2" + "source": "https://github.com/amphp/parallel/tree/v2.3.3" }, "funding": [ { @@ -399,7 +399,7 @@ "type": "github" } ], - "time": "2025-08-27T21:55:40+00:00" + "time": "2025-11-15T06:23:42+00:00" }, { "name": "amphp/parser", @@ -1628,16 +1628,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -1680,9 +1680,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2417,12 +2417,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -2434,6 +2434,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -2441,6 +2442,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -2714,7 +2716,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -2836,7 +2838,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -2866,8 +2868,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -3405,7 +3408,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "sebastian/diff", diff --git a/tools/04_symplify/composer.lock b/tools/04_symplify/composer.lock index 0c8b83929..fd378022d 100644 --- a/tools/04_symplify/composer.lock +++ b/tools/04_symplify/composer.lock @@ -1189,12 +1189,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -1206,6 +1206,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -1213,6 +1214,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -1486,7 +1488,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -1608,7 +1610,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -1638,8 +1640,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -2177,7 +2180,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "sebastian/diff", diff --git a/tools/05_infection/composer.lock b/tools/05_infection/composer.lock index ec773a64e..c8c86cbb3 100644 --- a/tools/05_infection/composer.lock +++ b/tools/05_infection/composer.lock @@ -664,21 +664,21 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.6.2", + "version": "6.6.3", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7" + "reference": "134e98916fa2f663afa623970af345cd788e8967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/3c25fe750c1599716ef26aa997f7c026cee8c4b7", - "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/134e98916fa2f663afa623970af345cd788e8967", + "reference": "134e98916fa2f663afa623970af345cd788e8967", "shasum": "" }, "require": { "ext-json": "*", - "marc-mabe/php-enum": "^4.0", + "marc-mabe/php-enum": "^4.4", "php": "^7.2 || ^8.0" }, "require-dev": { @@ -733,9 +733,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.3" }, - "time": "2025-11-28T15:24:03+00:00" + "time": "2025-12-02T10:21:33+00:00" }, { "name": "marc-mabe/php-enum", @@ -812,16 +812,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -864,9 +864,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "ondram/ci-detector", @@ -1103,12 +1103,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -1120,6 +1120,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -1127,6 +1128,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -1400,7 +1402,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -1522,7 +1524,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -1552,8 +1554,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -2091,7 +2094,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "sanmai/di-container", diff --git a/tools/06_php-coveralls/composer.lock b/tools/06_php-coveralls/composer.lock index 4b36b86c3..5ba457deb 100644 --- a/tools/06_php-coveralls/composer.lock +++ b/tools/06_php-coveralls/composer.lock @@ -728,12 +728,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -745,6 +745,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -752,6 +753,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -1025,7 +1027,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -1147,7 +1149,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -1177,8 +1179,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1716,7 +1719,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "symfony/config", diff --git a/tools/07_phpinsights/composer.lock b/tools/07_phpinsights/composer.lock index 19542cb35..71331f483 100644 --- a/tools/07_phpinsights/composer.lock +++ b/tools/07_phpinsights/composer.lock @@ -564,16 +564,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.91.1", + "version": "v3.91.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b075d845594a90763c480589174f7f90b3aec15f" + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b075d845594a90763c480589174f7f90b3aec15f", - "reference": "b075d845594a90763c480589174f7f90b3aec15f", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/9f10aa6390cea91da175ea608880e942d7c0226e", + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e", "shasum": "" }, "require": { @@ -629,7 +629,7 @@ "PhpCsFixer\\": "src/" }, "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -655,7 +655,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.91.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.91.3" }, "funding": [ { @@ -663,7 +663,7 @@ "type": "github" } ], - "time": "2025-12-01T11:09:57+00:00" + "time": "2025-12-05T19:45:37+00:00" }, { "name": "league/container", @@ -1796,12 +1796,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -1813,6 +1813,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -1820,6 +1821,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -2093,7 +2095,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -2215,7 +2217,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -2245,8 +2247,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -2784,7 +2787,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "sebastian/cli-parser", diff --git a/tools/08_phpmetrics/composer.lock b/tools/08_phpmetrics/composer.lock index a21e0e83a..865635daf 100644 --- a/tools/08_phpmetrics/composer.lock +++ b/tools/08_phpmetrics/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -61,9 +61,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "openmetrics-php/exposition-text", @@ -191,12 +191,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -208,6 +208,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -215,6 +216,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -488,7 +490,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -610,7 +612,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -640,8 +642,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1179,7 +1182,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" } ], "aliases": [], diff --git a/tools/09_rector/composer.lock b/tools/09_rector/composer.lock index a02474ac3..0add75450 100644 --- a/tools/09_rector/composer.lock +++ b/tools/09_rector/composer.lock @@ -9,11 +9,11 @@ "packages-dev": [ { "name": "phpstan/phpstan", - "version": "2.1.32", + "version": "2.1.33", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", - "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f", + "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f", "shasum": "" }, "require": { @@ -58,7 +58,7 @@ "type": "github" } ], - "time": "2025-11-11T15:18:17+00:00" + "time": "2025-12-05T10:24:31+00:00" }, { "name": "rector/rector", @@ -126,12 +126,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -143,6 +143,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -150,6 +151,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -423,7 +425,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -545,7 +547,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -575,8 +577,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1114,7 +1117,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" } ], "aliases": [], diff --git a/tools/10_composer/composer.lock b/tools/10_composer/composer.lock index ded82f02a..6148c7e55 100644 --- a/tools/10_composer/composer.lock +++ b/tools/10_composer/composer.lock @@ -912,21 +912,21 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.6.2", + "version": "6.6.3", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7" + "reference": "134e98916fa2f663afa623970af345cd788e8967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/3c25fe750c1599716ef26aa997f7c026cee8c4b7", - "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/134e98916fa2f663afa623970af345cd788e8967", + "reference": "134e98916fa2f663afa623970af345cd788e8967", "shasum": "" }, "require": { "ext-json": "*", - "marc-mabe/php-enum": "^4.0", + "marc-mabe/php-enum": "^4.4", "php": "^7.2 || ^8.0" }, "require-dev": { @@ -981,9 +981,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.3" }, - "time": "2025-11-28T15:24:03+00:00" + "time": "2025-12-02T10:21:33+00:00" }, { "name": "localheinz/diff", @@ -1201,16 +1201,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.6.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", - "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -1253,9 +1253,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-10-21T19:32:17+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "ondram/ci-detector", @@ -1563,12 +1563,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -1580,6 +1580,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -1587,6 +1588,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -1860,7 +1862,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -1982,7 +1984,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -2012,8 +2014,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -2551,7 +2554,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "symfony/config", diff --git a/tools/11_phplint/composer.lock b/tools/11_phplint/composer.lock index 1834fdb0d..b2803e634 100644 --- a/tools/11_phplint/composer.lock +++ b/tools/11_phplint/composer.lock @@ -301,12 +301,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -318,6 +318,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -325,6 +326,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -598,7 +600,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -720,7 +722,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -750,8 +752,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1289,7 +1292,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" }, { "name": "symfony/cache", diff --git a/tools/12_php-parallel-lint/composer.lock b/tools/12_php-parallel-lint/composer.lock index 9f1e94797..6aea75ce5 100644 --- a/tools/12_php-parallel-lint/composer.lock +++ b/tools/12_php-parallel-lint/composer.lock @@ -175,12 +175,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7" + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", - "reference": "3f393e137e490ecb2ac77989a692129c31192de7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10c1e6abcb8094a428b92e7d8c3126371f9f9126", + "reference": "10c1e6abcb8094a428b92e7d8c3126371f9f9126", "shasum": "" }, "conflict": { @@ -192,6 +192,7 @@ "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", @@ -199,6 +200,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", @@ -472,7 +474,7 @@ "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<2.2", - "getgrav/grav": "<1.7.46", + "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -594,7 +596,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.11", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -624,8 +626,9 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", @@ -1163,7 +1166,7 @@ "type": "tidelift" } ], - "time": "2025-11-26T00:22:38+00:00" + "time": "2025-12-05T21:05:14+00:00" } ], "aliases": [],