From 7dd3bef23e8ad154fbc20775d59066c7218c5749 Mon Sep 17 00:00:00 2001 From: arturovt Date: Fri, 18 Jul 2025 00:36:54 +0300 Subject: [PATCH] fix(@angular/ssr): check whether injector is destroyed In this commit, we check whether the injector is destroyed before calling to `envInjector.get`. The application might be destroyed and `whenStable()` would resolve immediately; as thus, calling to `injector.get` is unsafe and should be guarded. --- packages/angular/ssr/src/utils/ng.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/angular/ssr/src/utils/ng.ts b/packages/angular/ssr/src/utils/ng.ts index b92aa51d1d84..72dc69f0916e 100644 --- a/packages/angular/ssr/src/utils/ng.ts +++ b/packages/angular/ssr/src/utils/ng.ts @@ -96,13 +96,15 @@ export async function renderAngular( // Block until application is stable. await applicationRef.whenStable(); + const { destroyed } = applicationRef; + // TODO(alanagius): Find a way to avoid rendering here especially for redirects as any output will be discarded. const envInjector = applicationRef.injector; - const routerIsProvided = !!envInjector.get(ActivatedRoute, null); - const router = envInjector.get(Router); - const lastSuccessfulNavigation = router.lastSuccessfulNavigation; + const routerIsProvided = destroyed ? false : !!envInjector.get(ActivatedRoute, null); + const router = destroyed ? null : envInjector.get(Router); + const lastSuccessfulNavigation = router?.lastSuccessfulNavigation; - if (!routerIsProvided) { + if (!router || !routerIsProvided) { hasNavigationError = false; } else if (lastSuccessfulNavigation?.finalUrl) { hasNavigationError = false;