Skip to content

Commit

Permalink
Handle final character delimiter in non-end mode
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeembrey committed Oct 14, 2017
1 parent 1bf8052 commit 0085943
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
18 changes: 13 additions & 5 deletions index.js
Expand Up @@ -7,6 +7,12 @@ module.exports.compile = compile
module.exports.tokensToFunction = tokensToFunction
module.exports.tokensToRegExp = tokensToRegExp

/**
* Default configs.
*/
var DEFAULT_DELIMITER = '/'
var DEFAULT_DELIMITERS = './'

/**
* The main path matching regexp utility.
*
Expand Down Expand Up @@ -36,8 +42,8 @@ function parse (str, options) {
var key = 0
var index = 0
var path = ''
var defaultDelimiter = (options && options.delimiter) || '/'
var delimiters = (options && options.delimiters) || './'
var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER
var delimiters = (options && options.delimiters) || DEFAULT_DELIMITERS
var pathEscaped = false
var res

Expand Down Expand Up @@ -295,16 +301,19 @@ function tokensToRegExp (tokens, keys, options) {

var strict = options.strict
var end = options.end !== false
var delimiter = escapeString(options.delimiter || '/')
var delimiter = escapeString(options.delimiter || DEFAULT_DELIMITER)
var delimiters = options.delimiters || DEFAULT_DELIMITERS
var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')
var route = ''
var isEndDelimited = false

// Iterate over the tokens and create our regexp string.
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i]

if (typeof token === 'string') {
route += escapeString(token)
isEndDelimited = i === tokens.length - 1 && delimiters.indexOf(token[token.length - 1]) > -1
} else {
var prefix = escapeString(token.prefix)
var capture = '(?:' + token.pattern + ')'
Expand Down Expand Up @@ -335,8 +344,7 @@ function tokensToRegExp (tokens, keys, options) {
route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'
} else {
if (!strict) route += '(?:' + delimiter + '(?=' + endsWith + '))?'

route += '(?=' + delimiter + '|' + endsWith + ')'
if (!isEndDelimited) route += '(?=' + delimiter + '|' + endsWith + ')'
}

return new RegExp('^' + route, flags(options))
Expand Down
19 changes: 17 additions & 2 deletions test.ts
Expand Up @@ -176,7 +176,8 @@ var TESTS: Test[] = [
'/test/'
],
[
['/test/route', null],
['/test', null],
['/test/route', ['/test/']],
['/test//', ['/test//']],
['/test//route', ['/test/']]
],
Expand Down Expand Up @@ -270,7 +271,7 @@ var TESTS: Test[] = [
['/test', null],
['/test/', ['/test/']],
['/test//', ['/test/']],
['/test/route', null]
['/test/route', ['/test/']]
],
[
[null, '/test/']
Expand Down Expand Up @@ -2041,6 +2042,20 @@ var TESTS: Test[] = [
[null, '/café']
]
],
[
'packages/',
null,
[
'packages/'
],
[
['packages', null],
['packages/', ['packages/']]
],
[
[null, 'packages/']
]
],

/**
* Hostnames.
Expand Down

0 comments on commit 0085943

Please sign in to comment.