url-modify
Version:
Modify URL instances cleanly and safely. Works in any environment that supports the URL API.
59 lines • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.urlModify = void 0;
const urlModify = (modifications, base, { pathBehavior = 'replace', searchBehavior = 'replace' } = {}) => {
const url = new URL(base);
if (undefined !== modifications.hash) {
url.hash = modifications.hash;
}
if (undefined !== modifications.host) {
url.hostname = modifications.host;
}
if (undefined !== modifications.password) {
url.password = modifications.password;
}
if (undefined !== modifications.path) {
switch (pathBehavior) {
case 'append':
url.pathname += modifications.path;
break;
case 'prepend':
url.pathname = modifications.path + url.pathname.slice(1);
break;
case 'replace':
default:
url.pathname = modifications.path;
break;
}
}
if (undefined !== modifications.port) {
url.port = modifications.port;
}
if (undefined !== modifications.protocol) {
url.protocol = modifications.protocol;
}
if (undefined !== modifications.search) {
const searchParams = new URLSearchParams(modifications.search);
if ('clear' === searchBehavior) {
url.search = searchParams.toString();
}
else {
if ('replace' === searchBehavior) {
for (const key of searchParams.keys()) {
if (url.searchParams.has(key)) {
url.searchParams.delete(key);
}
}
}
searchParams.forEach((value, key) => {
url.searchParams.append(key, value);
});
}
}
if (undefined !== modifications.username) {
url.username = modifications.username;
}
return url;
};
exports.urlModify = urlModify;
//# sourceMappingURL=urlModify.js.map