UNPKG

@scalar/api-reference

Version:

Generate beautiful API references from OpenAPI documents

46 lines (45 loc) 1.39 kB
import { isDefined, isJsonString } from "@scalar/oas-utils/helpers"; import { toJson, normalize, toYaml } from "@scalar/openapi-parser"; function formatContent(content, isJson) { if (isJson && !isJsonString(content)) { return toJson(normalize(content)); } if (!isJson && isJsonString(content)) { return toYaml(normalize(content)); } return content; } function createClickEvent() { try { return new MouseEvent("click", { bubbles: true, cancelable: true, view: window }); } catch { return new MouseEvent("click", { bubbles: true, cancelable: true }); } } function downloadDocument(content, filename, format) { const isJson = format === "json" || !isDefined(format) && isJsonString(content); const formattedContent = formatContent(content, isJson); const extension = isJson ? ".json" : ".yaml"; const mimeType = isJson ? "application/json" : "application/x-yaml"; const contentFilename = filename ? filename + extension : "openapi" + extension; const blob = new Blob([formattedContent], { type: mimeType }); const data = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = data; link.download = contentFilename; link.dispatchEvent(createClickEvent()); setTimeout(() => { window.URL.revokeObjectURL(data); link.remove(); }, 100); } export { downloadDocument };