@@ -52,11 +52,10 @@ export default function create_manifest_data({ config, output, cwd = process.cwd
5252 /**
5353 * @param {string } dir
5454 * @param {Part[][] } parent_segments
55- * @param {string[] } parent_params
5655 * @param {string[] } layout_stack // accumulated __layout.svelte components
5756 * @param {string[] } error_stack // accumulated __error.svelte components
5857 */
59- function walk ( dir , parent_segments , parent_params , layout_stack , error_stack ) {
58+ function walk ( dir , parent_segments , layout_stack , error_stack ) {
6059 /** @type {Item[] } */
6160 const items = fs
6261 . readdirSync ( dir )
@@ -157,9 +156,6 @@ export default function create_manifest_data({ config, output, cwd = process.cwd
157156 segments . push ( item . parts ) ;
158157 }
159158
160- const params = parent_params . slice ( ) ;
161- params . push ( ...item . parts . filter ( ( p ) => p . dynamic ) . map ( ( p ) => p . content ) ) ;
162-
163159 if ( item . is_dir ) {
164160 const layout_reset = find_layout ( '__layout.reset' , item . file ) ;
165161 const layout = find_layout ( '__layout' , item . file ) ;
@@ -176,54 +172,71 @@ export default function create_manifest_data({ config, output, cwd = process.cwd
176172 walk (
177173 path . join ( dir , item . basename ) ,
178174 segments ,
179- params ,
180175 layout_reset ? [ layout_reset ] : layout_stack . concat ( layout ) ,
181176 layout_reset ? [ error ] : error_stack . concat ( error )
182177 ) ;
183- } else if ( item . is_page ) {
184- components . push ( item . file ) ;
185-
186- const a = layout_stack . concat ( item . file ) ;
187- const b = error_stack ;
188-
189- const pattern = get_pattern ( segments , true ) ;
178+ } else {
179+ const alternates = config . kit . alternateRoutes
180+ ? config . kit . alternateRoutes ( segments , item . is_page ? 'page' : 'endpoint' )
181+ : [ segments ] ;
182+
183+ if ( item . is_page ) {
184+ const id = components . length . toString ( ) ;
185+ components . push ( item . file ) ;
186+
187+ const a = layout_stack . concat ( item . file ) ;
188+ const b = error_stack ;
189+
190+ alternates . forEach ( ( segments ) => {
191+ const pattern = get_pattern ( segments , true ) ;
192+ const params = segments . flatMap ( ( parts ) =>
193+ parts . filter ( ( p ) => p . dynamic ) . map ( ( p ) => p . content )
194+ ) ;
195+
196+ let i = a . length ;
197+ while ( i -- ) {
198+ if ( ! b [ i ] && ! a [ i ] ) {
199+ b . splice ( i , 1 ) ;
200+ a . splice ( i , 1 ) ;
201+ }
202+ }
190203
191- let i = a . length ;
192- while ( i -- ) {
193- if ( ! b [ i ] && ! a [ i ] ) {
194- b . splice ( i , 1 ) ;
195- a . splice ( i , 1 ) ;
196- }
197- }
204+ i = b . length ;
205+ while ( i -- ) {
206+ if ( b [ i ] ) break ;
207+ }
198208
199- i = b . length ;
200- while ( i -- ) {
201- if ( b [ i ] ) break ;
209+ b . splice ( i + 1 ) ;
210+
211+ const path = segments . every ( ( segment ) => segment . length === 1 && ! segment [ 0 ] . dynamic )
212+ ? `/${ segments . map ( ( segment ) => segment [ 0 ] . content ) . join ( '/' ) } `
213+ : null ;
214+
215+ routes . push ( {
216+ id,
217+ type : 'page' ,
218+ pattern,
219+ params,
220+ path,
221+ a,
222+ b
223+ } ) ;
224+ } ) ;
225+ } else {
226+ alternates . forEach ( ( segments ) => {
227+ const pattern = get_pattern ( segments , ! item . route_suffix ) ;
228+ const params = segments . flatMap ( ( parts ) =>
229+ parts . filter ( ( p ) => p . dynamic ) . map ( ( p ) => p . content )
230+ ) ;
231+
232+ routes . push ( {
233+ type : 'endpoint' ,
234+ pattern,
235+ file : item . file ,
236+ params
237+ } ) ;
238+ } ) ;
202239 }
203-
204- b . splice ( i + 1 ) ;
205-
206- const path = segments . every ( ( segment ) => segment . length === 1 && ! segment [ 0 ] . dynamic )
207- ? `/${ segments . map ( ( segment ) => segment [ 0 ] . content ) . join ( '/' ) } `
208- : null ;
209-
210- routes . push ( {
211- type : 'page' ,
212- pattern,
213- params,
214- path,
215- a,
216- b
217- } ) ;
218- } else {
219- const pattern = get_pattern ( segments , ! item . route_suffix ) ;
220-
221- routes . push ( {
222- type : 'endpoint' ,
223- pattern,
224- file : item . file ,
225- params
226- } ) ;
227240 }
228241 } ) ;
229242 }
@@ -235,7 +248,7 @@ export default function create_manifest_data({ config, output, cwd = process.cwd
235248
236249 components . push ( layout , error ) ;
237250
238- walk ( config . kit . files . routes , [ ] , [ ] , [ layout ] , [ error ] ) ;
251+ walk ( config . kit . files . routes , [ ] , [ layout ] , [ error ] ) ;
239252
240253 const assets_dir = config . kit . files . assets ;
241254
0 commit comments