mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
|
// We borrow this code from https://github.com/pillarjs/path-match
|
||
|
// That's because, ^^^ package comes with very old version of path-to-regexp
|
||
|
// So, it'll give us issues when the app has used a newer version of path-to-regexp
|
||
|
// (When webpack resolving packages)
|
||
|
var pathToRegexp = require('path-to-regexp')
|
||
|
var createError = require('http-errors')
|
||
|
|
||
|
module.exports = function (options) {
|
||
|
options = options || {}
|
||
|
|
||
|
return function (path) {
|
||
|
var keys = []
|
||
|
var re = pathToRegexp(path, keys, options)
|
||
|
|
||
|
return function (pathname, params) {
|
||
|
var m = re.exec(pathname)
|
||
|
if (!m) return false
|
||
|
|
||
|
params = params || {}
|
||
|
|
||
|
var key, param
|
||
|
for (var i = 0; i < keys.length; i++) {
|
||
|
key = keys[i]
|
||
|
param = m[i + 1]
|
||
|
if (!param) continue
|
||
|
params[key.name] = decodeParam(param)
|
||
|
if (key.repeat) params[key.name] = params[key.name].split(key.delimiter)
|
||
|
}
|
||
|
|
||
|
return params
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function decodeParam (param) {
|
||
|
try {
|
||
|
return decodeURIComponent(param)
|
||
|
} catch (_) {
|
||
|
throw createError(400, 'failed to decode param "' + param + '"')
|
||
|
}
|
||
|
}
|