1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 'use strict';
- const RFC3986 = require('./rfc3986');
- const internals = {
- Uri: {
- createUriRegex: function (optionalScheme, allowRelative, relativeOnly, allowQuerySquareBrackets) {
- let scheme = RFC3986.scheme;
- let prefix;
- if (relativeOnly) {
- prefix = '(?:' + RFC3986.relativeRef + ')';
- }
- else {
- // 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 + ')';
- prefix = allowRelative ? '(?:' + withScheme + '|' + RFC3986.relativeRef + ')' : withScheme;
- }
- /**
- * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
- *
- * OR
- *
- * relative-ref = relative-part [ "?" query ] [ "#" fragment ]
- */
- return new RegExp('^' + prefix + '(?:\\?' + (allowQuerySquareBrackets ? RFC3986.queryWithSquareBrackets : RFC3986.query) + ')?' + '(?:#' + RFC3986.fragment + ')?$');
- }
- }
- };
- module.exports = internals.Uri;
|