fix(experimental): repeatable params in subsegments · vuejs/router@846640e (original) (raw)
`@@ -6,6 +6,7 @@ import {
`
6
6
`import { MatcherPatternPathStar } from './matcher-pattern-path-star'
`
7
7
`import { miss } from './errors'
`
8
8
`import { definePathParamParser } from './param-parsers'
`
``
9
`+
import { mockWarn } from '../../../../tests/vitest-mock-warn'
`
9
10
``
10
11
`describe('MatcherPatternPathStatic', () => {
`
11
12
`describe('match()', () => {
`
`@@ -129,6 +130,8 @@ describe('MatcherPatternPathStar', () => {
`
129
130
`})
`
130
131
``
131
132
`describe('MatcherPatternPathDynamic', () => {
`
``
133
`+
mockWarn()
`
``
134
+
132
135
`it('single param', () => {
`
133
136
`const pattern = new MatcherPatternPathDynamic(
`
134
137
`/^/teams/([^/]+?)/b$/i,
`
`@@ -376,6 +379,48 @@ describe('MatcherPatternPathDynamic', () => {
`
376
379
`)
`
377
380
`})
`
378
381
``
``
382
`+
it('repeatable param in a sub segment', () => {
`
``
383
`` +
// produced by file-based routing for set.[ids]+.other
``
``
384
`+
const pattern = new MatcherPatternPathDynamic(
`
``
385
`+
/^/set/(.+?)/other$/,
`
``
386
`+
{
`
``
387
`+
ids: [{}, true],
`
``
388
`+
},
`
``
389
`+
[['set/', 1, '/other']]
`
``
390
`+
)
`
``
391
+
``
392
`+
expect(pattern.match('/set/123/other')).toEqual({ ids: ['123'] })
`
``
393
`+
expect(pattern.match('/set/123/456/other')).toEqual({
`
``
394
`+
ids: ['123', '456'],
`
``
395
`+
})
`
``
396
`+
expect(pattern.build({ ids: ['123'] })).toBe('/set/123/other')
`
``
397
`+
expect(pattern.build({ ids: ['123', '456'] })).toBe('/set/123/456/other')
`
``
398
`+
})
`
``
399
+
``
400
`+
it('multiple repeatable params in a sub segment', () => {
`
``
401
`` +
// produced by file-based routing for before.[ids]+.middle.[other]+.after
``
``
402
`+
const pattern = new MatcherPatternPathDynamic(
`
``
403
`+
/^/before/(.+?)/middle/(.+?)/after$/,
`
``
404
`+
{
`
``
405
`+
ids: [{}, true],
`
``
406
`+
other: [{}, true],
`
``
407
`+
},
`
``
408
`+
[['before/', 1, '/middle/', 1, '/after']]
`
``
409
`+
)
`
``
410
+
``
411
`+
expect(pattern.match('/before/a/middle/c/after')).toEqual({
`
``
412
`+
ids: ['a'],
`
``
413
`+
other: ['c'],
`
``
414
`+
})
`
``
415
`+
expect(pattern.match('/before/a/b/middle/c/d/after')).toEqual({
`
``
416
`+
ids: ['a', 'b'],
`
``
417
`+
other: ['c', 'd'],
`
``
418
`+
})
`
``
419
`+
expect(pattern.build({ ids: ['a', 'b'], other: ['c', 'd'] })).toBe(
`
``
420
`+
'/before/a/b/middle/c/d/after'
`
``
421
`+
)
`
``
422
`+
})
`
``
423
+
379
424
`it('can have a trailing slash after a single param', () => {
`
380
425
`const pattern = new MatcherPatternPathDynamic(
`
381
426
`/^/teams/([^/]+?)/$/i,
`