mirror of
https://github.com/strapi/strapi.git
synced 2025-07-19 15:06:11 +00:00
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
/**
|
||
|
* From Express core: (MIT License)
|
||
|
*
|
||
|
* Normalize the given path string,
|
||
|
* returning a regular expression.
|
||
|
*
|
||
|
* An empty array should be passed,
|
||
|
* which will contain the placeholder
|
||
|
* key names. For example "/user/:id" will
|
||
|
* then contain ["id"].
|
||
|
*
|
||
|
* @param {String|RegExp|Array} path
|
||
|
* @param {Array} keys
|
||
|
* @param {Boolean} sensitive
|
||
|
* @param {Boolean} strict
|
||
|
* @return {RegExp}
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
exports.pathRegexp = function (path, keys, sensitive, strict) {
|
||
|
if (toString.call(path) === '[object RegExp]') {
|
||
|
return path;
|
||
|
}
|
||
|
if (Array.isArray(path)) {
|
||
|
path = '(' + path.join('|') + ')';
|
||
|
}
|
||
|
path = path
|
||
|
.concat(strict ? '' : '/?')
|
||
|
.replace(/\/\(/g, '(?:/')
|
||
|
.replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function (_, slash, format, key, capture, optional, star) {
|
||
|
keys.push({
|
||
|
name: key,
|
||
|
optional: !!optional
|
||
|
});
|
||
|
slash = slash || '';
|
||
|
return '' + (optional ? '' : slash) + '(?:' + (optional ? slash : '') + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')' + (optional || '') + (star ? '(/*)?' : '');
|
||
|
})
|
||
|
.replace(/([\/.])/g, '\\$1')
|
||
|
.replace(/\*/g, '(.*)');
|
||
|
return new RegExp('^' + path + '$', sensitive ? '' : 'i');
|
||
|
};
|