diff --git a/bootstrap/app.php b/bootstrap/app.php index c7d97bf..af4aed4 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -25,12 +25,14 @@ return Application::configure(basePath: dirname(__DIR__)) ]); }) ->withExceptions(function (Exceptions $exceptions) { - $exceptions->render(function (Throwable $e, Request $request) { - if (! preg_match('#^livewire-[a-f0-9]+/(?:css|js)/#', $request->path())) { - return null; + $isStaleLivewireAsset = function (Throwable $e, ?Request $request): bool { + if (! $request instanceof Request) { + return false; } - $message = $e->getMessage(); + if (! preg_match('#^livewire-[a-f0-9]+/(?:css|js)/#', $request->path())) { + return false; + } $stalePatterns = [ 'does not have a style source', @@ -42,11 +44,25 @@ return Application::configure(basePath: dirname(__DIR__)) ]; foreach ($stalePatterns as $pattern) { - if (str_contains($message, $pattern)) { - return response('', 404); + if (str_contains($e->getMessage(), $pattern)) { + return true; } } + return false; + }; + + $exceptions->report(function (Throwable $e) use ($isStaleLivewireAsset) { + if ($isStaleLivewireAsset($e, request())) { + return false; + } + }); + + $exceptions->render(function (Throwable $e, Request $request) use ($isStaleLivewireAsset) { + if ($isStaleLivewireAsset($e, $request)) { + return response('', 404); + } + return null; }); })->create(); diff --git a/tests/Feature/LivewireStaleAssetTest.php b/tests/Feature/LivewireStaleAssetTest.php index ddea720..0d3634e 100644 --- a/tests/Feature/LivewireStaleAssetTest.php +++ b/tests/Feature/LivewireStaleAssetTest.php @@ -1,5 +1,6 @@ assertNotFound(); }); +it('does not report stale livewire css module exceptions to the logs', function () { + Log::spy(); + + $prefix = EndpointResolver::prefix(); + + $this->get($prefix.'/css/meetups--landingpage.css?v=1502173559') + ->assertNotFound(); + + Log::shouldNotHaveReceived('error'); + Log::shouldNotHaveReceived('critical'); + Log::shouldNotHaveReceived('emergency'); +}); + it('returns 404 for stale livewire global css module urls', function () { $prefix = EndpointResolver::prefix();