From edf60c5b547791e640cdcccaff656ac0e53603b6 Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Wed, 29 Apr 2026 21:22:40 +0200 Subject: [PATCH 1/4] Handle missing compiled Blaze views --- src/BlazeManager.php | 14 ++++---------- src/FrontMatter.php | 10 ++++++++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/BlazeManager.php b/src/BlazeManager.php index 49e0f0c..d537034 100644 --- a/src/BlazeManager.php +++ b/src/BlazeManager.php @@ -289,19 +289,13 @@ public function viewContainsExpiredFrontMatter($view): bool $compiler = $engine->getCompiler(); $compiled = $compiler->getCompiledPath($path); - $expired = $compiler->isExpired($path); - - $isExpired = false; - - if (! $expired) { - $contents = file_get_contents($compiled); - $isExpired = (new FrontMatter)->sourceContainsExpiredFoldedDependencies($contents); - } + $expired = $compiler->isExpired($path); + $expired = $expired ? true : (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); - $this->expiredMemo[$path] = $isExpired; + $this->expiredMemo[$path] = $expired; - return $isExpired; + return $expired; } /** diff --git a/src/FrontMatter.php b/src/FrontMatter.php index abb7d99..88d13bc 100644 --- a/src/FrontMatter.php +++ b/src/FrontMatter.php @@ -28,10 +28,16 @@ public function compileFromEvents(array $events): string } /** - * Check if any folded component referenced in the source has been modified. + * Check if any folded component referenced in the compiled file has been modified. */ - public function sourceContainsExpiredFoldedDependencies(string $source): bool + public function sourceContainsExpiredFoldedDependencies(string $path): bool { + $source = @file_get_contents($path); + + if ($source === false) { + return true; + } + $foldedComponents = $this->parseFromTemplate($source); if (empty($foldedComponents)) { From 3bec0c79db23e31211fa5c496f2ee266e0e66ca7 Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Wed, 29 Apr 2026 21:32:25 +0200 Subject: [PATCH 2/4] Refactor --- src/BlazeManager.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/BlazeManager.php b/src/BlazeManager.php index d537034..6462f80 100644 --- a/src/BlazeManager.php +++ b/src/BlazeManager.php @@ -290,12 +290,9 @@ public function viewContainsExpiredFrontMatter($view): bool $compiler = $engine->getCompiler(); $compiled = $compiler->getCompiledPath($path); - $expired = $compiler->isExpired($path); - $expired = $expired ? true : (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); + $expired = $compiler->isExpired($path) ?: (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); - $this->expiredMemo[$path] = $expired; - - return $expired; + return $this->expiredMemo[$path] = $expired; } /** From d74b6d80d8eed4d6dd7158bfb34e981aa19b7f93 Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Wed, 29 Apr 2026 22:25:50 +0200 Subject: [PATCH 3/4] Fix --- src/BlazeManager.php | 5 ++--- src/FrontMatter.php | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/BlazeManager.php b/src/BlazeManager.php index 6462f80..b4cae6a 100644 --- a/src/BlazeManager.php +++ b/src/BlazeManager.php @@ -276,13 +276,12 @@ public function collectAndAppendFrontMatter($template, $callback) public function viewContainsExpiredFrontMatter($view): bool { $engine = $view->getEngine(); + $path = $view->getPath(); if (! $engine instanceof CompilerEngine) { return false; } - $path = $view->getPath(); - if (isset($this->expiredMemo[$path])) { return $this->expiredMemo[$path]; } @@ -290,7 +289,7 @@ public function viewContainsExpiredFrontMatter($view): bool $compiler = $engine->getCompiler(); $compiled = $compiler->getCompiledPath($path); - $expired = $compiler->isExpired($path) ?: (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); + $expired = $compiler->isExpired($path) ? false : (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); return $this->expiredMemo[$path] = $expired; } diff --git a/src/FrontMatter.php b/src/FrontMatter.php index 88d13bc..7bb5b59 100644 --- a/src/FrontMatter.php +++ b/src/FrontMatter.php @@ -35,7 +35,7 @@ public function sourceContainsExpiredFoldedDependencies(string $path): bool $source = @file_get_contents($path); if ($source === false) { - return true; + return false; } $foldedComponents = $this->parseFromTemplate($source); From 51f1f98eb632de60cd06832e1e0e6cd670716fa6 Mon Sep 17 00:00:00 2001 From: Filip Ganyicz Date: Wed, 29 Apr 2026 22:53:28 +0200 Subject: [PATCH 4/4] Add tests --- src/BlazeManager.php | 11 +++++------ src/FrontMatter.php | 2 +- tests/BlazeManagerTest.php | 29 ++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/BlazeManager.php b/src/BlazeManager.php index b4cae6a..eef12d8 100644 --- a/src/BlazeManager.php +++ b/src/BlazeManager.php @@ -278,18 +278,17 @@ public function viewContainsExpiredFrontMatter($view): bool $engine = $view->getEngine(); $path = $view->getPath(); - if (! $engine instanceof CompilerEngine) { - return false; - } - if (isset($this->expiredMemo[$path])) { return $this->expiredMemo[$path]; } + if (! $engine instanceof CompilerEngine) { + return $this->expiredMemo[$path] = false; + } + $compiler = $engine->getCompiler(); $compiled = $compiler->getCompiledPath($path); - - $expired = $compiler->isExpired($path) ? false : (new FrontMatter)->sourceContainsExpiredFoldedDependencies($compiled); + $expired = $compiler->isExpired($path) ? false : (new FrontMatter)->containsExpiredFoldedDependencies($compiled); return $this->expiredMemo[$path] = $expired; } diff --git a/src/FrontMatter.php b/src/FrontMatter.php index 7bb5b59..13f6636 100644 --- a/src/FrontMatter.php +++ b/src/FrontMatter.php @@ -30,7 +30,7 @@ public function compileFromEvents(array $events): string /** * Check if any folded component referenced in the compiled file has been modified. */ - public function sourceContainsExpiredFoldedDependencies(string $path): bool + public function containsExpiredFoldedDependencies(string $path): bool { $source = @file_get_contents($path); diff --git a/tests/BlazeManagerTest.php b/tests/BlazeManagerTest.php index 7ca06a6..52a5947 100644 --- a/tests/BlazeManagerTest.php +++ b/tests/BlazeManagerTest.php @@ -1,6 +1,10 @@ Artisan::call('view:clear')); test('compile preserves php directives', function () { $input = '@php /* uncompiled */ @endphp'; @@ -26,4 +30,27 @@ // compileForUnblaze should only store raw blocks, not restore them. // They will be restored in the parent compile() method. expect(Blaze::compileForUnblaze($input))->toBe('@__raw_block_0__@'); -}); \ No newline at end of file +}); + +test('viewContainsExpiredFrontMatter returns true when folded component source is updated', function () { + $component = fixture_path('views/components/foldable/input.blade.php'); + $modified = filemtime($component); + $manager = app(BlazeManager::class); + $view = view('blaze'); + + $view->render(); + $manager->flushState(); + + touch($component, $modified + 10); + + expect($manager->viewContainsExpiredFrontMatter($view))->toBeTrue(); + + touch($component, $modified); +}); + +test('viewContainsExpiredFrontMatter returns false when view isnt compiled', function () { + $manager = app(BlazeManager::class); + $view = view('blaze'); + + expect($manager->viewContainsExpiredFrontMatter($view))->toBeFalse(); +});