@dbs-portal/core-api
Version:
HTTP client and API utilities for DBS Portal
118 lines • 2.93 kB
JavaScript
/**
* URL utility functions
*/
/**
* Combines base URL with relative URL
*/
export function combineUrls(baseUrl, relativeUrl) {
if (isAbsoluteUrl(relativeUrl)) {
return relativeUrl;
}
const base = baseUrl.replace(/\/+$/, '');
const relative = relativeUrl.replace(/^\/+/, '');
return `${base}/${relative}`;
}
/**
* Checks if URL is absolute
*/
export function isAbsoluteUrl(url) {
return /^https?:\/\//.test(url);
}
/**
* Builds URL with query parameters
*/
export function buildUrlWithParams(url, params) {
if (!params || Object.keys(params).length === 0) {
return url;
}
const searchParams = new URLSearchParams();
for (const [key, value] of Object.entries(params)) {
if (value !== null && value !== undefined) {
if (Array.isArray(value)) {
value.forEach(item => searchParams.append(key, String(item)));
}
else {
searchParams.append(key, String(value));
}
}
}
const separator = url.includes('?') ? '&' : '?';
return url + separator + searchParams.toString();
}
/**
* Parses query parameters from URL
*/
export function parseUrlParams(url) {
const urlObj = new URL(url);
const params = {};
for (const [key, value] of urlObj.searchParams.entries()) {
if (key in params) {
if (Array.isArray(params[key])) {
;
params[key].push(value);
}
else {
params[key] = [params[key], value];
}
}
else {
params[key] = value;
}
}
return params;
}
/**
* Normalizes URL by removing redundant parts
*/
export function normalizeUrl(url) {
try {
const urlObj = new URL(url);
// Remove default ports
if ((urlObj.protocol === 'http:' && urlObj.port === '80') ||
(urlObj.protocol === 'https:' && urlObj.port === '443')) {
urlObj.port = '';
}
// Normalize pathname
urlObj.pathname = urlObj.pathname.replace(/\/+/g, '/').replace(/\/$/, '') || '/';
return urlObj.toString();
}
catch {
return url;
}
}
/**
* Extracts domain from URL
*/
export function extractDomain(url) {
try {
return new URL(url).hostname;
}
catch {
return '';
}
}
/**
* Checks if two URLs have the same origin
*/
export function isSameOrigin(url1, url2) {
try {
const origin1 = new URL(url1).origin;
const origin2 = new URL(url2).origin;
return origin1 === origin2;
}
catch {
return false;
}
}
/**
* Converts relative URL to absolute using base URL
*/
export function toAbsoluteUrl(relativeUrl, baseUrl) {
try {
return new URL(relativeUrl, baseUrl).toString();
}
catch {
return relativeUrl;
}
}
//# sourceMappingURL=url-utils.js.map