diff --git a/src/Compiler/Compiler.php b/src/Compiler/Compiler.php
index f5251162..cb291e55 100644
--- a/src/Compiler/Compiler.php
+++ b/src/Compiler/Compiler.php
@@ -63,7 +63,7 @@ public function compile(Node $node): Node
protected function shouldCompile(ComponentSource $source): bool
{
if ($source->directives->blaze()) {
- return true;
+ return $source->directives->blaze('compile') ?? true;
}
return $this->config->shouldCompile($source->path)
diff --git a/src/Support/Utils.php b/src/Support/Utils.php
index db7c20f3..266eab92 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 (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 (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.');
+ }
+
+ return $params;
}
/**
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