kibana-riya
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
50 lines (38 loc) • 1.5 kB
JavaScript
import {
parse as parseUrl,
format as formatUrl,
} from 'url';
import encodeUriQuery from 'encode-uri-query';
import {
stringify as stringifyQueryString
} from 'querystring';
import unhashQueryString from './unhash_query_string';
export default function unhashUrl(urlWithHashes, states) {
if (!urlWithHashes) return urlWithHashes;
const urlWithHashesParsed = parseUrl(urlWithHashes, true);
if (!urlWithHashesParsed.hostname) {
// passing a url like "localhost:5601" or "/app/kibana" should be prevented
throw new TypeError(
'Only absolute urls should be passed to `unhashUrl()`. ' +
'Unable to detect url hostname.'
);
}
if (!urlWithHashesParsed.hash) return urlWithHashes;
const appUrl = urlWithHashesParsed.hash.slice(1); // trim the #
if (!appUrl) return urlWithHashes;
const appUrlParsed = parseUrl(urlWithHashesParsed.hash.slice(1), true);
if (!appUrlParsed.query) return urlWithHashes;
const appQueryWithoutHashes = unhashQueryString(appUrlParsed.query || {}, states);
// encodeUriQuery implements the less-aggressive encoding done naturally by
// the browser. We use it to generate the same urls the browser would
const appQueryStringWithoutHashes = stringifyQueryString(appQueryWithoutHashes, null, null, {
encodeURIComponent: encodeUriQuery
});
return formatUrl({
...urlWithHashesParsed,
hash: formatUrl({
pathname: appUrlParsed.pathname,
search: appQueryStringWithoutHashes,
})
});
}