123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- Object.defineProperty(exports, '__esModule', { value: true });
- /**
- * Parses string form of URL into an object
- * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
- * // intentionally using regex and not <a/> href parsing trick because React Native and other
- * // environments where DOM might not be available
- * @returns parsed URL object
- */
- function parseUrl(url) {
- if (!url) {
- return {};
- }
- const match = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
- if (!match) {
- return {};
- }
- // coerce to undefined values to empty string so we don't get 'undefined'
- const query = match[6] || '';
- const fragment = match[8] || '';
- return {
- host: match[4],
- path: match[5],
- protocol: match[2],
- search: query,
- hash: fragment,
- relative: match[5] + query + fragment, // everything minus origin
- };
- }
- /**
- * Strip the query string and fragment off of a given URL or path (if present)
- *
- * @param urlPath Full URL or path, including possible query string and/or fragment
- * @returns URL or path without query string or fragment
- */
- function stripUrlQueryAndFragment(urlPath) {
- // eslint-disable-next-line no-useless-escape
- return urlPath.split(/[\?#]/, 1)[0];
- }
- /**
- * Returns number of URL segments of a passed string URL.
- */
- function getNumberOfUrlSegments(url) {
- // split at '/' or at '\/' to split regex urls correctly
- return url.split(/\\?\//).filter(s => s.length > 0 && s !== ',').length;
- }
- /**
- * Takes a URL object and returns a sanitized string which is safe to use as span description
- * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data
- */
- function getSanitizedUrlString(url) {
- const { protocol, host, path } = url;
- const filteredHost =
- (host &&
- host
- // Always filter out authority
- .replace(/^.*@/, '[filtered]:[filtered]@')
- // Don't show standard :80 (http) and :443 (https) ports to reduce the noise
- // TODO: Use new URL global if it exists
- .replace(/(:80)$/, '')
- .replace(/(:443)$/, '')) ||
- '';
- return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;
- }
- exports.getNumberOfUrlSegments = getNumberOfUrlSegments;
- exports.getSanitizedUrlString = getSanitizedUrlString;
- exports.parseUrl = parseUrl;
- exports.stripUrlQueryAndFragment = stripUrlQueryAndFragment;
- //# sourceMappingURL=url.js.map
|