UNPKG

@dbs-portal/core-api

Version:

HTTP client and API utilities for DBS Portal

118 lines 2.93 kB
/** * 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