@@ -35,6 +35,20 @@ function compilePattern(pattern) {
35
35
36
36
var Path = {
37
37
38
+ /**
39
+ * Returns true if the given path is absolute.
40
+ */
41
+ isAbsolute : function ( path ) {
42
+ return path . charAt ( 0 ) === '/' ;
43
+ } ,
44
+
45
+ /**
46
+ * Joins two URL paths together.
47
+ */
48
+ join : function ( a , b ) {
49
+ return a . replace ( / \/ * $ / , '/' ) + b ;
50
+ } ,
51
+
38
52
/**
39
53
* Returns an array of the names of all parameters in the given pattern.
40
54
*/
@@ -48,15 +62,15 @@ var Path = {
48
62
* pattern does not match the given path.
49
63
*/
50
64
extractParams : function ( pattern , path ) {
51
- var object = compilePattern ( pattern ) ;
52
- var match = path . match ( object . matcher ) ;
65
+ var { matcher , paramNames } = compilePattern ( pattern ) ;
66
+ var match = path . match ( matcher ) ;
53
67
54
68
if ( ! match )
55
69
return null ;
56
70
57
71
var params = { } ;
58
72
59
- object . paramNames . forEach ( function ( paramName , index ) {
73
+ paramNames . forEach ( function ( paramName , index ) {
60
74
params [ paramName ] = match [ index + 1 ] ;
61
75
} ) ;
62
76
@@ -76,16 +90,17 @@ var Path = {
76
90
paramName = paramName || 'splat' ;
77
91
78
92
// If param is optional don't check for existence
79
- if ( paramName . slice ( - 1 ) !== '?' ) {
80
- invariant (
81
- params [ paramName ] != null ,
82
- 'Missing "' + paramName + '" parameter for path "' + pattern + '"'
83
- ) ;
84
- } else {
93
+ if ( paramName . slice ( - 1 ) === '?' ) {
85
94
paramName = paramName . slice ( 0 , - 1 ) ;
86
95
87
96
if ( params [ paramName ] == null )
88
97
return '' ;
98
+ } else {
99
+ invariant (
100
+ params [ paramName ] != null ,
101
+ 'Missing "%s" parameter for path "%s"' ,
102
+ paramName , pattern
103
+ ) ;
89
104
}
90
105
91
106
var segment ;
@@ -94,7 +109,8 @@ var Path = {
94
109
95
110
invariant (
96
111
segment != null ,
97
- 'Missing splat # ' + splatIndex + ' for path "' + pattern + '"'
112
+ 'Missing splat # %s for path "%s"' ,
113
+ splatIndex , pattern
98
114
) ;
99
115
} else {
100
116
segment = params [ paramName ] ;
@@ -136,20 +152,6 @@ var Path = {
136
152
return Path . withoutQuery ( path ) + '?' + queryString ;
137
153
138
154
return path ;
139
- } ,
140
-
141
- /**
142
- * Returns true if the given path is absolute.
143
- */
144
- isAbsolute : function ( path ) {
145
- return path . charAt ( 0 ) === '/' ;
146
- } ,
147
-
148
- /**
149
- * Joins two URL paths together.
150
- */
151
- join : function ( a , b ) {
152
- return a . replace ( / \/ * $ / , '/' ) + b ;
153
155
}
154
156
155
157
} ;
0 commit comments