/* @flow */
|
|
import { warn } from './warn'
|
import Regexp from 'path-to-regexp'
|
|
// $flow-disable-line
|
const regexpCompileCache: {
|
[key: string]: Function
|
} = Object.create(null)
|
|
export function fillParams (
|
path: string,
|
params: ?Object,
|
routeMsg: string
|
): string {
|
params = params || {}
|
try {
|
const filler =
|
regexpCompileCache[path] ||
|
(regexpCompileCache[path] = Regexp.compile(path))
|
|
// Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
|
// and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
|
if (typeof params.pathMatch === 'string') params[0] = params.pathMatch
|
|
return filler(params, { pretty: true })
|
} catch (e) {
|
if (process.env.NODE_ENV !== 'production') {
|
// Fix #3072 no warn if `pathMatch` is string
|
warn(typeof params.pathMatch === 'string', `missing param for ${routeMsg}: ${e.message}`)
|
}
|
return ''
|
} finally {
|
// delete the 0 if it was added
|
delete params[0]
|
}
|
}
|