mirror of https://gitee.com/bigwinds/arangodb
40 lines
1.1 KiB
JavaScript
Executable File
40 lines
1.1 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
// Load Modules
|
|
|
|
const RFC3986 = require('./rfc3986');
|
|
|
|
|
|
// Declare internals
|
|
|
|
const internals = {
|
|
Uri: {
|
|
createUriRegex: function (optionalScheme, allowRelative) {
|
|
|
|
let scheme = RFC3986.scheme;
|
|
|
|
// If we were passed a scheme, use it instead of the generic one
|
|
if (optionalScheme) {
|
|
|
|
// Have to put this in a non-capturing group to handle the OR statements
|
|
scheme = '(?:' + optionalScheme + ')';
|
|
}
|
|
|
|
const withScheme = '(?:' + scheme + ':' + RFC3986.hierPart + ')';
|
|
const prefix = allowRelative ? '(?:' + withScheme + '|' + RFC3986.relativeRef + ')' : withScheme;
|
|
|
|
/**
|
|
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
|
|
*
|
|
* OR
|
|
*
|
|
* relative-ref = relative-part [ "?" query ] [ "#" fragment ]
|
|
*/
|
|
return new RegExp('^' + prefix + '(?:\\?' + RFC3986.query + ')?' + '(?:#' + RFC3986.fragment + ')?$');
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
module.exports = internals.Uri;
|