From 7bc087c3d6533c0ce4cc071aedcd9f6f52df82b3 Mon Sep 17 00:00:00 2001 From: Adam Kiss Date: Mon, 17 Nov 2025 13:17:59 +0100 Subject: [PATCH 1/8] Tests: Test fallthrough expressions / dynamic fallthrough expressions --- .../view/tests/FallthroughAttributesTest.php | 40 +++++++++++++++++++ .../view/tests/Fixtures/fallthrough.view.php | 7 ++++ .../x-fallthrough-dynamic-test.view.php | 1 + .../Fixtures/x-fallthrough-test.view.php | 1 + 4 files changed, 49 insertions(+) create mode 100644 packages/view/tests/FallthroughAttributesTest.php create mode 100644 packages/view/tests/Fixtures/fallthrough.view.php create mode 100644 packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php create mode 100644 packages/view/tests/Fixtures/x-fallthrough-test.view.php diff --git a/packages/view/tests/FallthroughAttributesTest.php b/packages/view/tests/FallthroughAttributesTest.php new file mode 100644 index 000000000..546c47aa1 --- /dev/null +++ b/packages/view/tests/FallthroughAttributesTest.php @@ -0,0 +1,40 @@ +addViewComponents( + __DIR__ . '/Fixtures/x-fallthrough-test.view.php', + __DIR__ . '/Fixtures/x-fallthrough-dynamic-test.view.php', + ); + + $renderer = + TempestViewRenderer::make( + viewConfig: $viewConfig, + ); + + $html = $renderer->render( + view(__DIR__ . '/Fixtures/fallthrough.view.php'), + ); + + $this->assertEquals(<<<'HTML' +
+
+
+
+ HTML, $html); + } +} diff --git a/packages/view/tests/Fixtures/fallthrough.view.php b/packages/view/tests/Fixtures/fallthrough.view.php new file mode 100644 index 000000000..0eb074bcd --- /dev/null +++ b/packages/view/tests/Fixtures/fallthrough.view.php @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php b/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php new file mode 100644 index 000000000..d1a2d559a --- /dev/null +++ b/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/packages/view/tests/Fixtures/x-fallthrough-test.view.php b/packages/view/tests/Fixtures/x-fallthrough-test.view.php new file mode 100644 index 000000000..85142b6f9 --- /dev/null +++ b/packages/view/tests/Fixtures/x-fallthrough-test.view.php @@ -0,0 +1 @@ +
\ No newline at end of file From 450b2e7058852044d6257dc98c92b3366cb7e2fc Mon Sep 17 00:00:00 2001 From: Brent Roose Date: Fri, 12 Dec 2025 09:08:56 +0100 Subject: [PATCH 2/8] fix(core): fix class guards not using the autoloader (#1808) --- packages/auth/src/Installer/AuthenticationInstaller.php | 2 +- packages/cache/src/Commands/CacheClearCommand.php | 2 +- packages/cache/src/Commands/CacheStatusCommand.php | 2 +- packages/command-bus/src/HandleAsyncCommand.php | 2 +- packages/command-bus/src/MonitorAsyncCommands.php | 2 +- packages/container/src/Commands/ContainerShowCommand.php | 2 +- packages/container/src/Commands/MakeInitializerCommand.php | 2 +- packages/core/src/Commands/DiscoveryClearCommand.php | 2 +- packages/core/src/Commands/DiscoveryGenerateCommand.php | 2 +- packages/core/src/Commands/DiscoveryStatusCommand.php | 2 +- packages/core/src/Commands/InstallCommand.php | 2 +- packages/core/src/FrameworkKernel.php | 4 ++-- packages/cryptography/src/GenerateSigningKeyCommand.php | 2 +- packages/discovery/src/Commands/MakeDiscoveryCommand.php | 2 +- packages/router/src/Commands/MakeControllerCommand.php | 2 +- packages/router/src/Commands/RoutesCommand.php | 2 +- packages/router/src/Commands/ServeCommand.php | 2 +- packages/view/src/Commands/ClearViewCacheCommand.php | 2 +- packages/view/src/Commands/MakeViewCommand.php | 2 +- 19 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/auth/src/Installer/AuthenticationInstaller.php b/packages/auth/src/Installer/AuthenticationInstaller.php index 547160c30..d80395421 100644 --- a/packages/auth/src/Installer/AuthenticationInstaller.php +++ b/packages/auth/src/Installer/AuthenticationInstaller.php @@ -15,7 +15,7 @@ use function Tempest\src_path; use function Tempest\Support\Namespace\to_fqcn; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final class AuthenticationInstaller implements Installer { use PublishesFiles; diff --git a/packages/cache/src/Commands/CacheClearCommand.php b/packages/cache/src/Commands/CacheClearCommand.php index e4022e28a..f3ad69265 100644 --- a/packages/cache/src/Commands/CacheClearCommand.php +++ b/packages/cache/src/Commands/CacheClearCommand.php @@ -22,7 +22,7 @@ use function Tempest\Support\arr; use function Tempest\Support\str; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class CacheClearCommand { use HasConsole; diff --git a/packages/cache/src/Commands/CacheStatusCommand.php b/packages/cache/src/Commands/CacheStatusCommand.php index 61e45da51..42158ecb6 100644 --- a/packages/cache/src/Commands/CacheStatusCommand.php +++ b/packages/cache/src/Commands/CacheStatusCommand.php @@ -22,7 +22,7 @@ use function Tempest\Support\arr; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class CacheStatusCommand { use HasConsole; diff --git a/packages/command-bus/src/HandleAsyncCommand.php b/packages/command-bus/src/HandleAsyncCommand.php index a9ea7d6ec..ee4e9378f 100644 --- a/packages/command-bus/src/HandleAsyncCommand.php +++ b/packages/command-bus/src/HandleAsyncCommand.php @@ -14,7 +14,7 @@ use function Tempest\Support\arr; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class HandleAsyncCommand { use HasConsole; diff --git a/packages/command-bus/src/MonitorAsyncCommands.php b/packages/command-bus/src/MonitorAsyncCommands.php index 90b44c61d..03187e00b 100644 --- a/packages/command-bus/src/MonitorAsyncCommands.php +++ b/packages/command-bus/src/MonitorAsyncCommands.php @@ -13,7 +13,7 @@ use function Tempest\Support\arr; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class MonitorAsyncCommands { use HasConsole; diff --git a/packages/container/src/Commands/ContainerShowCommand.php b/packages/container/src/Commands/ContainerShowCommand.php index a339298af..0542e21c5 100644 --- a/packages/container/src/Commands/ContainerShowCommand.php +++ b/packages/container/src/Commands/ContainerShowCommand.php @@ -18,7 +18,7 @@ use function Tempest\Support\Str\before_last; use function Tempest\Support\Str\contains; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class ContainerShowCommand { public function __construct( diff --git a/packages/container/src/Commands/MakeInitializerCommand.php b/packages/container/src/Commands/MakeInitializerCommand.php index 81c492d32..3cdb0eb99 100644 --- a/packages/container/src/Commands/MakeInitializerCommand.php +++ b/packages/container/src/Commands/MakeInitializerCommand.php @@ -13,7 +13,7 @@ use Tempest\Generation\ClassManipulator; use Tempest\Generation\DataObjects\StubFile; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final class MakeInitializerCommand { use PublishesFiles; diff --git a/packages/core/src/Commands/DiscoveryClearCommand.php b/packages/core/src/Commands/DiscoveryClearCommand.php index 34c7badbe..3b2b4ce51 100644 --- a/packages/core/src/Commands/DiscoveryClearCommand.php +++ b/packages/core/src/Commands/DiscoveryClearCommand.php @@ -8,7 +8,7 @@ use Tempest\Console\ConsoleCommand; use Tempest\Core\DiscoveryCache; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class DiscoveryClearCommand { public function __construct( diff --git a/packages/core/src/Commands/DiscoveryGenerateCommand.php b/packages/core/src/Commands/DiscoveryGenerateCommand.php index e34c1843d..f9f389a69 100644 --- a/packages/core/src/Commands/DiscoveryGenerateCommand.php +++ b/packages/core/src/Commands/DiscoveryGenerateCommand.php @@ -19,7 +19,7 @@ use function Tempest\env; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class DiscoveryGenerateCommand { use HasConsole; diff --git a/packages/core/src/Commands/DiscoveryStatusCommand.php b/packages/core/src/Commands/DiscoveryStatusCommand.php index 1ede32656..1f037ff11 100644 --- a/packages/core/src/Commands/DiscoveryStatusCommand.php +++ b/packages/core/src/Commands/DiscoveryStatusCommand.php @@ -15,7 +15,7 @@ use function Tempest\root_path; use function Tempest\Support\str; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class DiscoveryStatusCommand { public function __construct( diff --git a/packages/core/src/Commands/InstallCommand.php b/packages/core/src/Commands/InstallCommand.php index 923112b05..1b49eea04 100644 --- a/packages/core/src/Commands/InstallCommand.php +++ b/packages/core/src/Commands/InstallCommand.php @@ -14,7 +14,7 @@ use function Tempest\Support\arr; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class InstallCommand { use HasConsole; diff --git a/packages/core/src/FrameworkKernel.php b/packages/core/src/FrameworkKernel.php index cfeed988c..d7514b03b 100644 --- a/packages/core/src/FrameworkKernel.php +++ b/packages/core/src/FrameworkKernel.php @@ -108,7 +108,7 @@ public function createContainer(): Container public function loadComposer(): self { - if (class_exists(GenericProcessExecutor::class, false)) { + if (class_exists(GenericProcessExecutor::class)) { $processExecutor = new GenericProcessExecutor(); } else { $processExecutor = null; @@ -249,7 +249,7 @@ public function registerExceptionHandler(): self } // TODO: refactor to not have a hard-coded dependency on these exception handlers - if (! class_exists(ConsoleExceptionHandler::class, false) || ! class_exists(HttpExceptionHandler::class, false)) { + if (! class_exists(ConsoleExceptionHandler::class) || ! class_exists(HttpExceptionHandler::class)) { return $this; } diff --git a/packages/cryptography/src/GenerateSigningKeyCommand.php b/packages/cryptography/src/GenerateSigningKeyCommand.php index 488143bf1..fb22a7659 100644 --- a/packages/cryptography/src/GenerateSigningKeyCommand.php +++ b/packages/cryptography/src/GenerateSigningKeyCommand.php @@ -13,7 +13,7 @@ use function Tempest\root_path; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class GenerateSigningKeyCommand { public function __construct( diff --git a/packages/discovery/src/Commands/MakeDiscoveryCommand.php b/packages/discovery/src/Commands/MakeDiscoveryCommand.php index b8379b4ce..4513949d4 100644 --- a/packages/discovery/src/Commands/MakeDiscoveryCommand.php +++ b/packages/discovery/src/Commands/MakeDiscoveryCommand.php @@ -12,7 +12,7 @@ use Tempest\Generation\ClassManipulator; use Tempest\Generation\DataObjects\StubFile; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final class MakeDiscoveryCommand { use PublishesFiles; diff --git a/packages/router/src/Commands/MakeControllerCommand.php b/packages/router/src/Commands/MakeControllerCommand.php index 683f04fbf..973f4770d 100644 --- a/packages/router/src/Commands/MakeControllerCommand.php +++ b/packages/router/src/Commands/MakeControllerCommand.php @@ -12,7 +12,7 @@ use Tempest\Generation\DataObjects\StubFile; use Tempest\Router\Stubs\ControllerStub; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final class MakeControllerCommand { use PublishesFiles; diff --git a/packages/router/src/Commands/RoutesCommand.php b/packages/router/src/Commands/RoutesCommand.php index a93d35b18..73e6c0a42 100644 --- a/packages/router/src/Commands/RoutesCommand.php +++ b/packages/router/src/Commands/RoutesCommand.php @@ -17,7 +17,7 @@ use function Tempest\Support\Str\after_last; use function Tempest\Support\Str\before_last; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class RoutesCommand { public function __construct( diff --git a/packages/router/src/Commands/ServeCommand.php b/packages/router/src/Commands/ServeCommand.php index ae3084fda..76bf4b01d 100644 --- a/packages/router/src/Commands/ServeCommand.php +++ b/packages/router/src/Commands/ServeCommand.php @@ -8,7 +8,7 @@ use Tempest\Intl\Number; use Tempest\Support\Str; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class ServeCommand { #[ConsoleCommand( diff --git a/packages/view/src/Commands/ClearViewCacheCommand.php b/packages/view/src/Commands/ClearViewCacheCommand.php index 25cbf3ff2..e293687b0 100644 --- a/packages/view/src/Commands/ClearViewCacheCommand.php +++ b/packages/view/src/Commands/ClearViewCacheCommand.php @@ -10,7 +10,7 @@ use Tempest\Container\Container; use Tempest\View\ViewCache; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final readonly class ClearViewCacheCommand { use HasConsole; diff --git a/packages/view/src/Commands/MakeViewCommand.php b/packages/view/src/Commands/MakeViewCommand.php index 6fc7bccd6..fe0e204e6 100644 --- a/packages/view/src/Commands/MakeViewCommand.php +++ b/packages/view/src/Commands/MakeViewCommand.php @@ -17,7 +17,7 @@ use function Tempest\Support\str; -if (class_exists(\Tempest\Console\ConsoleCommand::class, false)) { +if (class_exists(\Tempest\Console\ConsoleCommand::class)) { final class MakeViewCommand { use PublishesFiles; From 7afcdb378399d0d217268a1122f8418fc60a6d60 Mon Sep 17 00:00:00 2001 From: brendt Date: Fri, 12 Dec 2025 09:09:51 +0100 Subject: [PATCH 3/8] chore: release v2.14.0 --- CHANGELOG.md | 21 ++++++++++++++++++++- packages/auth/composer.json | 8 ++++---- packages/cache/composer.json | 10 +++++----- packages/clock/composer.json | 2 +- packages/command-bus/composer.json | 6 +++--- packages/console/composer.json | 18 +++++++++--------- packages/container/composer.json | 2 +- packages/core/composer.json | 8 ++++---- packages/core/src/Kernel.php | 2 +- packages/cryptography/composer.json | 6 +++--- packages/database/composer.json | 10 +++++----- packages/datetime/composer.json | 4 ++-- packages/discovery/composer.json | 4 ++-- packages/event-bus/composer.json | 6 +++--- packages/generation/composer.json | 2 +- packages/http-client/composer.json | 6 +++--- packages/http/composer.json | 12 ++++++------ packages/icon/composer.json | 6 +++--- packages/intl/composer.json | 6 +++--- packages/kv-store/composer.json | 6 +++--- packages/log/composer.json | 2 +- packages/mail/composer.json | 6 +++--- packages/mapper/composer.json | 4 ++-- packages/process/composer.json | 6 +++--- packages/router/composer.json | 4 ++-- packages/storage/composer.json | 4 ++-- packages/support/composer.json | 2 +- packages/validation/composer.json | 8 ++++---- packages/view/composer.json | 8 ++++---- packages/vite-plugin-tempest/package.json | 2 +- 30 files changed, 105 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2f72fdac..b1b963ef1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,26 @@ All notable changes to this project will be documented in this file. -## [2.13.0](https://github.com/tempestphp/tempest-framework/compare/v2.12.0..2.13.0) — 2025-12-04 +## [2.14.0](https://github.com/tempestphp/tempest-framework/compare/v2.13.0..2.14.0) — 2025-12-12 + +### 🚨 Breaking changes + +- **console**: [**breaking**] allow `--force` to bypass `CautionMiddleware` (#1804) ([bccf92f](https://github.com/tempestphp/tempest-framework/commit/bccf92fb3e88c8ba35b1f89a8f893031a072df96)) + +### 🚀 Features + +- **session**: add redis session manager (#1790) ([eb7150b](https://github.com/tempestphp/tempest-framework/commit/eb7150b8c4226397feee5311b0033c5f05fd9be1)) + +### 🐛 Bug fixes + +- **core**: fix class guards not using the autoloader (#1808) ([450b2e7](https://github.com/tempestphp/tempest-framework/commit/450b2e7058852044d6257dc98c92b3366cb7e2fc)) +- **database**: support route binding through `IsDatabaseModel` (#1794) ([3556acb](https://github.com/tempestphp/tempest-framework/commit/3556acb1538a26cb21b33fb0e0d15180b64527c9)) +- **database**: support pagination with joins and relations (#1801) ([0b52ffd](https://github.com/tempestphp/tempest-framework/commit/0b52ffd2cd18db89bb27fa3ace5b409e90f20f7e)) +- **router**: add null checks and fix route parameter handling (#1778) ([c89c345](https://github.com/tempestphp/tempest-framework/commit/c89c345da59a97612c4ac5807cafee0b5e1b1da9)) +- **view**: throw exception when parsing xml views with `short_open_tag` enabled (#1795) ([30b2a6f](https://github.com/tempestphp/tempest-framework/commit/30b2a6ff8f8d4d108b334109748c96fe56ad8bde)) + + +## [2.13.0](https://github.com/tempestphp/tempest-framework/compare/v2.12.0..v2.13.0) — 2025-12-04 ### 🚀 Features diff --git a/packages/auth/composer.json b/packages/auth/composer.json index f530ffa19..47b574f1f 100644 --- a/packages/auth/composer.json +++ b/packages/auth/composer.json @@ -3,10 +3,10 @@ "description": "A flexible authentication package for Tempest, providing authentication and authorization.", "require": { "php": "^8.4", - "tempest/core": "dev-main", - "tempest/router": "dev-main", - "tempest/database": "dev-main", - "tempest/mapper": "dev-main", + "tempest/core": "2.14.0", + "tempest/router": "2.14.0", + "tempest/database": "2.14.0", + "tempest/mapper": "2.14.0", "league/oauth2-client": "^2.8" }, "require-dev": { diff --git a/packages/cache/composer.json b/packages/cache/composer.json index 60ae7d905..bf78ef535 100644 --- a/packages/cache/composer.json +++ b/packages/cache/composer.json @@ -5,13 +5,13 @@ "php": "^8.4", "psr/cache": "^3.0", "symfony/cache": "^7.3", - "tempest/core": "dev-main", - "tempest/clock": "dev-main", - "tempest/kv-store": "dev-main", - "tempest/container": "dev-main" + "tempest/core": "2.14.0", + "tempest/clock": "2.14.0", + "tempest/kv-store": "2.14.0", + "tempest/container": "2.14.0" }, "require-dev": { - "tempest/clock": "dev-main" + "tempest/clock": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/clock/composer.json b/packages/clock/composer.json index f2272e073..0f2cbfefc 100644 --- a/packages/clock/composer.json +++ b/packages/clock/composer.json @@ -4,7 +4,7 @@ "require": { "php": "^8.4", "psr/clock": "^1.0.0", - "tempest/datetime": "dev-main" + "tempest/datetime": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/command-bus/composer.json b/packages/command-bus/composer.json index 5834601a0..bea476e79 100644 --- a/packages/command-bus/composer.json +++ b/packages/command-bus/composer.json @@ -3,9 +3,9 @@ "description": "A command bus component designed to dispatch commands to their respective handlers.", "require": { "php": "^8.4", - "tempest/core": "dev-main", - "tempest/console": "dev-main", - "tempest/container": "dev-main" + "tempest/core": "2.14.0", + "tempest/console": "2.14.0", + "tempest/container": "2.14.0" }, "autoload": { "files": [ diff --git a/packages/console/composer.json b/packages/console/composer.json index ce53de888..214e4846b 100644 --- a/packages/console/composer.json +++ b/packages/console/composer.json @@ -5,16 +5,16 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/cache": "dev-main", - "tempest/core": "dev-main", - "tempest/container": "dev-main", - "tempest/debug": "dev-main", - "tempest/generation": "dev-main", + "tempest/cache": "2.14.0", + "tempest/core": "2.14.0", + "tempest/container": "2.14.0", + "tempest/debug": "2.14.0", + "tempest/generation": "2.14.0", "tempest/highlight": "^2.11.4", - "tempest/log": "dev-main", - "tempest/reflection": "dev-main", - "tempest/support": "dev-main", - "tempest/validation": "dev-main", + "tempest/log": "2.14.0", + "tempest/reflection": "2.14.0", + "tempest/support": "2.14.0", + "tempest/validation": "2.14.0", "ext-readline": "*" }, "suggest": { diff --git a/packages/container/composer.json b/packages/container/composer.json index 3897d3cce..995ed62ef 100644 --- a/packages/container/composer.json +++ b/packages/container/composer.json @@ -5,7 +5,7 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "dev-main" + "tempest/reflection": "2.14.0" }, "autoload": { "files": [ diff --git a/packages/core/composer.json b/packages/core/composer.json index 226b393e2..b4e5c350c 100644 --- a/packages/core/composer.json +++ b/packages/core/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "dev-main", - "tempest/discovery": "dev-main", - "tempest/reflection": "dev-main", - "tempest/support": "dev-main", + "tempest/container": "2.14.0", + "tempest/discovery": "2.14.0", + "tempest/reflection": "2.14.0", + "tempest/support": "2.14.0", "vlucas/phpdotenv": "^5.6.1", "symfony/cache": "^7.3", "filp/whoops": "^2.15" diff --git a/packages/core/src/Kernel.php b/packages/core/src/Kernel.php index 1ce183e2f..93d27adcf 100644 --- a/packages/core/src/Kernel.php +++ b/packages/core/src/Kernel.php @@ -8,7 +8,7 @@ interface Kernel { - public const string VERSION = '2.13.0'; + public const string VERSION = '2.14.0'; public string $root { get; diff --git a/packages/cryptography/composer.json b/packages/cryptography/composer.json index 40b072222..a1946d004 100644 --- a/packages/cryptography/composer.json +++ b/packages/cryptography/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "dev-main", - "tempest/support": "dev-main", - "tempest/clock": "dev-main" + "tempest/container": "2.14.0", + "tempest/support": "2.14.0", + "tempest/clock": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/database/composer.json b/packages/database/composer.json index 3fe7e0ba3..47288d8d6 100644 --- a/packages/database/composer.json +++ b/packages/database/composer.json @@ -6,11 +6,11 @@ "require": { "php": "^8.4", "ext-pdo": "*", - "tempest/container": "dev-main", - "tempest/event-bus": "dev-main", - "tempest/mapper": "dev-main", - "tempest/intl": "dev-main", - "tempest/support": "dev-main" + "tempest/container": "2.14.0", + "tempest/event-bus": "2.14.0", + "tempest/mapper": "2.14.0", + "tempest/intl": "2.14.0", + "tempest/support": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/datetime/composer.json b/packages/datetime/composer.json index 56661c111..8bd1635e4 100644 --- a/packages/datetime/composer.json +++ b/packages/datetime/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/intl": "dev-main", - "tempest/support": "dev-main" + "tempest/intl": "2.14.0", + "tempest/support": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/discovery/composer.json b/packages/discovery/composer.json index a8d380860..9573717e6 100644 --- a/packages/discovery/composer.json +++ b/packages/discovery/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "dev-main", - "tempest/support": "dev-main" + "tempest/reflection": "2.14.0", + "tempest/support": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/event-bus/composer.json b/packages/event-bus/composer.json index b80a1d824..9ddd2bf45 100644 --- a/packages/event-bus/composer.json +++ b/packages/event-bus/composer.json @@ -3,9 +3,9 @@ "description": "A lightweight event bus component designed to facilitate event-driven architecture and asynchronous message handling.", "require": { "php": "^8.4", - "tempest/core": "dev-main", - "tempest/container": "dev-main", - "tempest/reflection": "dev-main" + "tempest/core": "2.14.0", + "tempest/container": "2.14.0", + "tempest/reflection": "2.14.0" }, "autoload": { "files": [ diff --git a/packages/generation/composer.json b/packages/generation/composer.json index 549472d21..ca707b4fe 100644 --- a/packages/generation/composer.json +++ b/packages/generation/composer.json @@ -7,7 +7,7 @@ "php": "^8.4", "nette/php-generator": "^4.1.6", "nikic/php-parser": "^5.3", - "tempest/support": "dev-main" + "tempest/support": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/http-client/composer.json b/packages/http-client/composer.json index 578ce523e..d01267793 100644 --- a/packages/http-client/composer.json +++ b/packages/http-client/composer.json @@ -7,9 +7,9 @@ "php": "^8.4", "psr/http-client": "^1.0.0", "psr/http-message": "^1.0|^2.0", - "tempest/container": "dev-main", - "tempest/http": "dev-main", - "tempest/router": "dev-main", + "tempest/container": "2.14.0", + "tempest/http": "2.14.0", + "tempest/router": "2.14.0", "psr-discovery/http-client-implementations": "^1.4", "psr-discovery/http-factory-implementations": "^1.2" }, diff --git a/packages/http/composer.json b/packages/http/composer.json index 17700a16e..4624cc6b0 100644 --- a/packages/http/composer.json +++ b/packages/http/composer.json @@ -5,12 +5,12 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/core": "dev-main", - "tempest/clock": "dev-main", - "tempest/console": "dev-main", - "tempest/mapper": "dev-main", - "tempest/container": "dev-main", - "tempest/cryptography": "dev-main", + "tempest/core": "2.14.0", + "tempest/clock": "2.14.0", + "tempest/console": "2.14.0", + "tempest/mapper": "2.14.0", + "tempest/container": "2.14.0", + "tempest/cryptography": "2.14.0", "laminas/laminas-diactoros": "^3.3", "psr/http-factory": "^1.0", "psr/http-message": "^1.0|^2.0", diff --git a/packages/icon/composer.json b/packages/icon/composer.json index 1bf22c13a..d41a3e2a6 100644 --- a/packages/icon/composer.json +++ b/packages/icon/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "dev-main", - "tempest/http-client": "dev-main", - "tempest/support": "dev-main", + "tempest/container": "2.14.0", + "tempest/http-client": "2.14.0", + "tempest/support": "2.14.0", "symfony/cache": "^7.3" }, "suggest": { diff --git a/packages/intl/composer.json b/packages/intl/composer.json index 4ff8ef769..4deb06917 100644 --- a/packages/intl/composer.json +++ b/packages/intl/composer.json @@ -7,9 +7,9 @@ "php": "^8.4", "doctrine/inflector": "^2.0", "symfony/yaml": "^7.3", - "tempest/core": "dev-main", - "tempest/container": "dev-main", - "tempest/support": "dev-main" + "tempest/core": "2.14.0", + "tempest/container": "2.14.0", + "tempest/support": "2.14.0" }, "suggest": { "tempest/datetime": "In order to use the `datetime` function", diff --git a/packages/kv-store/composer.json b/packages/kv-store/composer.json index 629555509..49e096808 100644 --- a/packages/kv-store/composer.json +++ b/packages/kv-store/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/support": "dev-main", - "tempest/datetime": "dev-main", - "tempest/event-bus": "dev-main" + "tempest/support": "2.14.0", + "tempest/datetime": "2.14.0", + "tempest/event-bus": "2.14.0" }, "require-dev": { "predis/predis": "^3.0.0" diff --git a/packages/log/composer.json b/packages/log/composer.json index bc0a48a29..c5cf72b18 100644 --- a/packages/log/composer.json +++ b/packages/log/composer.json @@ -7,7 +7,7 @@ "php": "^8.4", "monolog/monolog": "^3.7.0", "psr/log": "^3.0.0", - "tempest/container": "dev-main" + "tempest/container": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/mail/composer.json b/packages/mail/composer.json index b67757b3d..6fd1850aa 100644 --- a/packages/mail/composer.json +++ b/packages/mail/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "dev-main", - "tempest/support": "dev-main", - "tempest/event-bus": "dev-main", + "tempest/reflection": "2.14.0", + "tempest/support": "2.14.0", + "tempest/event-bus": "2.14.0", "symfony/mailer": "^7.2.6" }, "require-dev": { diff --git a/packages/mapper/composer.json b/packages/mapper/composer.json index 679e0d251..7ca3430af 100644 --- a/packages/mapper/composer.json +++ b/packages/mapper/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/validation": "dev-main", - "tempest/core": "dev-main" + "tempest/validation": "2.14.0", + "tempest/core": "2.14.0" }, "autoload": { "files": [ diff --git a/packages/process/composer.json b/packages/process/composer.json index 97e073f3c..c73d8b528 100644 --- a/packages/process/composer.json +++ b/packages/process/composer.json @@ -6,9 +6,9 @@ "require": { "php": "^8.4", "symfony/process": "^7.3", - "tempest/container": "dev-main", - "tempest/support": "dev-main", - "tempest/datetime": "dev-main" + "tempest/container": "2.14.0", + "tempest/support": "2.14.0", + "tempest/datetime": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/router/composer.json b/packages/router/composer.json index cab9eb741..1bb4a484a 100644 --- a/packages/router/composer.json +++ b/packages/router/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/http": "dev-main", - "tempest/view": "dev-main", + "tempest/http": "2.14.0", + "tempest/view": "2.14.0", "tempest/highlight": "^2.11.4", "symfony/var-exporter": "^7.1" }, diff --git a/packages/storage/composer.json b/packages/storage/composer.json index 5fc1f61ac..e573cb35a 100644 --- a/packages/storage/composer.json +++ b/packages/storage/composer.json @@ -6,7 +6,7 @@ "require": { "php": "^8.4", "league/flysystem": "^3.29.1", - "tempest/container": "dev-main" + "tempest/container": "2.14.0" }, "require-dev": { "aws/aws-sdk-php": "^3.338.0", @@ -20,7 +20,7 @@ "league/flysystem-google-cloud-storage": "^3.25.1", "league/mime-type-detection": "^1.16", "microsoft/azure-storage-blob": "^1.5", - "tempest/support": "dev-main" + "tempest/support": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/support/composer.json b/packages/support/composer.json index 1c377e3e1..a91d9d4ab 100644 --- a/packages/support/composer.json +++ b/packages/support/composer.json @@ -5,7 +5,7 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "dev-main", + "tempest/container": "2.14.0", "voku/portable-ascii": "^2.0.3", "symfony/uid": "^7.1" }, diff --git a/packages/validation/composer.json b/packages/validation/composer.json index a04f34d07..411c50cfa 100644 --- a/packages/validation/composer.json +++ b/packages/validation/composer.json @@ -7,10 +7,10 @@ "php": "^8.4", "egulias/email-validator": "^4.0.2", "giggsey/libphonenumber-for-php-lite": "^9.0", - "tempest/reflection": "dev-main", - "tempest/support": "dev-main", - "tempest/intl": "dev-main", - "tempest/datetime": "dev-main" + "tempest/reflection": "2.14.0", + "tempest/support": "2.14.0", + "tempest/intl": "2.14.0", + "tempest/datetime": "2.14.0" }, "autoload": { "psr-4": { diff --git a/packages/view/composer.json b/packages/view/composer.json index e43cbe96f..c8ead9129 100644 --- a/packages/view/composer.json +++ b/packages/view/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/core": "dev-main", - "tempest/container": "dev-main", - "tempest/validation": "dev-main", - "tempest/clock": "dev-main", + "tempest/core": "2.14.0", + "tempest/container": "2.14.0", + "tempest/validation": "2.14.0", + "tempest/clock": "2.14.0", "league/commonmark": "^2.7", "symfony/cache": "^7.3" }, diff --git a/packages/vite-plugin-tempest/package.json b/packages/vite-plugin-tempest/package.json index 025f0f8a7..c6cedfbbd 100644 --- a/packages/vite-plugin-tempest/package.json +++ b/packages/vite-plugin-tempest/package.json @@ -1,7 +1,7 @@ { "name": "vite-plugin-tempest", "type": "module", - "version": "2.13.0", + "version": "2.14.0", "author": "Enzo Innocenzi", "license": "MIT", "sideEffects": false, From 16655b418204efff9de7e3e0b789aba0080f5652 Mon Sep 17 00:00:00 2001 From: brendt Date: Fri, 12 Dec 2025 09:09:53 +0100 Subject: [PATCH 4/8] chore: post-release clean up --- packages/auth/composer.json | 8 ++++---- packages/cache/composer.json | 10 +++++----- packages/clock/composer.json | 2 +- packages/command-bus/composer.json | 6 +++--- packages/console/composer.json | 18 +++++++++--------- packages/container/composer.json | 2 +- packages/core/composer.json | 8 ++++---- packages/cryptography/composer.json | 6 +++--- packages/database/composer.json | 10 +++++----- packages/datetime/composer.json | 4 ++-- packages/discovery/composer.json | 4 ++-- packages/event-bus/composer.json | 6 +++--- packages/generation/composer.json | 2 +- packages/http-client/composer.json | 6 +++--- packages/http/composer.json | 12 ++++++------ packages/icon/composer.json | 6 +++--- packages/intl/composer.json | 6 +++--- packages/kv-store/composer.json | 6 +++--- packages/log/composer.json | 2 +- packages/mail/composer.json | 6 +++--- packages/mapper/composer.json | 4 ++-- packages/process/composer.json | 6 +++--- packages/router/composer.json | 4 ++-- packages/storage/composer.json | 4 ++-- packages/support/composer.json | 2 +- packages/validation/composer.json | 8 ++++---- packages/view/composer.json | 8 ++++---- 27 files changed, 83 insertions(+), 83 deletions(-) diff --git a/packages/auth/composer.json b/packages/auth/composer.json index 47b574f1f..f530ffa19 100644 --- a/packages/auth/composer.json +++ b/packages/auth/composer.json @@ -3,10 +3,10 @@ "description": "A flexible authentication package for Tempest, providing authentication and authorization.", "require": { "php": "^8.4", - "tempest/core": "2.14.0", - "tempest/router": "2.14.0", - "tempest/database": "2.14.0", - "tempest/mapper": "2.14.0", + "tempest/core": "dev-main", + "tempest/router": "dev-main", + "tempest/database": "dev-main", + "tempest/mapper": "dev-main", "league/oauth2-client": "^2.8" }, "require-dev": { diff --git a/packages/cache/composer.json b/packages/cache/composer.json index bf78ef535..60ae7d905 100644 --- a/packages/cache/composer.json +++ b/packages/cache/composer.json @@ -5,13 +5,13 @@ "php": "^8.4", "psr/cache": "^3.0", "symfony/cache": "^7.3", - "tempest/core": "2.14.0", - "tempest/clock": "2.14.0", - "tempest/kv-store": "2.14.0", - "tempest/container": "2.14.0" + "tempest/core": "dev-main", + "tempest/clock": "dev-main", + "tempest/kv-store": "dev-main", + "tempest/container": "dev-main" }, "require-dev": { - "tempest/clock": "2.14.0" + "tempest/clock": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/clock/composer.json b/packages/clock/composer.json index 0f2cbfefc..f2272e073 100644 --- a/packages/clock/composer.json +++ b/packages/clock/composer.json @@ -4,7 +4,7 @@ "require": { "php": "^8.4", "psr/clock": "^1.0.0", - "tempest/datetime": "2.14.0" + "tempest/datetime": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/command-bus/composer.json b/packages/command-bus/composer.json index bea476e79..5834601a0 100644 --- a/packages/command-bus/composer.json +++ b/packages/command-bus/composer.json @@ -3,9 +3,9 @@ "description": "A command bus component designed to dispatch commands to their respective handlers.", "require": { "php": "^8.4", - "tempest/core": "2.14.0", - "tempest/console": "2.14.0", - "tempest/container": "2.14.0" + "tempest/core": "dev-main", + "tempest/console": "dev-main", + "tempest/container": "dev-main" }, "autoload": { "files": [ diff --git a/packages/console/composer.json b/packages/console/composer.json index 214e4846b..ce53de888 100644 --- a/packages/console/composer.json +++ b/packages/console/composer.json @@ -5,16 +5,16 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/cache": "2.14.0", - "tempest/core": "2.14.0", - "tempest/container": "2.14.0", - "tempest/debug": "2.14.0", - "tempest/generation": "2.14.0", + "tempest/cache": "dev-main", + "tempest/core": "dev-main", + "tempest/container": "dev-main", + "tempest/debug": "dev-main", + "tempest/generation": "dev-main", "tempest/highlight": "^2.11.4", - "tempest/log": "2.14.0", - "tempest/reflection": "2.14.0", - "tempest/support": "2.14.0", - "tempest/validation": "2.14.0", + "tempest/log": "dev-main", + "tempest/reflection": "dev-main", + "tempest/support": "dev-main", + "tempest/validation": "dev-main", "ext-readline": "*" }, "suggest": { diff --git a/packages/container/composer.json b/packages/container/composer.json index 995ed62ef..3897d3cce 100644 --- a/packages/container/composer.json +++ b/packages/container/composer.json @@ -5,7 +5,7 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "2.14.0" + "tempest/reflection": "dev-main" }, "autoload": { "files": [ diff --git a/packages/core/composer.json b/packages/core/composer.json index b4e5c350c..226b393e2 100644 --- a/packages/core/composer.json +++ b/packages/core/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "2.14.0", - "tempest/discovery": "2.14.0", - "tempest/reflection": "2.14.0", - "tempest/support": "2.14.0", + "tempest/container": "dev-main", + "tempest/discovery": "dev-main", + "tempest/reflection": "dev-main", + "tempest/support": "dev-main", "vlucas/phpdotenv": "^5.6.1", "symfony/cache": "^7.3", "filp/whoops": "^2.15" diff --git a/packages/cryptography/composer.json b/packages/cryptography/composer.json index a1946d004..40b072222 100644 --- a/packages/cryptography/composer.json +++ b/packages/cryptography/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "2.14.0", - "tempest/support": "2.14.0", - "tempest/clock": "2.14.0" + "tempest/container": "dev-main", + "tempest/support": "dev-main", + "tempest/clock": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/database/composer.json b/packages/database/composer.json index 47288d8d6..3fe7e0ba3 100644 --- a/packages/database/composer.json +++ b/packages/database/composer.json @@ -6,11 +6,11 @@ "require": { "php": "^8.4", "ext-pdo": "*", - "tempest/container": "2.14.0", - "tempest/event-bus": "2.14.0", - "tempest/mapper": "2.14.0", - "tempest/intl": "2.14.0", - "tempest/support": "2.14.0" + "tempest/container": "dev-main", + "tempest/event-bus": "dev-main", + "tempest/mapper": "dev-main", + "tempest/intl": "dev-main", + "tempest/support": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/datetime/composer.json b/packages/datetime/composer.json index 8bd1635e4..56661c111 100644 --- a/packages/datetime/composer.json +++ b/packages/datetime/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/intl": "2.14.0", - "tempest/support": "2.14.0" + "tempest/intl": "dev-main", + "tempest/support": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/discovery/composer.json b/packages/discovery/composer.json index 9573717e6..a8d380860 100644 --- a/packages/discovery/composer.json +++ b/packages/discovery/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "2.14.0", - "tempest/support": "2.14.0" + "tempest/reflection": "dev-main", + "tempest/support": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/event-bus/composer.json b/packages/event-bus/composer.json index 9ddd2bf45..b80a1d824 100644 --- a/packages/event-bus/composer.json +++ b/packages/event-bus/composer.json @@ -3,9 +3,9 @@ "description": "A lightweight event bus component designed to facilitate event-driven architecture and asynchronous message handling.", "require": { "php": "^8.4", - "tempest/core": "2.14.0", - "tempest/container": "2.14.0", - "tempest/reflection": "2.14.0" + "tempest/core": "dev-main", + "tempest/container": "dev-main", + "tempest/reflection": "dev-main" }, "autoload": { "files": [ diff --git a/packages/generation/composer.json b/packages/generation/composer.json index ca707b4fe..549472d21 100644 --- a/packages/generation/composer.json +++ b/packages/generation/composer.json @@ -7,7 +7,7 @@ "php": "^8.4", "nette/php-generator": "^4.1.6", "nikic/php-parser": "^5.3", - "tempest/support": "2.14.0" + "tempest/support": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/http-client/composer.json b/packages/http-client/composer.json index d01267793..578ce523e 100644 --- a/packages/http-client/composer.json +++ b/packages/http-client/composer.json @@ -7,9 +7,9 @@ "php": "^8.4", "psr/http-client": "^1.0.0", "psr/http-message": "^1.0|^2.0", - "tempest/container": "2.14.0", - "tempest/http": "2.14.0", - "tempest/router": "2.14.0", + "tempest/container": "dev-main", + "tempest/http": "dev-main", + "tempest/router": "dev-main", "psr-discovery/http-client-implementations": "^1.4", "psr-discovery/http-factory-implementations": "^1.2" }, diff --git a/packages/http/composer.json b/packages/http/composer.json index 4624cc6b0..17700a16e 100644 --- a/packages/http/composer.json +++ b/packages/http/composer.json @@ -5,12 +5,12 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/core": "2.14.0", - "tempest/clock": "2.14.0", - "tempest/console": "2.14.0", - "tempest/mapper": "2.14.0", - "tempest/container": "2.14.0", - "tempest/cryptography": "2.14.0", + "tempest/core": "dev-main", + "tempest/clock": "dev-main", + "tempest/console": "dev-main", + "tempest/mapper": "dev-main", + "tempest/container": "dev-main", + "tempest/cryptography": "dev-main", "laminas/laminas-diactoros": "^3.3", "psr/http-factory": "^1.0", "psr/http-message": "^1.0|^2.0", diff --git a/packages/icon/composer.json b/packages/icon/composer.json index d41a3e2a6..1bf22c13a 100644 --- a/packages/icon/composer.json +++ b/packages/icon/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "2.14.0", - "tempest/http-client": "2.14.0", - "tempest/support": "2.14.0", + "tempest/container": "dev-main", + "tempest/http-client": "dev-main", + "tempest/support": "dev-main", "symfony/cache": "^7.3" }, "suggest": { diff --git a/packages/intl/composer.json b/packages/intl/composer.json index 4deb06917..4ff8ef769 100644 --- a/packages/intl/composer.json +++ b/packages/intl/composer.json @@ -7,9 +7,9 @@ "php": "^8.4", "doctrine/inflector": "^2.0", "symfony/yaml": "^7.3", - "tempest/core": "2.14.0", - "tempest/container": "2.14.0", - "tempest/support": "2.14.0" + "tempest/core": "dev-main", + "tempest/container": "dev-main", + "tempest/support": "dev-main" }, "suggest": { "tempest/datetime": "In order to use the `datetime` function", diff --git a/packages/kv-store/composer.json b/packages/kv-store/composer.json index 49e096808..629555509 100644 --- a/packages/kv-store/composer.json +++ b/packages/kv-store/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/support": "2.14.0", - "tempest/datetime": "2.14.0", - "tempest/event-bus": "2.14.0" + "tempest/support": "dev-main", + "tempest/datetime": "dev-main", + "tempest/event-bus": "dev-main" }, "require-dev": { "predis/predis": "^3.0.0" diff --git a/packages/log/composer.json b/packages/log/composer.json index c5cf72b18..bc0a48a29 100644 --- a/packages/log/composer.json +++ b/packages/log/composer.json @@ -7,7 +7,7 @@ "php": "^8.4", "monolog/monolog": "^3.7.0", "psr/log": "^3.0.0", - "tempest/container": "2.14.0" + "tempest/container": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/mail/composer.json b/packages/mail/composer.json index 6fd1850aa..b67757b3d 100644 --- a/packages/mail/composer.json +++ b/packages/mail/composer.json @@ -5,9 +5,9 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/reflection": "2.14.0", - "tempest/support": "2.14.0", - "tempest/event-bus": "2.14.0", + "tempest/reflection": "dev-main", + "tempest/support": "dev-main", + "tempest/event-bus": "dev-main", "symfony/mailer": "^7.2.6" }, "require-dev": { diff --git a/packages/mapper/composer.json b/packages/mapper/composer.json index 7ca3430af..679e0d251 100644 --- a/packages/mapper/composer.json +++ b/packages/mapper/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/validation": "2.14.0", - "tempest/core": "2.14.0" + "tempest/validation": "dev-main", + "tempest/core": "dev-main" }, "autoload": { "files": [ diff --git a/packages/process/composer.json b/packages/process/composer.json index c73d8b528..97e073f3c 100644 --- a/packages/process/composer.json +++ b/packages/process/composer.json @@ -6,9 +6,9 @@ "require": { "php": "^8.4", "symfony/process": "^7.3", - "tempest/container": "2.14.0", - "tempest/support": "2.14.0", - "tempest/datetime": "2.14.0" + "tempest/container": "dev-main", + "tempest/support": "dev-main", + "tempest/datetime": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/router/composer.json b/packages/router/composer.json index 1bb4a484a..cab9eb741 100644 --- a/packages/router/composer.json +++ b/packages/router/composer.json @@ -5,8 +5,8 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/http": "2.14.0", - "tempest/view": "2.14.0", + "tempest/http": "dev-main", + "tempest/view": "dev-main", "tempest/highlight": "^2.11.4", "symfony/var-exporter": "^7.1" }, diff --git a/packages/storage/composer.json b/packages/storage/composer.json index e573cb35a..5fc1f61ac 100644 --- a/packages/storage/composer.json +++ b/packages/storage/composer.json @@ -6,7 +6,7 @@ "require": { "php": "^8.4", "league/flysystem": "^3.29.1", - "tempest/container": "2.14.0" + "tempest/container": "dev-main" }, "require-dev": { "aws/aws-sdk-php": "^3.338.0", @@ -20,7 +20,7 @@ "league/flysystem-google-cloud-storage": "^3.25.1", "league/mime-type-detection": "^1.16", "microsoft/azure-storage-blob": "^1.5", - "tempest/support": "2.14.0" + "tempest/support": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/support/composer.json b/packages/support/composer.json index a91d9d4ab..1c377e3e1 100644 --- a/packages/support/composer.json +++ b/packages/support/composer.json @@ -5,7 +5,7 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/container": "2.14.0", + "tempest/container": "dev-main", "voku/portable-ascii": "^2.0.3", "symfony/uid": "^7.1" }, diff --git a/packages/validation/composer.json b/packages/validation/composer.json index 411c50cfa..a04f34d07 100644 --- a/packages/validation/composer.json +++ b/packages/validation/composer.json @@ -7,10 +7,10 @@ "php": "^8.4", "egulias/email-validator": "^4.0.2", "giggsey/libphonenumber-for-php-lite": "^9.0", - "tempest/reflection": "2.14.0", - "tempest/support": "2.14.0", - "tempest/intl": "2.14.0", - "tempest/datetime": "2.14.0" + "tempest/reflection": "dev-main", + "tempest/support": "dev-main", + "tempest/intl": "dev-main", + "tempest/datetime": "dev-main" }, "autoload": { "psr-4": { diff --git a/packages/view/composer.json b/packages/view/composer.json index c8ead9129..e43cbe96f 100644 --- a/packages/view/composer.json +++ b/packages/view/composer.json @@ -5,10 +5,10 @@ "minimum-stability": "dev", "require": { "php": "^8.4", - "tempest/core": "2.14.0", - "tempest/container": "2.14.0", - "tempest/validation": "2.14.0", - "tempest/clock": "2.14.0", + "tempest/core": "dev-main", + "tempest/container": "dev-main", + "tempest/validation": "dev-main", + "tempest/clock": "dev-main", "league/commonmark": "^2.7", "symfony/cache": "^7.3" }, From 32165fb4f5f15737cc744c085760c3a0700b5246 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 Dec 2025 16:30:24 +0100 Subject: [PATCH 5/8] fix(view): simplify getAttribute to not fallback to :prefix --- packages/view/src/Elements/IsElement.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/view/src/Elements/IsElement.php b/packages/view/src/Elements/IsElement.php index 5e31977e8..839b7944a 100644 --- a/packages/view/src/Elements/IsElement.php +++ b/packages/view/src/Elements/IsElement.php @@ -60,11 +60,7 @@ public function getAttribute(string $name): ?string { $attributes = $this->getAttributes(); - $originalName = $name; - - $name = ltrim($name, ':'); - - return $attributes[$originalName] ?? $this->attributes[":{$name}"] ?? $this->attributes[$name] ?? null; + return $attributes[$name] ?? null; } public function setAttribute(string $name, string $value): self From 2664e73fa434982f0034bf740534b8ebbf0cfe55 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 Dec 2025 16:30:30 +0100 Subject: [PATCH 6/8] feat(view): support expression attribute fallthrough --- .../src/Elements/ViewComponentElement.php | 123 +++++++++++------- .../view/tests/FallthroughAttributesTest.php | 4 - .../view/tests/Fixtures/fallthrough.view.php | 8 +- .../x-fallthrough-dynamic-test.view.php | 2 +- .../Fixtures/x-fallthrough-test.view.php | 2 +- 5 files changed, 84 insertions(+), 55 deletions(-) diff --git a/packages/view/src/Elements/ViewComponentElement.php b/packages/view/src/Elements/ViewComponentElement.php index 85f97735e..92a8e3410 100644 --- a/packages/view/src/Elements/ViewComponentElement.php +++ b/packages/view/src/Elements/ViewComponentElement.php @@ -40,7 +40,9 @@ public function __construct( array $attributes, ) { $this->attributes = $attributes; - $this->viewComponentAttributes = arr($attributes); + + $this->viewComponentAttributes = arr($attributes) + ->mapWithKeys(fn (string $value, string $key) => yield str($key)->ltrim(':')->toString() => $value); $this->dataAttributes = arr($attributes) ->filter(fn (string $_, string $key) => ! str_starts_with($key, ':')) @@ -96,50 +98,10 @@ public function compile(): string $compiled = str($this->viewComponent->contents); - // Fallthrough attributes - $compiled = $compiled - ->replaceRegex( - regex: '/^<(?[\w-]+)(.*?["\s])?>/', // Match the very first opening tag, this will never fail. - replace: function ($matches) { - /** @var \Tempest\View\Parser\Token $token */ - $token = TempestViewParser::ast($matches[0])[0]; - - $attributes = arr($token->htmlAttributes)->map(fn (string $value) => new MutableString($value)); - - foreach (['class', 'style', 'id'] as $attributeName) { - if (! isset($this->dataAttributes[$attributeName])) { - continue; - } - - $attributes[$attributeName] ??= new MutableString(); - - if ($attributeName === 'id') { - $attributes[$attributeName] = new MutableString(' ' . $this->dataAttributes[$attributeName]); - } else { - $attributes[$attributeName]->append(' ' . $this->dataAttributes[$attributeName]); - } - } + $compiled = $this->applyFallthroughAttributes($compiled); - return sprintf( - '<%s%s>', - $matches['tag'], - $attributes - ->map(function (MutableString $value, string $key) { - return sprintf('%s="%s"', $key, $value->trim()); - }) - ->implode(' ') - ->when( - fn (ImmutableString $string) => $string->isNotEmpty(), - fn (ImmutableString $string) => $string->prepend(' '), - ), - ); - }, - ); - - // Add scoped variables $compiled = $compiled ->prepend( - // Open the current scope sprintf( '', $this->dataAttributes->isNotEmpty() ? ', ' . $this->dataAttributes->map(fn (string $_value, string $key) => "\${$key}")->implode(', ') : '', @@ -148,10 +110,9 @@ public function compile(): string ), ) ->append( - // Close and call the current scope sprintf( 'currentView?->data ?? []) %s %s) ?>', - ViewObjectExporter::export($this->viewComponentAttributes), + $this->exportAttributesArray(), ViewObjectExporter::export($slots), $this->scopedVariables->isNotEmpty() ? $this->scopedVariables->map(fn (string $name) => "'{$name}' => \${$name}")->implode(', ') @@ -165,7 +126,6 @@ public function compile(): string ), ); - // Compile slots $compiled = $compiled->replaceRegex( regex: '/[\w-]+)")?((\s*\/>)|>(?(.|\n)*?)<\/x-slot>)/', replace: function ($matches) use ($slots) { @@ -222,4 +182,77 @@ private function getSlotElement(string $name): SlotElement|CollectionElement|nul return null; } + + private function applyFallthroughAttributes(ImmutableString $compiled): ImmutableString + { + return $compiled->replaceRegex( + regex: '/^<(?[\w-]+)(.*?["\s])?>/', + replace: function (array $matches): string { + /** @var Token $token */ + $token = TempestViewParser::ast($matches[0])[0]; + + $attributes = arr($token->htmlAttributes) + ->map(fn (string $value) => new MutableString($value)); + + foreach (['class', 'style', 'id'] as $name) { + $attributes = $this->applyFallthroughAttribute($attributes, $name); + } + + $attributeString = $attributes + ->map(fn (MutableString $value, string $key) => sprintf('%s="%s"', $key, $value->trim())) + ->implode(' ') + ->when( + fn (ImmutableString $s) => $s->isNotEmpty(), + fn (ImmutableString $s) => $s->prepend(' '), + ); + + return sprintf('<%s%s>', $matches['tag'], $attributeString); + }, + ); + } + + private function applyFallthroughAttribute(ImmutableArray $attributes, string $name): ImmutableArray + { + $hasDataAttribute = isset($this->dataAttributes[$name]); + $hasExpressionAttribute = isset($this->expressionAttributes[$name]); + + if (! $hasDataAttribute && ! $hasExpressionAttribute) { + return $attributes; + } + + $attributes[$name] ??= new MutableString(); + + if ($name === 'id') { + if ($hasDataAttribute) { + $attributes[$name] = new MutableString($this->dataAttributes[$name]); + } elseif ($hasExpressionAttribute) { + $attributes[$name] = new MutableString(sprintf('', $name)); + } + } else { + if ($hasDataAttribute) { + $attributes[$name]->append(' ' . $this->dataAttributes[$name]); + } + if ($hasExpressionAttribute) { + $attributes[$name]->append(sprintf(' ', $name)); + } + } + + return $attributes; + } + + private function exportAttributesArray(): string + { + $entries = []; + + foreach ($this->viewComponentAttributes as $key => $value) { + $camelKey = str($key)->camel()->toString(); + $isExpression = isset($this->expressionAttributes[$camelKey]); + + $entries[] = $isExpression + ? sprintf("'%s' => %s", $key, $value) + : sprintf("'%s' => %s", $key, ViewObjectExporter::exportValue($value)); + } + + return sprintf('new \%s([%s])', ImmutableArray::class, implode(', ', $entries)); + } } diff --git a/packages/view/tests/FallthroughAttributesTest.php b/packages/view/tests/FallthroughAttributesTest.php index 546c47aa1..ee655d1ff 100644 --- a/packages/view/tests/FallthroughAttributesTest.php +++ b/packages/view/tests/FallthroughAttributesTest.php @@ -3,11 +3,7 @@ namespace Tempest\View\Tests; use PHPUnit\Framework\TestCase; -use Tempest\View\Exceptions\ViewComponentPathWasInvalid; -use Tempest\View\Exceptions\ViewComponentPathWasNotFound; use Tempest\View\Renderers\TempestViewRenderer; -use Tempest\View\ViewCache; -use Tempest\View\ViewComponent; use Tempest\View\ViewConfig; use function Tempest\view; diff --git a/packages/view/tests/Fixtures/fallthrough.view.php b/packages/view/tests/Fixtures/fallthrough.view.php index 0eb074bcd..bdb7a7794 100644 --- a/packages/view/tests/Fixtures/fallthrough.view.php +++ b/packages/view/tests/Fixtures/fallthrough.view.php @@ -1,7 +1,7 @@ - - \ No newline at end of file + diff --git a/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php b/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php index d1a2d559a..1ccf85821 100644 --- a/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php +++ b/packages/view/tests/Fixtures/x-fallthrough-dynamic-test.view.php @@ -1 +1 @@ -
\ No newline at end of file +
diff --git a/packages/view/tests/Fixtures/x-fallthrough-test.view.php b/packages/view/tests/Fixtures/x-fallthrough-test.view.php index 85142b6f9..58d8adfe0 100644 --- a/packages/view/tests/Fixtures/x-fallthrough-test.view.php +++ b/packages/view/tests/Fixtures/x-fallthrough-test.view.php @@ -1 +1 @@ -
\ No newline at end of file +
From 98123b40e9a69d986b1febcd229e1438afc2b7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rk=20Magyar?= Date: Fri, 12 Dec 2025 20:05:47 +0100 Subject: [PATCH 7/8] fix(tests): use attribute Co-authored-by: Enzo Innocenzi --- packages/view/tests/FallthroughAttributesTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/view/tests/FallthroughAttributesTest.php b/packages/view/tests/FallthroughAttributesTest.php index ee655d1ff..ad873d212 100644 --- a/packages/view/tests/FallthroughAttributesTest.php +++ b/packages/view/tests/FallthroughAttributesTest.php @@ -10,7 +10,8 @@ final class FallthroughAttributesTest extends TestCase { - public function test_render(): void + #[Test] + public function render(): void { $viewConfig = new ViewConfig()->addViewComponents( __DIR__ . '/Fixtures/x-fallthrough-test.view.php', From 0a59b8c1952605571c4f70385e7e25eb50027a47 Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 14 Dec 2025 03:56:40 +0100 Subject: [PATCH 8/8] fix(tests): add missing import --- packages/view/tests/FallthroughAttributesTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/view/tests/FallthroughAttributesTest.php b/packages/view/tests/FallthroughAttributesTest.php index ad873d212..f68f7a25e 100644 --- a/packages/view/tests/FallthroughAttributesTest.php +++ b/packages/view/tests/FallthroughAttributesTest.php @@ -2,6 +2,7 @@ namespace Tempest\View\Tests; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Tempest\View\Renderers\TempestViewRenderer; use Tempest\View\ViewConfig;