Skip to content

Commit 0793c78

Browse files
committed
fix(@angular/ssr): ensure wildcard RenderMode is applied when no Angular routes are defined
This fix addresses a bug where, in the absence of defined Angular routes, the RenderMode was not correctly applied based on the wildcard setting. (cherry picked from commit 63722c3)
1 parent 306273a commit 0793c78

File tree

2 files changed

+36
-17
lines changed

2 files changed

+36
-17
lines changed

packages/angular/ssr/src/routes/ng-routes.ts

+22-17
Original file line numberDiff line numberDiff line change
@@ -411,26 +411,26 @@ export async function getRoutesFromAngularRouterConfig(
411411
injector.get(APP_BASE_HREF, null, { optional: true }) ??
412412
injector.get(PlatformLocation).getBaseHrefFromDOM();
413413

414-
if (router.config.length) {
415-
const compiler = injector.get(Compiler);
414+
const compiler = injector.get(Compiler);
416415

417-
const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true });
418-
let serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined;
416+
const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true });
417+
let serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined;
419418

420-
if (serverRoutesConfig) {
421-
const result = buildServerConfigRouteTree(serverRoutesConfig);
422-
serverConfigRouteTree = result.serverConfigRouteTree;
423-
errors.push(...result.errors);
424-
}
419+
if (serverRoutesConfig) {
420+
const result = buildServerConfigRouteTree(serverRoutesConfig);
421+
serverConfigRouteTree = result.serverConfigRouteTree;
422+
errors.push(...result.errors);
423+
}
425424

426-
if (errors.length) {
427-
return {
428-
baseHref,
429-
routes: routesResults,
430-
errors,
431-
};
432-
}
425+
if (errors.length) {
426+
return {
427+
baseHref,
428+
routes: routesResults,
429+
errors,
430+
};
431+
}
433432

433+
if (router.config.length) {
434434
// Retrieve all routes from the Angular router configuration.
435435
const traverseRoutes = traverseRoutesConfig({
436436
routes: router.config,
@@ -478,7 +478,12 @@ export async function getRoutesFromAngularRouterConfig(
478478
}
479479
}
480480
} else {
481-
routesResults.push({ route: '', renderMode: RenderMode.Prerender });
481+
const renderMode = serverConfigRouteTree?.match('')?.renderMode ?? RenderMode.Prerender;
482+
483+
routesResults.push({
484+
route: '',
485+
renderMode,
486+
});
482487
}
483488

484489
return {

packages/angular/ssr/test/routes/ng-routes_spec.ts

+14
Original file line numberDiff line numberDiff line change
@@ -361,4 +361,18 @@ describe('extractRoutesAndCreateRouteTree', () => {
361361
`Both 'home' and 'shell' routes have their 'renderMode' set to 'AppShell'.`,
362362
);
363363
});
364+
365+
it('should apply RenderMode matching the wildcard when no Angular routes are defined', async () => {
366+
setAngularAppTestingManifest([], [{ path: '**', renderMode: RenderMode.Server }]);
367+
368+
const { errors, routeTree } = await extractRoutesAndCreateRouteTree(
369+
url,
370+
/** manifest */ undefined,
371+
/** invokeGetPrerenderParams */ false,
372+
/** includePrerenderFallbackRoutes */ false,
373+
);
374+
375+
expect(errors).toHaveSize(0);
376+
expect(routeTree.toObject()).toEqual([{ route: '/', renderMode: RenderMode.Server }]);
377+
});
364378
});

0 commit comments

Comments
 (0)