12345678910111213141516171819202122232425262728293031323334353637 |
- /* @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]
- }
- }
|