From f20977a8227d29f7d8777b96007c4a3f726f9907 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Tue, 2 Sep 2025 18:09:22 +0200 Subject: [PATCH 1/6] chore: update dependencies --- .cursor/mcp.json | 2 +- .cursor/rules/laravel-boost.mdc | 10 +- .github/copilot-instructions.md | 10 +- .junie/guidelines.md | 10 +- .mcp.json | 2 +- CLAUDE.md | 10 +- composer.lock | 228 +++++++++++++++++--------------- package-lock.json | 12 +- 8 files changed, 145 insertions(+), 139 deletions(-) diff --git a/.cursor/mcp.json b/.cursor/mcp.json index ea30195..8c6715a 100644 --- a/.cursor/mcp.json +++ b/.cursor/mcp.json @@ -3,7 +3,7 @@ "laravel-boost": { "command": "php", "args": [ - "./artisan", + "artisan", "boost:mcp" ] } diff --git a/.cursor/rules/laravel-boost.mdc b/.cursor/rules/laravel-boost.mdc index 6e21fa7..037ae20 100644 --- a/.cursor/rules/laravel-boost.mdc +++ b/.cursor/rules/laravel-boost.mdc @@ -14,12 +14,16 @@ This application is a Laravel application and its main Laravel ecosystems packag - php - 8.4.12 - laravel/framework (LARAVEL) - v12 - laravel/prompts (PROMPTS) - v0 +- laravel/sanctum (SANCTUM) - v4 +- laravel/socialite (SOCIALITE) - v5 - livewire/flux (FLUXUI_FREE) - v2 - livewire/livewire (LIVEWIRE) - v3 - livewire/volt (VOLT) - v1 - larastan/larastan (LARASTAN) - v3 - laravel/pint (PINT) - v1 +- laravel/sail (SAIL) - v1 - pestphp/pest (PEST) - v4 +- phpunit/phpunit (PHPUNIT) - v12 - tailwindcss (TAILWINDCSS) - v4 @@ -384,8 +388,6 @@ $delete = fn(Product $product) => $product->delete(); - - $product->delete(); /> - - Save @@ -503,8 +503,6 @@ it('may reset the password', function () { }); - - $pages = visit(['/', '/about', '/contact']); diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index be2748d..cb9f245 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -11,12 +11,16 @@ This application is a Laravel application and its main Laravel ecosystems packag - php - 8.4.12 - laravel/framework (LARAVEL) - v12 - laravel/prompts (PROMPTS) - v0 +- laravel/sanctum (SANCTUM) - v4 +- laravel/socialite (SOCIALITE) - v5 - livewire/flux (FLUXUI_FREE) - v2 - livewire/livewire (LIVEWIRE) - v3 - livewire/volt (VOLT) - v1 - larastan/larastan (LARASTAN) - v3 - laravel/pint (PINT) - v1 +- laravel/sail (SAIL) - v1 - pestphp/pest (PEST) - v4 +- phpunit/phpunit (PHPUNIT) - v12 - tailwindcss (TAILWINDCSS) - v4 @@ -381,8 +385,6 @@ $delete = fn(Product $product) => $product->delete(); - - $product->delete(); /> - - Save @@ -500,8 +500,6 @@ it('may reset the password', function () { }); - - $pages = visit(['/', '/about', '/contact']); diff --git a/.junie/guidelines.md b/.junie/guidelines.md index be2748d..cb9f245 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -11,12 +11,16 @@ This application is a Laravel application and its main Laravel ecosystems packag - php - 8.4.12 - laravel/framework (LARAVEL) - v12 - laravel/prompts (PROMPTS) - v0 +- laravel/sanctum (SANCTUM) - v4 +- laravel/socialite (SOCIALITE) - v5 - livewire/flux (FLUXUI_FREE) - v2 - livewire/livewire (LIVEWIRE) - v3 - livewire/volt (VOLT) - v1 - larastan/larastan (LARASTAN) - v3 - laravel/pint (PINT) - v1 +- laravel/sail (SAIL) - v1 - pestphp/pest (PEST) - v4 +- phpunit/phpunit (PHPUNIT) - v12 - tailwindcss (TAILWINDCSS) - v4 @@ -381,8 +385,6 @@ $delete = fn(Product $product) => $product->delete(); - - $product->delete(); /> - - Save @@ -500,8 +500,6 @@ it('may reset the password', function () { }); - - $pages = visit(['/', '/about', '/contact']); diff --git a/.mcp.json b/.mcp.json index ea30195..8c6715a 100644 --- a/.mcp.json +++ b/.mcp.json @@ -3,7 +3,7 @@ "laravel-boost": { "command": "php", "args": [ - "./artisan", + "artisan", "boost:mcp" ] } diff --git a/CLAUDE.md b/CLAUDE.md index be2748d..cb9f245 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,12 +11,16 @@ This application is a Laravel application and its main Laravel ecosystems packag - php - 8.4.12 - laravel/framework (LARAVEL) - v12 - laravel/prompts (PROMPTS) - v0 +- laravel/sanctum (SANCTUM) - v4 +- laravel/socialite (SOCIALITE) - v5 - livewire/flux (FLUXUI_FREE) - v2 - livewire/livewire (LIVEWIRE) - v3 - livewire/volt (VOLT) - v1 - larastan/larastan (LARASTAN) - v3 - laravel/pint (PINT) - v1 +- laravel/sail (SAIL) - v1 - pestphp/pest (PEST) - v4 +- phpunit/phpunit (PHPUNIT) - v12 - tailwindcss (TAILWINDCSS) - v4 @@ -381,8 +385,6 @@ $delete = fn(Product $product) => $product->delete(); - - $product->delete(); /> - - Save @@ -500,8 +500,6 @@ it('may reset the password', function () { }); - - $pages = visit(['/', '/about', '/contact']); diff --git a/composer.lock b/composer.lock index 2ad26ef..d382489 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.356.8", + "version": "3.356.17", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "3efa8c62c11fedb17b90f60b2d3a9f815b406e63" + "reference": "d0357fbe2535bb7d832e594a4ff2ff8da29d229c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3efa8c62c11fedb17b90f60b2d3a9f815b406e63", - "reference": "3efa8c62c11fedb17b90f60b2d3a9f815b406e63", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d0357fbe2535bb7d832e594a4ff2ff8da29d229c", + "reference": "d0357fbe2535bb7d832e594a4ff2ff8da29d229c", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "guzzlehttp/psr7": "^2.4.5", "mtdowling/jmespath.php": "^2.8.0", "php": ">=8.1", - "psr/http-message": "^2.0" + "psr/http-message": "^1.0 || ^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", @@ -153,9 +153,9 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.356.8" + "source": "https://github.com/aws/aws-sdk-php/tree/3.356.17" }, - "time": "2025-08-29T18:06:18+00:00" + "time": "2025-09-12T18:07:37+00:00" }, { "name": "bnussbau/laravel-trmnl-blade", @@ -243,25 +243,25 @@ }, { "name": "brick/math", - "version": "0.13.1", + "version": "0.14.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", + "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", + "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -291,7 +291,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.13.1" + "source": "https://github.com/brick/math/tree/0.14.0" }, "funding": [ { @@ -299,7 +299,7 @@ "type": "github" } ], - "time": "2025-03-29T13:50:30+00:00" + "time": "2025-08-29T12:40:03+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -1691,20 +1691,20 @@ }, { "name": "laravel/framework", - "version": "v12.26.4", + "version": "v12.28.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "085a367a32ba86fcfa647bfc796098ae6f795b09" + "reference": "868c1f2d3dba4df6d21e3a8d818479f094cfd942" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/085a367a32ba86fcfa647bfc796098ae6f795b09", - "reference": "085a367a32ba86fcfa647bfc796098ae6f795b09", + "url": "https://api.github.com/repos/laravel/framework/zipball/868c1f2d3dba4df6d21e3a8d818479f094cfd942", + "reference": "868c1f2d3dba4df6d21e3a8d818479f094cfd942", "shasum": "" }, "require": { - "brick/math": "^0.11|^0.12|^0.13", + "brick/math": "^0.11|^0.12|^0.13|^0.14", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -1778,6 +1778,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", "illuminate/mail": "self.version", @@ -1810,7 +1811,8 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^10.6.3", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.6.5", "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", @@ -1904,7 +1906,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-08-29T14:15:53+00:00" + "time": "2025-09-04T14:58:12+00:00" }, { "name": "laravel/prompts", @@ -2857,16 +2859,16 @@ }, { "name": "livewire/flux", - "version": "v2.2.6", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/livewire/flux.git", - "reference": "a0e8f33a5cd54ead4d8e27721961425ccbae2e33" + "reference": "e0704b125d5f9544aa32e0cfccb11baaf44d77a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/flux/zipball/a0e8f33a5cd54ead4d8e27721961425ccbae2e33", - "reference": "a0e8f33a5cd54ead4d8e27721961425ccbae2e33", + "url": "https://api.github.com/repos/livewire/flux/zipball/e0704b125d5f9544aa32e0cfccb11baaf44d77a0", + "reference": "e0704b125d5f9544aa32e0cfccb11baaf44d77a0", "shasum": "" }, "require": { @@ -2917,9 +2919,9 @@ ], "support": { "issues": "https://github.com/livewire/flux/issues", - "source": "https://github.com/livewire/flux/tree/v2.2.6" + "source": "https://github.com/livewire/flux/tree/v2.3.2" }, - "time": "2025-08-27T02:05:01+00:00" + "time": "2025-09-08T01:11:34+00:00" }, { "name": "livewire/livewire", @@ -3318,16 +3320,16 @@ }, { "name": "nesbot/carbon", - "version": "3.10.2", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24" + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", - "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", "shasum": "" }, "require": { @@ -3345,13 +3347,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.75.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", "phpmd/phpmd": "^2.15.0", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.1.17", - "phpunit/phpunit": "^10.5.46", - "squizlabs/php_codesniffer": "^3.13.0" + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4" }, "bin": [ "bin/carbon" @@ -3419,7 +3421,7 @@ "type": "tidelift" } ], - "time": "2025-08-02T09:36:06+00:00" + "time": "2025-09-06T13:39:36+00:00" }, { "name": "nette/schema", @@ -4631,20 +4633,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.0", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -4703,9 +4705,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { "name": "spatie/browsershot", @@ -8382,16 +8384,16 @@ }, { "name": "larastan/larastan", - "version": "v3.6.1", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "3c223047e374befd1b64959784685d6ecccf66aa" + "reference": "2e653fd19585a825e283b42f38378b21ae481cc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/3c223047e374befd1b64959784685d6ecccf66aa", - "reference": "3c223047e374befd1b64959784685d6ecccf66aa", + "url": "https://api.github.com/repos/larastan/larastan/zipball/2e653fd19585a825e283b42f38378b21ae481cc7", + "reference": "2e653fd19585a825e283b42f38378b21ae481cc7", "shasum": "" }, "require": { @@ -8405,7 +8407,7 @@ "illuminate/pipeline": "^11.44.2 || ^12.4.1", "illuminate/support": "^11.44.2 || ^12.4.1", "php": "^8.2", - "phpstan/phpstan": "^2.1.11" + "phpstan/phpstan": "^2.1.23" }, "require-dev": { "doctrine/coding-standard": "^13", @@ -8459,7 +8461,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v3.6.1" + "source": "https://github.com/larastan/larastan/tree/v3.7.1" }, "funding": [ { @@ -8467,20 +8469,20 @@ "type": "github" } ], - "time": "2025-08-25T07:24:56+00:00" + "time": "2025-09-10T19:42:11+00:00" }, { "name": "laravel/boost", - "version": "v1.0.20", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/laravel/boost.git", - "reference": "c2ac67ce42c39ffe6c3c073c9202d54a96eaa5b5" + "reference": "70f909465bf73dad7e791fad8b7716b3b2712076" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/boost/zipball/c2ac67ce42c39ffe6c3c073c9202d54a96eaa5b5", - "reference": "c2ac67ce42c39ffe6c3c073c9202d54a96eaa5b5", + "url": "https://api.github.com/repos/laravel/boost/zipball/70f909465bf73dad7e791fad8b7716b3b2712076", + "reference": "70f909465bf73dad7e791fad8b7716b3b2712076", "shasum": "" }, "require": { @@ -8491,7 +8493,7 @@ "illuminate/support": "^10.0|^11.0|^12.0", "laravel/mcp": "^0.1.1", "laravel/prompts": "^0.1.9|^0.3", - "laravel/roster": "^0.2.4", + "laravel/roster": "^0.2.5", "php": "^8.1" }, "require-dev": { @@ -8532,7 +8534,7 @@ "issues": "https://github.com/laravel/boost/issues", "source": "https://github.com/laravel/boost" }, - "time": "2025-08-28T14:46:17+00:00" + "time": "2025-09-04T12:16:09+00:00" }, { "name": "laravel/mcp", @@ -8748,16 +8750,16 @@ }, { "name": "laravel/roster", - "version": "v0.2.5", + "version": "v0.2.6", "source": { "type": "git", "url": "https://github.com/laravel/roster.git", - "reference": "0252fa419733c61b3ebeba8e4e2b9ad2a63f3a17" + "reference": "5615acdf860c5a5c61d04aba44f2d3312550c514" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/roster/zipball/0252fa419733c61b3ebeba8e4e2b9ad2a63f3a17", - "reference": "0252fa419733c61b3ebeba8e4e2b9ad2a63f3a17", + "url": "https://api.github.com/repos/laravel/roster/zipball/5615acdf860c5a5c61d04aba44f2d3312550c514", + "reference": "5615acdf860c5a5c61d04aba44f2d3312550c514", "shasum": "" }, "require": { @@ -8805,7 +8807,7 @@ "issues": "https://github.com/laravel/roster/issues", "source": "https://github.com/laravel/roster" }, - "time": "2025-08-29T07:47:42+00:00" + "time": "2025-09-04T07:31:39+00:00" }, { "name": "laravel/sail", @@ -9114,39 +9116,39 @@ }, { "name": "pestphp/pest", - "version": "v4.0.4", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "47fb1d77631d608022cc7af96cac90ac741c8394" + "reference": "b7406938ac9e8d08cf96f031922b0502a8523268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/47fb1d77631d608022cc7af96cac90ac741c8394", - "reference": "47fb1d77631d608022cc7af96cac90ac741c8394", + "url": "https://api.github.com/repos/pestphp/pest/zipball/b7406938ac9e8d08cf96f031922b0502a8523268", + "reference": "b7406938ac9e8d08cf96f031922b0502a8523268", "shasum": "" }, "require": { - "brianium/paratest": "^7.11.2", + "brianium/paratest": "^7.12.0", "nunomaduro/collision": "^8.8.2", "nunomaduro/termwind": "^2.3.1", "pestphp/pest-plugin": "^4.0.0", "pestphp/pest-plugin-arch": "^4.0.0", "pestphp/pest-plugin-mutate": "^4.0.1", - "pestphp/pest-plugin-profanity": "^4.0.1", + "pestphp/pest-plugin-profanity": "^4.1.0", "php": "^8.3.0", - "phpunit/phpunit": "^12.3.7", - "symfony/process": "^7.3.0" + "phpunit/phpunit": "^12.3.8", + "symfony/process": "^7.3.3" }, "conflict": { "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.3.7", + "phpunit/phpunit": ">12.3.8", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^4.0.0", - "pestphp/pest-plugin-browser": "^4.0.2", + "pestphp/pest-plugin-browser": "^4.1.0", "pestphp/pest-plugin-type-coverage": "^4.0.2", "psy/psysh": "^0.12.10" }, @@ -9214,7 +9216,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v4.0.4" + "source": "https://github.com/pestphp/pest/tree/v4.1.0" }, "funding": [ { @@ -9226,7 +9228,7 @@ "type": "github" } ], - "time": "2025-08-28T18:19:42+00:00" + "time": "2025-09-10T13:41:09+00:00" }, { "name": "pestphp/pest-plugin", @@ -9589,16 +9591,16 @@ }, { "name": "pestphp/pest-plugin-profanity", - "version": "v4.0.1", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-profanity.git", - "reference": "823d5d8ae07a265c70f5e1a9ce50639543b0bf11" + "reference": "e279c844b6868da92052be27b5202c2ad7216e80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/823d5d8ae07a265c70f5e1a9ce50639543b0bf11", - "reference": "823d5d8ae07a265c70f5e1a9ce50639543b0bf11", + "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/e279c844b6868da92052be27b5202c2ad7216e80", + "reference": "e279c844b6868da92052be27b5202c2ad7216e80", "shasum": "" }, "require": { @@ -9639,9 +9641,9 @@ "unit" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.0.1" + "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.1.0" }, - "time": "2025-08-20T12:58:03+00:00" + "time": "2025-09-10T06:17:03+00:00" }, { "name": "phar-io/manifest", @@ -9985,16 +9987,16 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.22", + "version": "2.1.25", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4" + "reference": "4087d28bd252895874e174d65e26b2c202ed893a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4", - "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4087d28bd252895874e174d65e26b2c202ed893a", + "reference": "4087d28bd252895874e174d65e26b2c202ed893a", "shasum": "" }, "require": { @@ -10039,20 +10041,20 @@ "type": "github" } ], - "time": "2025-08-04T19:17:37+00:00" + "time": "2025-09-12T14:26:42+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "12.3.5", + "version": "12.3.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "96dc0466673e215bf5536301039017f03cd45c6b" + "reference": "bbede0f5593dad37af3be6a6f8e6ae1885e8a0a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/96dc0466673e215bf5536301039017f03cd45c6b", - "reference": "96dc0466673e215bf5536301039017f03cd45c6b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bbede0f5593dad37af3be6a6f8e6ae1885e8a0a9", + "reference": "bbede0f5593dad37af3be6a6f8e6ae1885e8a0a9", "shasum": "" }, "require": { @@ -10108,7 +10110,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.7" }, "funding": [ { @@ -10128,7 +10130,7 @@ "type": "tidelift" } ], - "time": "2025-09-01T08:07:42+00:00" + "time": "2025-09-10T09:59:06+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10377,16 +10379,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.3.7", + "version": "12.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e" + "reference": "9d68c1b41fc21aac106c71cde4669fe7b99fca10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b8fa997c49682979ad6bfaa0d7fb25f54954965e", - "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9d68c1b41fc21aac106c71cde4669fe7b99fca10", + "reference": "9d68c1b41fc21aac106c71cde4669fe7b99fca10", "shasum": "" }, "require": { @@ -10400,7 +10402,7 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", - "phpunit/php-code-coverage": "^12.3.3", + "phpunit/php-code-coverage": "^12.3.6", "phpunit/php-file-iterator": "^6.0.0", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", @@ -10410,7 +10412,7 @@ "sebastian/diff": "^7.0.0", "sebastian/environment": "^8.0.3", "sebastian/exporter": "^7.0.0", - "sebastian/global-state": "^8.0.0", + "sebastian/global-state": "^8.0.2", "sebastian/object-enumerator": "^7.0.0", "sebastian/type": "^6.0.3", "sebastian/version": "^6.0.0", @@ -10454,7 +10456,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.7" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.8" }, "funding": [ { @@ -10478,20 +10480,20 @@ "type": "tidelift" } ], - "time": "2025-08-28T05:15:46+00:00" + "time": "2025-09-03T06:25:17+00:00" }, { "name": "sebastian/cli-parser", - "version": "4.0.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c" + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/6d584c727d9114bcdc14c86711cd1cad51778e7c", - "reference": "6d584c727d9114bcdc14c86711cd1cad51778e7c", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", "shasum": "" }, "require": { @@ -10503,7 +10505,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -10527,15 +10529,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "time": "2025-02-07T04:53:50+00:00" + "time": "2025-09-14T09:36:45+00:00" }, { "name": "sebastian/comparator", diff --git a/package-lock.json b/package-lock.json index 306c4f2..b57b9bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1186,9 +1186,9 @@ } }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -3112,9 +3112,9 @@ } }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", From 12c82e02d73fa2d9ce9647f8b97affd09d4f666a Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Sun, 14 Sep 2025 18:57:17 +0200 Subject: [PATCH 2/6] feat: adds compatibility with TRMNL Design Framework v2 --- app/Models/DeviceModel.php | 9 +++++++++ app/Models/Plugin.php | 4 +++- composer.json | 2 +- composer.lock | 14 +++++++------- resources/views/trmnl-layouts/single.blade.php | 6 +++++- .../views/vendor/trmnl/components/screen.blade.php | 2 +- routes/api.php | 2 +- 7 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/Models/DeviceModel.php b/app/Models/DeviceModel.php index c9de2af..c5f3d31 100644 --- a/app/Models/DeviceModel.php +++ b/app/Models/DeviceModel.php @@ -24,4 +24,13 @@ final class DeviceModel extends Model 'offset_y' => 'integer', 'published_at' => 'datetime', ]; + + public function getColorDepthAttribute(): ?string + { + if (! $this->bit_depth){ + return null; + } + + return $this->bit_depth . 'bit'; + } } diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index 40b3383..375921b 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -278,7 +278,7 @@ class Plugin extends Model * * @throws LiquidException */ - public function render(string $size = 'full', bool $standalone = true): string + public function render(string $size = 'full', bool $standalone = true, ?Device $device = null): string { if ($this->render_markup) { $renderedContent = ''; @@ -344,6 +344,7 @@ class Plugin extends Model if ($standalone) { return view('trmnl-layouts.single', [ + 'colorDepth' => $device?->deviceModel?->color_depth, 'slot' => $renderedContent, ])->render(); } @@ -354,6 +355,7 @@ class Plugin extends Model if ($this->render_markup_view) { if ($standalone) { return view('trmnl-layouts.single', [ + 'colorDepth' => $device?->deviceModel?->color_depth, 'slot' => view($this->render_markup_view, [ 'size' => $size, 'data' => $this->data_payload, diff --git a/composer.json b/composer.json index 0ae1e49..8417cc6 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "php": "^8.2", "ext-imagick": "*", "ext-zip": "*", - "bnussbau/laravel-trmnl-blade": "1.2.*", + "bnussbau/laravel-trmnl-blade": "2.0.*", "intervention/image": "^3.11", "keepsuit/laravel-liquid": "^0.5.2", "laravel/framework": "^12.1", diff --git a/composer.lock b/composer.lock index d382489..5cbc926 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": "ecbc891180c22676e2d03b6c8a02b6e3", + "content-hash": "349a46b94103f479caae00ca7e6a99c2", "packages": [ { "name": "aws/aws-crt-php", @@ -159,16 +159,16 @@ }, { "name": "bnussbau/laravel-trmnl-blade", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/bnussbau/laravel-trmnl-blade.git", - "reference": "fe11d1d7d896d6f0ea44664c1c6b5f00f1bdab36" + "reference": "3b60522bea8ae5dbca94834706247339e1e53582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bnussbau/laravel-trmnl-blade/zipball/fe11d1d7d896d6f0ea44664c1c6b5f00f1bdab36", - "reference": "fe11d1d7d896d6f0ea44664c1c6b5f00f1bdab36", + "url": "https://api.github.com/repos/bnussbau/laravel-trmnl-blade/zipball/3b60522bea8ae5dbca94834706247339e1e53582", + "reference": "3b60522bea8ae5dbca94834706247339e1e53582", "shasum": "" }, "require": { @@ -223,7 +223,7 @@ ], "support": { "issues": "https://github.com/bnussbau/laravel-trmnl-blade/issues", - "source": "https://github.com/bnussbau/laravel-trmnl-blade/tree/1.2.1" + "source": "https://github.com/bnussbau/laravel-trmnl-blade/tree/2.0.0" }, "funding": [ { @@ -239,7 +239,7 @@ "type": "github" } ], - "time": "2025-08-11T16:14:12+00:00" + "time": "2025-09-14T07:54:31+00:00" }, { "name": "brick/math", diff --git a/resources/views/trmnl-layouts/single.blade.php b/resources/views/trmnl-layouts/single.blade.php index ec073e5..741ddbd 100644 --- a/resources/views/trmnl-layouts/single.blade.php +++ b/resources/views/trmnl-layouts/single.blade.php @@ -1,3 +1,7 @@ - +@props([ + 'colorDepth' => '1bit', +]) + + {!! $slot !!} diff --git a/resources/views/vendor/trmnl/components/screen.blade.php b/resources/views/vendor/trmnl/components/screen.blade.php index 99aa147..b5e570f 100644 --- a/resources/views/vendor/trmnl/components/screen.blade.php +++ b/resources/views/vendor/trmnl/components/screen.blade.php @@ -3,7 +3,7 @@ 'darkMode' => false, 'deviceVariant' => 'og', 'deviceOrientation' => null, - 'colorDepth' => '2bit', + 'colorDepth' => '1bit', 'scaleLevel' => null, ]) diff --git a/routes/api.php b/routes/api.php index 36c7aa0..578fe7d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -85,7 +85,7 @@ Route::get('/display', function (Request $request) { // Check and update stale data if needed if ($plugin->isDataStale() || $plugin->current_image === null) { $plugin->updateDataPayload(); - $markup = $plugin->render(); + $markup = $plugin->render(device: $device); GenerateScreenJob::dispatchSync($device->id, $plugin->id, $markup); } From f7d9618f5669c6bdea0cd022cf371dea4b680088 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Mon, 15 Sep 2025 16:44:17 +0200 Subject: [PATCH 3/6] fix(ci): do not add latest tag to pre-releases --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 048db51..3b73ed6 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -43,7 +43,7 @@ jobs: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=tag - latest + type=raw,value=latest,enable={{is_default_branch && !is_prerelease}} - name: Build and push Docker image uses: docker/build-push-action@v6 From 3fecfe14bd79aa55a974a2908cdcdf0190922eb2 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Mon, 15 Sep 2025 19:24:31 +0200 Subject: [PATCH 4/6] fix: pint --- app/Models/DeviceModel.php | 4 +- app/Services/ImageGenerationService.php | 71 +++++++++++++------- tests/Feature/Livewire/Catalog/IndexTest.php | 6 +- 3 files changed, 50 insertions(+), 31 deletions(-) diff --git a/app/Models/DeviceModel.php b/app/Models/DeviceModel.php index c5f3d31..ded5c39 100644 --- a/app/Models/DeviceModel.php +++ b/app/Models/DeviceModel.php @@ -27,10 +27,10 @@ final class DeviceModel extends Model public function getColorDepthAttribute(): ?string { - if (! $this->bit_depth){ + if (! $this->bit_depth) { return null; } - return $this->bit_depth . 'bit'; + return $this->bit_depth.'bit'; } } diff --git a/app/Services/ImageGenerationService.php b/app/Services/ImageGenerationService.php index 137b0af..3a8a88d 100644 --- a/app/Services/ImageGenerationService.php +++ b/app/Services/ImageGenerationService.php @@ -7,11 +7,11 @@ use App\Models\Device; use App\Models\DeviceModel; use App\Models\Plugin; use Exception; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Imagick; use ImagickException; use ImagickPixel; -use Log; use Ramsey\Uuid\Uuid; use RuntimeException; use Spatie\Browsershot\Browsershot; @@ -63,6 +63,15 @@ class ImageGenerationService } } + // Validate that the PNG file was created and is valid + if (! file_exists($pngPath)) { + throw new RuntimeException('PNG file was not created: '.$pngPath); + } + + if (filesize($pngPath) === 0) { + throw new RuntimeException('PNG file is empty: '.$pngPath); + } + // Convert image based on DeviceModel settings or fallback to device settings self::convertImage($pngPath, $bmpPath, $imageSettings); @@ -293,14 +302,19 @@ class ImageGenerationService */ private static function convertToBmpImageMagick(string $pngPath, string $bmpPath): void { - $imagick = new Imagick($pngPath); - $imagick->setImageType(Imagick::IMGTYPE_GRAYSCALE); - $imagick->quantizeImage(2, Imagick::COLORSPACE_GRAY, 0, true, false); - $imagick->setImageDepth(1); - $imagick->stripImage(); - $imagick->setFormat('BMP3'); - $imagick->writeImage($bmpPath); - $imagick->clear(); + try { + $imagick = new Imagick($pngPath); + $imagick->setImageType(Imagick::IMGTYPE_GRAYSCALE); + $imagick->quantizeImage(2, Imagick::COLORSPACE_GRAY, 0, true, false); + $imagick->setImageDepth(1); + $imagick->stripImage(); + $imagick->setFormat('BMP3'); + $imagick->writeImage($bmpPath); + $imagick->clear(); + } catch (ImagickException $e) { + Log::error('ImageMagick conversion failed for PNG: '.$pngPath.' - '.$e->getMessage()); + throw $e; + } } /** @@ -308,26 +322,31 @@ class ImageGenerationService */ private static function convertToPngImageMagick(string $pngPath, ?int $width, ?int $height, ?int $rotate, $quantize = true): void { - $imagick = new Imagick($pngPath); - if ($width !== 800 || $height !== 480) { - $imagick->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1, true); - } - if ($rotate !== null && $rotate !== 0) { - $imagick->rotateImage(new ImagickPixel('black'), $rotate); - } + try { + $imagick = new Imagick($pngPath); + if ($width !== 800 || $height !== 480) { + $imagick->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1, true); + } + if ($rotate !== null && $rotate !== 0) { + $imagick->rotateImage(new ImagickPixel('black'), $rotate); + } - $imagick->setImageType(Imagick::IMGTYPE_GRAYSCALE); - $imagick->setOption('dither', 'FloydSteinberg'); + $imagick->setImageType(Imagick::IMGTYPE_GRAYSCALE); + $imagick->setOption('dither', 'FloydSteinberg'); - if ($quantize) { - $imagick->quantizeImage(2, Imagick::COLORSPACE_GRAY, 0, true, false); + if ($quantize) { + $imagick->quantizeImage(2, Imagick::COLORSPACE_GRAY, 0, true, false); + } + $imagick->setImageDepth(8); + $imagick->stripImage(); + + $imagick->setFormat('png'); + $imagick->writeImage($pngPath); + $imagick->clear(); + } catch (ImagickException $e) { + Log::error('ImageMagick conversion failed for PNG: '.$pngPath.' - '.$e->getMessage()); + throw $e; } - $imagick->setImageDepth(8); - $imagick->stripImage(); - - $imagick->setFormat('png'); - $imagick->writeImage($pngPath); - $imagick->clear(); } public static function cleanupFolder(): void diff --git a/tests/Feature/Livewire/Catalog/IndexTest.php b/tests/Feature/Livewire/Catalog/IndexTest.php index 5964588..82bf816 100644 --- a/tests/Feature/Livewire/Catalog/IndexTest.php +++ b/tests/Feature/Livewire/Catalog/IndexTest.php @@ -39,9 +39,9 @@ it('loads plugins from catalog URL', function () { 'zip_url' => 'https://example.com/plugin.zip', ], 'byos' => [ - 'byos_laravel' => [ - 'compatibility' => true, - ] + 'byos_laravel' => [ + 'compatibility' => true, + ], ], 'logo_url' => 'https://example.com/logo.png', ], From cea5de8b1b6167324c880379b7efcf49fcfd6538 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Mon, 15 Sep 2025 20:32:12 +0200 Subject: [PATCH 5/6] wip --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 3b73ed6..0e7cd41 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -43,7 +43,7 @@ jobs: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=tag - type=raw,value=latest,enable={{is_default_branch && !is_prerelease}} + type=raw,value=latest,enable=${{ !github.event.release.prerelease }} - name: Build and push Docker image uses: docker/build-push-action@v6 From 677320d45dbf8803ad8c39e32c24c5db777dd2d9 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Mon, 15 Sep 2025 20:57:40 +0200 Subject: [PATCH 6/6] wip --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 0e7cd41..7fe955d 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -43,7 +43,7 @@ jobs: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=tag - type=raw,value=latest,enable=${{ !github.event.release.prerelease }} + type=raw,value=latest,enable=${{ github.event.release.prerelease == false }} - name: Build and push Docker image uses: docker/build-push-action@v6