fix(utils): flat routes if child routes have absolute paths (#7604)

This commit is contained in:
Michał Kędrzyński 2020-06-25 14:42:16 +02:00 committed by GitHub
parent d0056fbcc8
commit 4a0cf8f404
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 5 deletions

View File

@ -13,14 +13,19 @@ export const flatRoutes = function flatRoutes (router, fileName = '', routes = [
if (fileName === '' && r.path === '/') { if (fileName === '' && r.path === '/') {
routes.push('/') routes.push('/')
} }
return flatRoutes(r.children, fileName + r.path + '/', routes) return flatRoutes(r.children, fileName + r.path + '/', routes)
} }
fileName = fileName.replace(/\/+/g, '/') fileName = fileName.replace(/\/+/g, '/')
routes.push(
(r.path === '' && fileName[fileName.length - 1] === '/' // if child path is already absolute, do not make any concatenations
? fileName.slice(0, -1) if (r.path && r.path.startsWith('/')) {
: fileName) + r.path routes.push(r.path)
) } else if (r.path === '' && fileName[fileName.length - 1] === '/') {
routes.push(fileName.slice(0, -1) + r.path)
} else {
routes.push(fileName + r.path)
}
}) })
return routes return routes
} }

View File

@ -40,6 +40,37 @@ describe('util: route', () => {
expect(routes).toEqual(['/', '/foo/bar', '/foo/baz']) expect(routes).toEqual(['/', '/foo/bar', '/foo/baz'])
}) })
test('should flat absolute routes', () => {
const routes = flatRoutes([
{
name: 'foo',
path: '/foo',
children: [
{ name: 'foo-bar', path: '/foo/bar' },
{ name: 'foo-baz', path: '/foo/baz' }
]
}
])
expect(routes).toEqual(['/foo/bar', '/foo/baz'])
})
test('should flat absolute routes with empty path', () => {
const routes = flatRoutes([
{
name: 'foo',
path: '/foo',
children: [
{ name: 'foo-root', path: '' },
{ name: 'foo-bar', path: '/foo/bar' },
{ name: 'foo-baz', path: '/foo/baz' }
]
}
])
expect(routes).toEqual(['/foo', '/foo/bar', '/foo/baz'])
})
describe('util: route guard', () => { describe('util: route guard', () => {
test('should guard parent dir', () => { test('should guard parent dir', () => {
expect(() => { expect(() => {