@@ -93,21 +93,25 @@ interface AngularRouterConfigResult {
93
93
* @param options - The configuration options for traversing routes.
94
94
* @returns An async iterable iterator yielding either route tree node metadata or an error object with an error message.
95
95
*/
96
- async function * traverseRoutesConfig ( {
97
- routes,
98
- compiler,
99
- parentInjector,
100
- parentRoute,
101
- serverConfigRouteTree,
102
- invokeGetPrerenderParams,
103
- } : {
96
+ async function * traverseRoutesConfig ( options : {
104
97
routes : Route [ ] ;
105
98
compiler : Compiler ;
106
99
parentInjector : Injector ;
107
100
parentRoute : string ;
108
101
serverConfigRouteTree : RouteTree < ServerConfigRouteTreeAdditionalMetadata > | undefined ;
109
102
invokeGetPrerenderParams : boolean ;
103
+ includePrerenderFallbackRoutes : boolean ;
110
104
} ) : AsyncIterableIterator < RouteTreeNodeMetadata | { error : string } > {
105
+ const {
106
+ routes,
107
+ compiler,
108
+ parentInjector,
109
+ parentRoute,
110
+ serverConfigRouteTree,
111
+ invokeGetPrerenderParams,
112
+ includePrerenderFallbackRoutes,
113
+ } = options ;
114
+
111
115
for ( const route of routes ) {
112
116
try {
113
117
const { path = '' , redirectTo, loadChildren, children } = route ;
@@ -147,20 +151,22 @@ async function* traverseRoutesConfig({
147
151
yield { ...metadata , redirectTo : redirectToResolved } ;
148
152
} else if ( metadata . renderMode === RenderMode . Prerender ) {
149
153
// Handle SSG routes
150
- yield * handleSSGRoute ( metadata , parentInjector , invokeGetPrerenderParams ) ;
154
+ yield * handleSSGRoute (
155
+ metadata ,
156
+ parentInjector ,
157
+ invokeGetPrerenderParams ,
158
+ includePrerenderFallbackRoutes ,
159
+ ) ;
151
160
} else {
152
161
yield metadata ;
153
162
}
154
163
155
164
// Recursively process child routes
156
165
if ( children ?. length ) {
157
166
yield * traverseRoutesConfig ( {
167
+ ...options ,
158
168
routes : children ,
159
- compiler,
160
- parentInjector,
161
169
parentRoute : currentRoutePath ,
162
- serverConfigRouteTree,
163
- invokeGetPrerenderParams,
164
170
} ) ;
165
171
}
166
172
@@ -175,12 +181,10 @@ async function* traverseRoutesConfig({
175
181
if ( loadedChildRoutes ) {
176
182
const { routes : childRoutes , injector = parentInjector } = loadedChildRoutes ;
177
183
yield * traverseRoutesConfig ( {
184
+ ...options ,
178
185
routes : childRoutes ,
179
- compiler,
180
186
parentInjector : injector ,
181
187
parentRoute : currentRoutePath ,
182
- serverConfigRouteTree,
183
- invokeGetPrerenderParams,
184
188
} ) ;
185
189
}
186
190
}
@@ -197,12 +201,14 @@ async function* traverseRoutesConfig({
197
201
* @param metadata - The metadata associated with the route tree node.
198
202
* @param parentInjector - The dependency injection container for the parent route.
199
203
* @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function.
204
+ * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result.
200
205
* @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors.
201
206
*/
202
207
async function * handleSSGRoute (
203
208
metadata : ServerConfigRouteTreeNodeMetadata ,
204
209
parentInjector : Injector ,
205
210
invokeGetPrerenderParams : boolean ,
211
+ includePrerenderFallbackRoutes : boolean ,
206
212
) : AsyncIterableIterator < RouteTreeNodeMetadata | { error : string } > {
207
213
if ( metadata . renderMode !== RenderMode . Prerender ) {
208
214
throw new Error (
@@ -267,7 +273,10 @@ async function* handleSSGRoute(
267
273
}
268
274
269
275
// Handle fallback render modes
270
- if ( fallback !== PrerenderFallback . None || ! invokeGetPrerenderParams ) {
276
+ if (
277
+ includePrerenderFallbackRoutes &&
278
+ ( fallback !== PrerenderFallback . None || ! invokeGetPrerenderParams )
279
+ ) {
271
280
yield {
272
281
...meta ,
273
282
route : currentRoutePath ,
@@ -345,13 +354,16 @@ function buildServerConfigRouteTree(serverRoutesConfig: ServerRoute[]): {
345
354
* for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction.
346
355
* @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes
347
356
* to handle prerendering paths. Defaults to `false`.
357
+ * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`.
358
+ *
348
359
* @returns A promise that resolves to an object of type `AngularRouterConfigResult` or errors.
349
360
*/
350
361
export async function getRoutesFromAngularRouterConfig (
351
362
bootstrap : AngularBootstrap ,
352
363
document : string ,
353
364
url : URL ,
354
365
invokeGetPrerenderParams = false ,
366
+ includePrerenderFallbackRoutes = true ,
355
367
) : Promise < AngularRouterConfigResult > {
356
368
const { protocol, host } = url ;
357
369
@@ -418,6 +430,7 @@ export async function getRoutesFromAngularRouterConfig(
418
430
parentRoute : '' ,
419
431
serverConfigRouteTree,
420
432
invokeGetPrerenderParams,
433
+ includePrerenderFallbackRoutes,
421
434
} ) ;
422
435
423
436
for await ( const result of traverseRoutes ) {
@@ -454,6 +467,7 @@ export async function getRoutesFromAngularRouterConfig(
454
467
* If not provided, the default manifest is retrieved using `getAngularAppManifest()`.
455
468
* @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes
456
469
* to handle prerendering paths. Defaults to `false`.
470
+ * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`.
457
471
*
458
472
* @returns A promise that resolves to an object containing:
459
473
* - `routeTree`: A populated `RouteTree` containing all extracted routes from the Angular application.
@@ -463,6 +477,7 @@ export async function extractRoutesAndCreateRouteTree(
463
477
url : URL ,
464
478
manifest : AngularAppManifest = getAngularAppManifest ( ) ,
465
479
invokeGetPrerenderParams = false ,
480
+ includePrerenderFallbackRoutes = true ,
466
481
) : Promise < { routeTree : RouteTree ; errors : string [ ] } > {
467
482
const routeTree = new RouteTree ( ) ;
468
483
const document = await new ServerAssets ( manifest ) . getIndexServerHtml ( ) ;
@@ -472,6 +487,7 @@ export async function extractRoutesAndCreateRouteTree(
472
487
document ,
473
488
url ,
474
489
invokeGetPrerenderParams ,
490
+ includePrerenderFallbackRoutes ,
475
491
) ;
476
492
477
493
for ( const { route, ...metadata } of routes ) {
0 commit comments