UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

41 lines (40 loc) 1.4 kB
export { modifyUrlSameOrigin }; import { createUrlFromComponents, isNotNullish_keyVal, parseUrl, objectFilter, assertUsageUrlPathnameAbsolute, } from './utils.js'; function modifyUrlSameOrigin(url, modify) { const urlParsed = parseUrl(url, '/'); // Pathname const pathname = modify.pathname ?? urlParsed.pathnameOriginal; assertUsageUrlPathnameAbsolute(pathname, 'modify.pathname'); // Search let search = modify.search === null ? '' : !modify.search ? urlParsed.searchOriginal : resolveSearch(urlParsed, modify.search); if (search === '?') search = ''; // Hash let hash; if (modify.hash === null) { hash = ''; } else if (modify.hash === undefined) { hash = urlParsed.hashOriginal ?? ''; } else { hash = modify.hash; if (!hash.startsWith('#')) hash = '#' + hash; } const urlModified = createUrlFromComponents(urlParsed.origin, pathname, search, hash); return urlModified; } function resolveSearch(urlParsed, search) { let searchParams; if (search instanceof URLSearchParams) { // Overwrite searchParams = search; } else { // Merge const searchMap = objectFilter({ ...urlParsed.search, ...search }, (isNotNullish_keyVal)); searchParams = new URLSearchParams(searchMap); } return '?' + searchParams.toString(); }