import type { HttpSearchInit } from './types'; export function normalizeSearch(input: HttpSearchInit | undefined): URLSearchParams | undefined { if (input === undefined) return undefined; if (input instanceof URLSearchParams) return new URLSearchParams(input); if (typeof input === 'string') { return new URLSearchParams(input.startsWith('?') ? input.slice(1) : input); } const out = new URLSearchParams(); if (Array.isArray(input)) { for (const [key, value] of input) out.append(key, String(value)); return out; } for (const [key, value] of Object.entries(input)) { if (value === null || value === undefined) continue; out.append(key, String(value)); } return out; } export function appendSearch(url: string, params: URLSearchParams | undefined): string { if (params === undefined || params.size === 0) return url; const separator = url.includes('?') ? '&' : '?'; return `${url}${separator}${params.toString()}`; } export function resolveUrl(url: string, baseUrl: string | undefined): string { if (baseUrl === undefined || baseUrl === '') return url; if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(url)) return url; const trimmedBase = baseUrl.split('?')[0].split('#')[0].replace(/\/+$/, ''); const trimmedUrl = url.replace(/^\/+/, ''); return `${trimmedBase}/${trimmedUrl}`; }