From 912bf04e4ea35a3141b969f0bcf56d0e03aaed0c Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Mon, 8 Jun 2026 11:36:30 +0200 Subject: [PATCH 1/4] Respect blaze directive compile: false override --- src/Compiler/Compiler.php | 4 ++++ tests/Compiler/CompilerTest.php | 15 ++++++++++++++- tests/Folder/FolderTest.php | 12 ++++++++++++ tests/Memoizer/MemoizerTest.php | 11 +++++++++++ .../views/components/compile-false.blade.php | 3 +++ .../components/foldable/fold-false.blade.php | 3 +++ .../components/memoizable/memo-false.blade.php | 3 +++ 7 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/views/components/compile-false.blade.php create mode 100644 tests/fixtures/views/components/foldable/fold-false.blade.php create mode 100644 tests/fixtures/views/components/memoizable/memo-false.blade.php diff --git a/src/Compiler/Compiler.php b/src/Compiler/Compiler.php index f5251162..4d2354e3 100644 --- a/src/Compiler/Compiler.php +++ b/src/Compiler/Compiler.php @@ -62,6 +62,10 @@ public function compile(Node $node): Node */ protected function shouldCompile(ComponentSource $source): bool { + if ($source->directives->blaze('compile') === false) { + return false; + } + if ($source->directives->blaze()) { return true; } diff --git a/tests/Compiler/CompilerTest.php b/tests/Compiler/CompilerTest.php index 8d340960..3119e1bd 100644 --- a/tests/Compiler/CompilerTest.php +++ b/tests/Compiler/CompilerTest.php @@ -2,6 +2,8 @@ use Livewire\Blaze\Parser\Parser; use Livewire\Blaze\Compiler\Compiler; +use Livewire\Blaze\Config; +use Livewire\Blaze\Parser\Nodes\ComponentNode; use Livewire\Blaze\Support\Utils; test('compiles self-closing components', function () { @@ -76,4 +78,15 @@ 'popData(); ?> ', '', ])); -}); \ No newline at end of file +}); + +test('does not compile components with blaze directive override set to false', function () { + $input = ''; + + app(Config::class)->add(fixture_path('views/components')); + + $node = app(Parser::class)->parse($input)[0]; + $compiled = app(Compiler::class)->compile($node); + + expect($compiled)->toBeInstanceOf(ComponentNode::class); +}); diff --git a/tests/Folder/FolderTest.php b/tests/Folder/FolderTest.php index 4bb96d57..d2f7079f 100644 --- a/tests/Folder/FolderTest.php +++ b/tests/Folder/FolderTest.php @@ -247,6 +247,18 @@ expect($folded)->toBeInstanceOf(ComponentNode::class); }); +test('does not fold components with blaze directive override set to false', function () { + $input = ''; + + app(Config::class)->add(fixture_path('views/components/foldable'), fold: true); + + $node = app(Parser::class)->parse($input)[0]; + $compiled = app(Folder::class)->fold($node); + + expect($compiled)->toBeInstanceOf(ComponentNode::class); +}); + + test('folds components with no blaze directive if enabled in config', function () { $input = ''; diff --git a/tests/Memoizer/MemoizerTest.php b/tests/Memoizer/MemoizerTest.php index 3fcdff5e..67a13964 100644 --- a/tests/Memoizer/MemoizerTest.php +++ b/tests/Memoizer/MemoizerTest.php @@ -64,4 +64,15 @@ $memoized = app(Memoizer::class)->memoize($node); expect($memoized)->toBeInstanceOf(TextNode::class); +}); + +test('does not memoize components with blaze directive override set to false', function () { + $input = ''; + + app(Config::class)->add(fixture_path('views/components/memoizable'), memo: true); + + $node = app(Parser::class)->parse($input)[0]; + $compiled = app(Memoizer::class)->memoize($node); + + expect($compiled)->toBeInstanceOf(ComponentNode::class); }); \ No newline at end of file diff --git a/tests/fixtures/views/components/compile-false.blade.php b/tests/fixtures/views/components/compile-false.blade.php new file mode 100644 index 00000000..7cded334 --- /dev/null +++ b/tests/fixtures/views/components/compile-false.blade.php @@ -0,0 +1,3 @@ +@blaze(compile: false) + +
\ No newline at end of file diff --git a/tests/fixtures/views/components/foldable/fold-false.blade.php b/tests/fixtures/views/components/foldable/fold-false.blade.php new file mode 100644 index 00000000..dcd2fbbb --- /dev/null +++ b/tests/fixtures/views/components/foldable/fold-false.blade.php @@ -0,0 +1,3 @@ +@blaze(fold: false) + +
\ No newline at end of file diff --git a/tests/fixtures/views/components/memoizable/memo-false.blade.php b/tests/fixtures/views/components/memoizable/memo-false.blade.php new file mode 100644 index 00000000..2660be18 --- /dev/null +++ b/tests/fixtures/views/components/memoizable/memo-false.blade.php @@ -0,0 +1,3 @@ +@blaze(memo: false) + +
\ No newline at end of file From 58153186ec5cae968d9038d9e1e84afadbbf152c Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Mon, 8 Jun 2026 11:43:11 +0200 Subject: [PATCH 2/4] Refactor --- src/Compiler/Compiler.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Compiler/Compiler.php b/src/Compiler/Compiler.php index 4d2354e3..cb291e55 100644 --- a/src/Compiler/Compiler.php +++ b/src/Compiler/Compiler.php @@ -62,12 +62,8 @@ public function compile(Node $node): Node */ protected function shouldCompile(ComponentSource $source): bool { - if ($source->directives->blaze('compile') === false) { - return false; - } - if ($source->directives->blaze()) { - return true; + return $source->directives->blaze('compile') ?? true; } return $this->config->shouldCompile($source->path) From b7444c9304d13c543504fdeebec661815976b178 Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Mon, 8 Jun 2026 11:55:48 +0200 Subject: [PATCH 3/4] Throw on invalid blaze directive params --- src/Support/Utils.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Support/Utils.php b/src/Support/Utils.php index db7c20f3..a41266f3 100644 --- a/src/Support/Utils.php +++ b/src/Support/Utils.php @@ -15,7 +15,17 @@ class Utils */ public static function parseBlazeDirective(string $expression): array { - return BlazeDirective::parseParameters($expression); + $params = BlazeDirective::parseParameters($expression); + + if ($params['compile'] === false && $params['memo'] === true) { + throw new \InvalidArgumentException('Cannot set `memo: true` with `compile: false` in @blaze directive.'); + } + + if ($params['compile'] === false && $params['fold'] === true) { + throw new \InvalidArgumentException('Cannot set `fold: true` with `compile: false` in @blaze directive.'); + } + + return $params; } /** From e159754e1e0fc5a7becbbdc3829c54da62111efb Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Mon, 8 Jun 2026 11:57:20 +0200 Subject: [PATCH 4/4] Fix --- src/Support/Utils.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Support/Utils.php b/src/Support/Utils.php index a41266f3..266eab92 100644 --- a/src/Support/Utils.php +++ b/src/Support/Utils.php @@ -17,11 +17,11 @@ public static function parseBlazeDirective(string $expression): array { $params = BlazeDirective::parseParameters($expression); - if ($params['compile'] === false && $params['memo'] === true) { + if (data_get($params, 'compile', true) === false && data_get($params, 'memo', false) === true) { throw new \InvalidArgumentException('Cannot set `memo: true` with `compile: false` in @blaze directive.'); } - if ($params['compile'] === false && $params['fold'] === true) { + if (data_get($params, 'compile', true) === false && data_get($params, 'fold', false) === true) { throw new \InvalidArgumentException('Cannot set `fold: true` with `compile: false` in @blaze directive.'); }