hd-utils
Version:
A handy utils for modern JS developers
34 lines (32 loc) • 1.11 kB
JavaScript
import splitOnFirst from '../string/splitOnFirst';
import extractQueryFromUrl from './extractQueryFromUrl';
import parse from './parse';
import { decode } from './routeHelpers';
/**
* @description Extract the URL and the query string as an object.
* If the `parseFragmentIdentifier` option is `true`, the object will also contain a `fragmentIdentifier` property.
* @example
```
parseUrl('https://foo.bar?foo=bar');
//=> {url: 'https://foo.bar', query: {foo: 'bar'}}
parseUrl('https://foo.bar?foo=bar#xyz', {parseFragmentIdentifier: true});
//=> {url: 'https://foo.bar', query: {foo: 'bar'}, fragmentIdentifier: 'xyz'}
```
*/
export default function parseUrl(url, options) {
options = {
decode: true,
...options
};
let [url_, hash] = splitOnFirst(url, '#');
if (url_ === undefined) {
url_ = url;
}
return {
url: url_?.split('?')?.[0] ?? '',
query: parse(extractQueryFromUrl(url), options),
...(options && options.parseFragmentIdentifier && hash
? { fragmentIdentifier: decode(hash, options) }
: {})
};
}