params.js
997 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* @flow */
import Regexp from 'path-to-regexp'
import { warn } from './warn'
const regexpCache: {
[key: string]: {
keys: Array<?{ name: string }>,
regexp: RegExp
}
} = Object.create(null)
export function getRouteRegex (path: string): Object {
const hit = regexpCache[path]
let keys, regexp
if (hit) {
keys = hit.keys
regexp = hit.regexp
} else {
keys = []
regexp = Regexp(path, keys)
regexpCache[path] = { keys, regexp }
}
return { keys, regexp }
}
const regexpCompileCache: {
[key: string]: Function
} = Object.create(null)
export function fillParams (
path: string,
params: ?Object,
routeMsg: string
): string {
try {
const filler =
regexpCompileCache[path] ||
(regexpCompileCache[path] = Regexp.compile(path))
return filler(params || {}, { pretty: true })
} catch (e) {
if (process.env.NODE_ENV !== 'production') {
warn(false, `missing param for ${routeMsg}: ${e.message}`)
}
return ''
}
}