vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
43 lines (42 loc) • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.modifyUrlSameOrigin = modifyUrlSameOrigin;
const utils_js_1 = require("./utils.js");
function modifyUrlSameOrigin(url, modify) {
const urlParsed = (0, utils_js_1.parseUrl)(url, '/');
// Pathname
const pathname = modify.pathname ?? urlParsed.pathnameOriginal;
(0, utils_js_1.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 = (0, utils_js_1.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 = (0, utils_js_1.objectFilter)({ ...urlParsed.search, ...search }, (utils_js_1.isNotNullish_keyVal));
searchParams = new URLSearchParams(searchMap);
}
return '?' + searchParams.toString();
}