Skip to content

Commit

Permalink
fix(@angular/ssr): ensure wildcard RenderMode is applied when no Angu…
Browse files Browse the repository at this point in the history
…lar 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)
  • Loading branch information
alan-agius4 committed Oct 28, 2024
1 parent 306273a commit 0793c78
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 17 deletions.
39 changes: 22 additions & 17 deletions packages/angular/ssr/src/routes/ng-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,26 +411,26 @@ export async function getRoutesFromAngularRouterConfig(
injector.get(APP_BASE_HREF, null, { optional: true }) ??
injector.get(PlatformLocation).getBaseHrefFromDOM();

if (router.config.length) {
const compiler = injector.get(Compiler);
const compiler = injector.get(Compiler);

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

if (serverRoutesConfig) {
const result = buildServerConfigRouteTree(serverRoutesConfig);
serverConfigRouteTree = result.serverConfigRouteTree;
errors.push(...result.errors);
}
if (serverRoutesConfig) {
const result = buildServerConfigRouteTree(serverRoutesConfig);
serverConfigRouteTree = result.serverConfigRouteTree;
errors.push(...result.errors);
}

if (errors.length) {
return {
baseHref,
routes: routesResults,
errors,
};
}
if (errors.length) {
return {
baseHref,
routes: routesResults,
errors,
};
}

if (router.config.length) {
// Retrieve all routes from the Angular router configuration.
const traverseRoutes = traverseRoutesConfig({
routes: router.config,
Expand Down Expand Up @@ -478,7 +478,12 @@ export async function getRoutesFromAngularRouterConfig(
}
}
} else {
routesResults.push({ route: '', renderMode: RenderMode.Prerender });
const renderMode = serverConfigRouteTree?.match('')?.renderMode ?? RenderMode.Prerender;

routesResults.push({
route: '',
renderMode,
});
}

return {
Expand Down
14 changes: 14 additions & 0 deletions packages/angular/ssr/test/routes/ng-routes_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,18 @@ describe('extractRoutesAndCreateRouteTree', () => {
`Both 'home' and 'shell' routes have their 'renderMode' set to 'AppShell'.`,
);
});

it('should apply RenderMode matching the wildcard when no Angular routes are defined', async () => {
setAngularAppTestingManifest([], [{ path: '**', renderMode: RenderMode.Server }]);

const { errors, routeTree } = await extractRoutesAndCreateRouteTree(
url,
/** manifest */ undefined,
/** invokeGetPrerenderParams */ false,
/** includePrerenderFallbackRoutes */ false,
);

expect(errors).toHaveSize(0);
expect(routeTree.toObject()).toEqual([{ route: '/', renderMode: RenderMode.Server }]);
});
});

0 comments on commit 0793c78

Please sign in to comment.