@@ -68,12 +68,12 @@ describe('extractRoutesAndCreateRouteTree', () => {
68
68
) ;
69
69
} ) ;
70
70
71
- it ( "should error when 'getPrerenderParams' is used with a '** ' route" , async ( ) => {
71
+ it ( "should error when 'getPrerenderParams' is used with a '*' route" , async ( ) => {
72
72
setAngularAppTestingManifest (
73
- [ { path : 'home ' , component : DummyComponent } ] ,
73
+ [ { path : 'invalid/:id ' , component : DummyComponent } ] ,
74
74
[
75
75
{
76
- path : '* *' ,
76
+ path : 'invalid/ *' ,
77
77
renderMode : RenderMode . Prerender ,
78
78
getPrerenderParams ( ) {
79
79
return Promise . resolve ( [ ] ) ;
@@ -84,27 +84,54 @@ describe('extractRoutesAndCreateRouteTree', () => {
84
84
85
85
const { errors } = await extractRoutesAndCreateRouteTree ( { url } ) ;
86
86
expect ( errors [ 0 ] ) . toContain (
87
- "Invalid '** ' route configuration: 'getPrerenderParams' cannot be used with a '*' or '* *' route." ,
87
+ "Invalid 'invalid/* ' route configuration: 'getPrerenderParams' cannot be used with a '*' route." ,
88
88
) ;
89
89
} ) ;
90
90
91
- it ( "should error when 'getPrerenderParams' is used with a '* ' route" , async ( ) => {
91
+ it ( "should throw an error when 'getPrerenderParams' returns an array for a parameterized ':param ' route" , async ( ) => {
92
92
setAngularAppTestingManifest (
93
93
[ { path : 'invalid/:id' , component : DummyComponent } ] ,
94
94
[
95
95
{
96
- path : 'invalid/* ' ,
96
+ path : 'invalid/:param ' ,
97
97
renderMode : RenderMode . Prerender ,
98
- getPrerenderParams ( ) {
99
- return Promise . resolve ( [ ] ) ;
98
+ async getPrerenderParams ( ) {
99
+ return [ [ '1' ] ] ;
100
100
} ,
101
101
} ,
102
102
] ,
103
103
) ;
104
104
105
- const { errors } = await extractRoutesAndCreateRouteTree ( { url } ) ;
105
+ const { errors } = await extractRoutesAndCreateRouteTree ( {
106
+ url,
107
+ invokeGetPrerenderParams : true ,
108
+ } ) ;
109
+ expect ( errors [ 0 ] ) . toContain (
110
+ `The 'getPrerenderParams' function for the 'invalid/:id' route returned an array '["1"]', which is not valid for catch-all routes.` ,
111
+ ) ;
112
+ } ) ;
113
+
114
+ it ( "should throw an error when 'getPrerenderParams' returns an object for a parameterized catch-all route" , async ( ) => {
115
+ setAngularAppTestingManifest (
116
+ [ { path : 'invalid/**' , component : DummyComponent } ] ,
117
+ [
118
+ {
119
+ path : 'invalid/**' ,
120
+ renderMode : RenderMode . Prerender ,
121
+ async getPrerenderParams ( ) {
122
+ return [ { param : '1' } ] ;
123
+ } ,
124
+ } ,
125
+ ] ,
126
+ ) ;
127
+
128
+ const { errors } = await extractRoutesAndCreateRouteTree ( {
129
+ url,
130
+ invokeGetPrerenderParams : true ,
131
+ } ) ;
106
132
expect ( errors [ 0 ] ) . toContain (
107
- "Invalid 'invalid/*' route configuration: 'getPrerenderParams' cannot be used with a '*' or '**' route." ,
133
+ `The 'getPrerenderParams' function for the 'invalid/**' route returned an object '{"param":"1"}'` +
134
+ `, which is not valid for parameterized routes.` ,
108
135
) ;
109
136
} ) ;
110
137
@@ -259,7 +286,7 @@ describe('extractRoutesAndCreateRouteTree', () => {
259
286
] ) ;
260
287
} ) ;
261
288
262
- it ( 'should resolve parameterized routes for SSG and not add a fallback route if fallback is None ' , async ( ) => {
289
+ it ( 'should resolve parameterized routes for SSG add a fallback route if fallback is Server ' , async ( ) => {
263
290
setAngularAppTestingManifest (
264
291
[
265
292
{ path : 'home' , component : DummyComponent } ,
@@ -296,6 +323,44 @@ describe('extractRoutesAndCreateRouteTree', () => {
296
323
] ) ;
297
324
} ) ;
298
325
326
+ it ( 'should resolve catch all routes for SSG and not add a fallback route if fallback is Server' , async ( ) => {
327
+ setAngularAppTestingManifest (
328
+ [
329
+ { path : 'home' , component : DummyComponent } ,
330
+ { path : 'user/**' , component : DummyComponent } ,
331
+ ] ,
332
+ [
333
+ {
334
+ path : 'user/**' ,
335
+ renderMode : RenderMode . Prerender ,
336
+ fallback : PrerenderFallback . Server ,
337
+ async getPrerenderParams ( ) {
338
+ return [
339
+ [ 'joe' , 'role' , 'admin' ] ,
340
+ [ 'jane' , 'role' , 'writer' ] ,
341
+ ] ;
342
+ } ,
343
+ } ,
344
+ { path : '**' , renderMode : RenderMode . Server } ,
345
+ ] ,
346
+ ) ;
347
+
348
+ const { routeTree, errors } = await extractRoutesAndCreateRouteTree ( {
349
+ url,
350
+ invokeGetPrerenderParams : true ,
351
+ } ) ;
352
+ expect ( errors ) . toHaveSize ( 0 ) ;
353
+ expect ( routeTree . toObject ( ) ) . toEqual ( [
354
+ { route : '/home' , renderMode : RenderMode . Server } ,
355
+ { route : '/user/joe/role/admin' , renderMode : RenderMode . Prerender } ,
356
+ {
357
+ route : '/user/jane/role/writer' ,
358
+ renderMode : RenderMode . Prerender ,
359
+ } ,
360
+ { route : '/user/**' , renderMode : RenderMode . Server } ,
361
+ ] ) ;
362
+ } ) ;
363
+
299
364
it ( 'should extract nested redirects that are not explicitly defined.' , async ( ) => {
300
365
setAngularAppTestingManifest (
301
366
[
0 commit comments