@@ -156,9 +156,9 @@ describe('generateRouteNamedMap', () => {
156
156
tree . insert ( 'a/[id]/index' , 'a/[id]/index.vue' )
157
157
expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
158
158
"export interface RouteNamedMap {
159
- '/a': RouteRecordInfo<'/a', '/a', Record<never, never>, Record<never, never>>,
159
+ '/a': RouteRecordInfo<'/a', '/a', Record<never, never>, Record<never, never>, '/a/' | '/a/[id]/' | '/a/[id]' >,
160
160
'/a/': RouteRecordInfo<'/a/', '/a', Record<never, never>, Record<never, never>>,
161
- '/a/[id]': RouteRecordInfo<'/a/[id]', '/a/:id', { id: ParamValue<true> }, { id: ParamValue<false> }>,
161
+ '/a/[id]': RouteRecordInfo<'/a/[id]', '/a/:id', { id: ParamValue<true> }, { id: ParamValue<false> }, '/a/[id]/' >,
162
162
'/a/[id]/': RouteRecordInfo<'/a/[id]/', '/a/:id', { id: ParamValue<true> }, { id: ParamValue<false> }>,
163
163
}"
164
164
` )
@@ -172,12 +172,75 @@ describe('generateRouteNamedMap', () => {
172
172
expect ( child . fullPath ) . toBe ( '/child' )
173
173
expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
174
174
"export interface RouteNamedMap {
175
- '/parent': RouteRecordInfo<'/parent', '/', Record<never, never>, Record<never, never>>,
175
+ '/parent': RouteRecordInfo<'/parent', '/', Record<never, never>, Record<never, never>, '/parent/child' >,
176
176
'/parent/child': RouteRecordInfo<'/parent/child', '/child', Record<never, never>, Record<never, never>>,
177
177
}"
178
178
` )
179
179
} )
180
180
181
+ it ( 'adds children route names' , ( ) => {
182
+ const tree = new PrefixTree ( DEFAULT_OPTIONS )
183
+ tree . insert ( 'parent' , 'parent.vue' )
184
+ tree . insert ( 'parent/child' , 'parent/child.vue' )
185
+ tree . insert ( 'parent/child/subchild' , 'parent/child/subchild.vue' )
186
+ tree . insert (
187
+ 'parent/child/subchild/grandchild' ,
188
+ 'parent/child/subchild/grandchild.vue'
189
+ )
190
+ tree . insert ( 'parent/other-child' , 'parent/other-child.vue' )
191
+ expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
192
+ "export interface RouteNamedMap {
193
+ '/parent': RouteRecordInfo<'/parent', '/parent', Record<never, never>, Record<never, never>, '/parent/child' | '/parent/child/subchild/grandchild' | '/parent/other-child' | '/parent/child/subchild'>,
194
+ '/parent/child': RouteRecordInfo<'/parent/child', '/parent/child', Record<never, never>, Record<never, never>, '/parent/child/subchild/grandchild' | '/parent/child/subchild'>,
195
+ '/parent/child/subchild': RouteRecordInfo<'/parent/child/subchild', '/parent/child/subchild', Record<never, never>, Record<never, never>, '/parent/child/subchild/grandchild'>,
196
+ '/parent/child/subchild/grandchild': RouteRecordInfo<'/parent/child/subchild/grandchild', '/parent/child/subchild/grandchild', Record<never, never>, Record<never, never>>,
197
+ '/parent/other-child': RouteRecordInfo<'/parent/other-child', '/parent/other-child', Record<never, never>, Record<never, never>>,
198
+ }"
199
+ ` )
200
+ } )
201
+
202
+ it ( 'skips children without components' , ( ) => {
203
+ const tree = new PrefixTree ( DEFAULT_OPTIONS )
204
+ tree . insert ( 'parent' , 'parent.vue' )
205
+ tree . insert ( 'parent/child/a/b/c' , 'parent/child/a/b/c.vue' )
206
+ expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
207
+ "export interface RouteNamedMap {
208
+ '/parent': RouteRecordInfo<'/parent', '/parent', Record<never, never>, Record<never, never>, '/parent/child/a/b/c'>,
209
+ '/parent/child/a/b/c': RouteRecordInfo<'/parent/child/a/b/c', '/parent/child/a/b/c', Record<never, never>, Record<never, never>>,
210
+ }"
211
+ ` )
212
+ } )
213
+
214
+ it ( 'skips the children in the index route' , ( ) => {
215
+ const tree = new PrefixTree ( DEFAULT_OPTIONS )
216
+ tree . insert ( 'parent/index' , 'parent/index.vue' )
217
+ tree . insert ( 'parent/child' , 'parent/child.vue' )
218
+ expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
219
+ "export interface RouteNamedMap {
220
+ '/parent/': RouteRecordInfo<'/parent/', '/parent', Record<never, never>, Record<never, never>>,
221
+ '/parent/child': RouteRecordInfo<'/parent/child', '/parent/child', Record<never, never>, Record<never, never>>,
222
+ }"
223
+ ` )
224
+ } )
225
+
226
+ it ( 'does not mix children of an adjacent route' , ( ) => {
227
+ const tree = new PrefixTree ( DEFAULT_OPTIONS )
228
+ tree . insert ( 'parent/index' , 'parent/index.vue' )
229
+ tree . insert ( 'parent/a/index' , 'parent/a/index.vue' )
230
+ tree . insert ( 'parent/a/b' , 'parent/a/b.vue' )
231
+ tree . insert ( 'parent/a/b/index' , 'parent/a/b/index.vue' )
232
+ tree . insert ( 'parent/a/b/c' , 'parent/a/b/c.vue' )
233
+ expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
234
+ "export interface RouteNamedMap {
235
+ '/parent/': RouteRecordInfo<'/parent/', '/parent', Record<never, never>, Record<never, never>>,
236
+ '/parent/a/': RouteRecordInfo<'/parent/a/', '/parent/a', Record<never, never>, Record<never, never>>,
237
+ '/parent/a/b': RouteRecordInfo<'/parent/a/b', '/parent/a/b', Record<never, never>, Record<never, never>, '/parent/a/b/' | '/parent/a/b/c'>,
238
+ '/parent/a/b/': RouteRecordInfo<'/parent/a/b/', '/parent/a/b', Record<never, never>, Record<never, never>>,
239
+ '/parent/a/b/c': RouteRecordInfo<'/parent/a/b/c', '/parent/a/b/c', Record<never, never>, Record<never, never>>,
240
+ }"
241
+ ` )
242
+ } )
243
+
181
244
it ( 'adds params from the path option' , ( ) => {
182
245
const tree = new PrefixTree (
183
246
resolveOptions ( {
@@ -204,10 +267,10 @@ describe('generateRouteNamedMap', () => {
204
267
tree . insert ( '(group)/a' , 'a.vue' )
205
268
206
269
expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
207
- "export interface RouteNamedMap {
208
- '/(group)/a': RouteRecordInfo<'/(group)/a', '/a', Record<never, never>, Record<never, never>>,
209
- }"
210
- ` )
270
+ "export interface RouteNamedMap {
271
+ '/(group)/a': RouteRecordInfo<'/(group)/a', '/a', Record<never, never>, Record<never, never>>,
272
+ }"
273
+ ` )
211
274
} )
212
275
213
276
it ( 'ignores nested folder names in parentheses' , ( ) => {
@@ -216,10 +279,10 @@ describe('generateRouteNamedMap', () => {
216
279
tree . insert ( '(group)/(subgroup)/c' , 'c.vue' )
217
280
218
281
expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
219
- "export interface RouteNamedMap {
220
- '/(group)/(subgroup)/c': RouteRecordInfo<'/(group)/(subgroup)/c', '/c', Record<never, never>, Record<never, never>>,
221
- }"
222
- ` )
282
+ "export interface RouteNamedMap {
283
+ '/(group)/(subgroup)/c': RouteRecordInfo<'/(group)/(subgroup)/c', '/c', Record<never, never>, Record<never, never>>,
284
+ }"
285
+ ` )
223
286
} )
224
287
225
288
it ( 'treats files named with parentheses as index inside static folder' , ( ) => {
@@ -228,10 +291,10 @@ describe('generateRouteNamedMap', () => {
228
291
tree . insert ( 'folder/(group)' , 'folder/(group).vue' )
229
292
230
293
expect ( formatExports ( generateRouteNamedMap ( tree ) ) ) . toMatchInlineSnapshot ( `
231
- "export interface RouteNamedMap {
232
- '/folder/(group)': RouteRecordInfo<'/folder/(group)', '/folder', Record<never, never>, Record<never, never>>,
233
- }"
234
- ` )
294
+ "export interface RouteNamedMap {
295
+ '/folder/(group)': RouteRecordInfo<'/folder/(group)', '/folder', Record<never, never>, Record<never, never>>,
296
+ }"
297
+ ` )
235
298
} )
236
299
} )
237
300
0 commit comments