mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[state/unhashUrl] use encode-uri-query to generate cleanly encoded urls
By default, the url.format function stringifies the query object and encodes each parameter with `encodeURIComponent()`. This is effective, but does not match the native browser behavior, which is to only encode the non-`pchar` characters as defined by [rfc3986][1]. Because of this, angular's `$location.search()` function uses a function internally called `encodeUriQuery()` to mimic the browser behavior before updating `location.href`. To bring the same funtionality to the `unhashUrl()` function, the `encodeUriQuery()` was extracted into it's own package and used as the escape handler for `querystring.stringify()` [1]: https://www.ietf.org/rfc/rfc3986.txt
This commit is contained in:
parent
fbaf4bf620
commit
d9dac3ffdc
2 changed files with 15 additions and 1 deletions
|
@ -103,6 +103,7 @@
|
|||
"dragula": "3.7.0",
|
||||
"elasticsearch": "12.0.0-rc5",
|
||||
"elasticsearch-browser": "12.0.0-rc5",
|
||||
"encode-uri-query": "1.0.0",
|
||||
"even-better": "7.0.2",
|
||||
"expiry-js": "0.1.7",
|
||||
"exports-loader": "0.6.2",
|
||||
|
|
|
@ -3,6 +3,12 @@ import {
|
|||
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) {
|
||||
|
@ -26,11 +32,18 @@ export default function unhashUrl(urlWithHashes, states) {
|
|||
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,
|
||||
query: appQueryWithoutHashes,
|
||||
search: appQueryStringWithoutHashes,
|
||||
})
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue