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": [],