UNPKG

fumadocs-openapi

Version:

Generate MDX docs for your OpenAPI spec

60 lines (59 loc) 2.07 kB
export function joinURL(base, pathname) { if (pathname.startsWith('/')) pathname = pathname.slice(1); if (base.endsWith('/')) base = base.slice(0, -1); if (pathname.length > 0) return base + '/' + pathname; else return base; } /** * @param url - URL (can be relative) * @param base - the base URL (must be absolute) */ export function withBase(url, base) { if (!url.startsWith('https://') && !url.startsWith('http://')) { return joinURL(base, url); } return url; } export function resolveServerUrl(template, variables) { for (const [key, value] of Object.entries(variables)) { template = template.replaceAll(`{${key}}`, value); } return template; } export function resolveRequestData(pathname, { path, query }) { // First, resolve path parameters in the pathname for (const key in path) { const param = path[key]; if (Array.isArray(param.value)) { pathname = pathname.replace(`{${key}}`, param.value.join('/')); } else { pathname = pathname.replace(`{${key}}`, param.value); } } // Check if pathname already contains query parameters (legacy API support) const [pathPart, existingQueryString] = pathname.split('?', 2); // Parse existing query parameters from the pathname if they exist const searchParams = new URLSearchParams(existingQueryString || ''); // Add new query parameters from the RequestData for (const key in query) { const param = query[key]; if (Array.isArray(param.value)) { // Remove existing parameter first to avoid duplicates searchParams.delete(key); for (const item of param.value) { searchParams.append(key, item); } } else { // Set (replace if exists) the parameter value searchParams.set(key, param.value); } } // Return the reconstructed URL return searchParams.size > 0 ? `${pathPart}?${searchParams}` : pathPart; }