@@ -316,27 +316,23 @@ function arrayToRegexp (path, keys, options) {
316
316
* @return {!RegExp }
317
317
*/
318
318
function stringToRegexp ( path , keys , options ) {
319
- var tokens = parse ( path )
320
- var re = tokensToRegExp ( tokens , options )
321
-
322
- // Attach keys back to the regexp.
323
- for ( var i = 0 ; i < tokens . length ; i ++ ) {
324
- if ( typeof tokens [ i ] !== 'string' ) {
325
- keys . push ( tokens [ i ] )
326
- }
327
- }
328
-
329
- return attachKeys ( re , keys )
319
+ return tokensToRegExp ( parse ( path ) , keys , options )
330
320
}
331
321
332
322
/**
333
323
* Expose a function for taking tokens and returning a RegExp.
334
324
*
335
- * @param {!Array } tokens
336
- * @param {Object= } options
325
+ * @param {!Array } tokens
326
+ * @param {(Array|Object)= } keys
327
+ * @param {Object= } options
337
328
* @return {!RegExp }
338
329
*/
339
- function tokensToRegExp ( tokens , options ) {
330
+ function tokensToRegExp ( tokens , keys , options ) {
331
+ if ( ! isarray ( keys ) ) {
332
+ options = /** @type {!Object } */ ( keys || options )
333
+ keys = [ ]
334
+ }
335
+
340
336
options = options || { }
341
337
342
338
var strict = options . strict
@@ -355,6 +351,8 @@ function tokensToRegExp (tokens, options) {
355
351
var prefix = escapeString ( token . prefix )
356
352
var capture = '(?:' + token . pattern + ')'
357
353
354
+ keys . push ( token )
355
+
358
356
if ( token . repeat ) {
359
357
capture += '(?:' + prefix + capture + ')*'
360
358
}
@@ -389,7 +387,7 @@ function tokensToRegExp (tokens, options) {
389
387
route += strict && endsWithSlash ? '' : '(?=\\/|$)'
390
388
}
391
389
392
- return new RegExp ( '^' + route , flags ( options ) )
390
+ return attachKeys ( new RegExp ( '^' + route , flags ( options ) ) , keys )
393
391
}
394
392
395
393
/**
@@ -405,15 +403,13 @@ function tokensToRegExp (tokens, options) {
405
403
* @return {!RegExp }
406
404
*/
407
405
function pathToRegexp ( path , keys , options ) {
408
- keys = keys || [ ]
409
-
410
406
if ( ! isarray ( keys ) ) {
411
- options = /** @type {!Object } */ ( keys )
407
+ options = /** @type {!Object } */ ( keys || options )
412
408
keys = [ ]
413
- } else if ( ! options ) {
414
- options = { }
415
409
}
416
410
411
+ options = options || { }
412
+
417
413
if ( path instanceof RegExp ) {
418
414
return regexpToRegexp ( path , /** @type {!Array } */ ( keys ) )
419
415
}
0 commit comments