UNPKG

hd-utils

Version:

A handy utils for modern JS developers

34 lines (32 loc) 1.11 kB
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) } : {}) }; }