UNPKG

fumadocs-openapi

Version:

Generate MDX docs for your OpenAPI spec

68 lines (66 loc) 2.15 kB
import { resolveMediaAdapter } from "../requests/media/resolve-adapter.js"; import "../requests/media/adapter.js"; //#region src/playground/fetcher.ts function createBrowserFetcher(adapters, requestTimeout) { return { async fetch(url, options) { const headers = new Headers(); if (options.bodyMediaType && options.bodyMediaType !== "multipart/form-data") headers.append("Content-Type", options.bodyMediaType); for (const key in options.header) { const param = options.header[key]; headers.append(key, param.value); } const proxyUrl = options.proxyUrl ? new URL(options.proxyUrl, document.baseURI) : null; if (proxyUrl) { proxyUrl.searchParams.append("url", url); url = proxyUrl.toString(); } let body = void 0; if (options.bodyMediaType && options.body) { const adapter = resolveMediaAdapter(options.bodyMediaType, adapters); if (!adapter) return { status: 400, type: "text", data: `[Fumadocs] No adapter for ${options.bodyMediaType}, you need to specify one from 'createOpenAPI()'.` }; body = adapter.encode(options); } for (const key in options.cookie) { const segs = [`${key}=${options.cookie[key].value}`]; if (proxyUrl && proxyUrl.origin !== window.location.origin) segs.push(`domain=${proxyUrl.host}`); segs.push("path=/", "max-age=30"); document.cookie = segs.join("; "); } return fetch(url, { method: options.method, cache: "no-cache", headers, body, signal: AbortSignal.timeout(requestTimeout * 1e3) }).then(async (res) => { const contentType = res.headers.get("Content-Type") ?? ""; let type; let data; if (contentType.startsWith("application/json")) { type = "json"; data = await res.json(); } else { type = contentType.startsWith("text/html") ? "html" : "text"; data = await res.text(); } return { status: res.status, type, data }; }).catch((e) => { return { status: 400, type: "text", data: `Client side error: ${e instanceof Error ? `[${e.name}] ${e.message}` : e.toString()}` }; }); } }; } //#endregion export { createBrowserFetcher }; //# sourceMappingURL=fetcher.js.map