@scalar/api-reference
Version:
Generate beautiful API references from OpenAPI documents
46 lines (45 loc) • 1.39 kB
JavaScript
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
};