@svengroup/openapi-to-pdf
Version:
Create PDF API reference documentation from OpenAPI 3.0.x specification files.
149 lines (148 loc) • 5.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParametersIn = getParametersIn;
exports.generateParametersMarkdown = generateParametersMarkdown;
exports.generateParameterTitleMarkdown = generateParameterTitleMarkdown;
exports.generateParametersTableMarkdown = generateParametersTableMarkdown;
exports.generateParameterTableRowMarkdown = generateParameterTableRowMarkdown;
exports.generateParameterTableRowTypeColMarkdown = generateParameterTableRowTypeColMarkdown;
exports.generateParameterTableRowRequiredColMarkdown = generateParameterTableRowRequiredColMarkdown;
exports.generateRequestBodyMarkdown = generateRequestBodyMarkdown;
const schema_1 = require("../../markdown/schema");
const _1 = require(".");
function getParametersIn(used_in, parameters) {
if (!parameters) {
return [];
}
let parameters_in = [];
for (const parameter of parameters) {
if (parameter.in === used_in) {
parameters_in = [...parameters_in, parameter];
}
}
return parameters_in;
}
function generateParametersMarkdown(h, used_in, parameters) {
let endpoints_str = "";
endpoints_str += generateParameterTitleMarkdown(h, used_in);
const parameters_in = getParametersIn(used_in, parameters);
if (parameters_in.length < 1) {
switch (used_in) {
case "path":
endpoints_str += "No Path Parameters.";
break;
case "query":
endpoints_str += "No Query Parameters.";
break;
case "header":
endpoints_str += "No Specific Request Headers";
break;
case "cookie":
endpoints_str += "No Cookies.";
break;
default:
endpoints_str += "No Parameters.";
break;
}
endpoints_str += "\n\n";
}
else {
endpoints_str += generateParametersTableMarkdown(parameters_in);
}
return endpoints_str;
}
function generateParameterTitleMarkdown(h, used_in) {
let endpoints_str = "";
switch (used_in) {
case "path":
endpoints_str += `${h}### Path Parameters`;
break;
case "query":
endpoints_str += `${h}### Query Parameters`;
break;
case "header":
endpoints_str += `${h}### Request Headers`;
break;
case "cookie":
endpoints_str += `${h}### Cookies`;
break;
default:
break;
}
endpoints_str += "\n\n";
return endpoints_str;
}
function generateParametersTableMarkdown(parameters) {
let endpoints_str = "";
endpoints_str += "|Key|Type|Required|Example|Notes|\n";
endpoints_str += "|-|-|-|-|-|\n";
for (const parameter of parameters) {
endpoints_str += generateParameterTableRowMarkdown(parameter);
}
endpoints_str += "\n\n";
return endpoints_str;
}
function generateParameterTableRowMarkdown(parameter) {
let endpoints_str = "";
/** @ts-expect-error we resolve all references */
let schema = parameter.schema;
schema = schema ? (0, schema_1.handleAllOf)(schema) : undefined;
const input_schema = schema ?? {}; // for input in schema functions
if (schema?.readOnly) {
return ""; // override if readonly
}
if (schema?.anyOf || schema?.oneOf) {
return (0, schema_1.generateOneAnyOfSchemaTableRowMarkdown)(parameter.name, schema, parameter.required ? [parameter.name] : [], 'request');
}
/* NAME */
endpoints_str += `|${parameter.name}`;
/* TYPE */
endpoints_str += generateParameterTableRowTypeColMarkdown(schema);
/* REQUIRED */
endpoints_str += generateParameterTableRowRequiredColMarkdown(parameter);
/* EXAMPLE */
endpoints_str += (0, schema_1.generateSchemaTableRowExampleColMarkdown)(input_schema);
/* NESTED */
endpoints_str += (0, schema_1.generateSchemaNotesMarkdown)(schema);
/* NESTED */
endpoints_str += (0, schema_1.generateNestedSchemaTableRowMarkdown)(parameter.name, input_schema, 'request');
return endpoints_str;
}
function generateParameterTableRowTypeColMarkdown(schema) {
let endpoints_str = "";
endpoints_str += `|${schema?.type ?? '-'}`;
return endpoints_str;
}
function generateParameterTableRowRequiredColMarkdown(parameter) {
let endpoints_str = "";
if (parameter.required) {
endpoints_str += `|Yes`;
}
else {
endpoints_str += `|No`;
}
return endpoints_str;
}
function generateRequestBodyMarkdown(h, body) {
let endpoints_str = "";
endpoints_str += `${h}### Request Body`;
endpoints_str += "\n\n";
if (body) {
if (body.required) {
endpoints_str += "Required.";
endpoints_str += "\n\n";
}
if (body.description) {
endpoints_str += body.description;
endpoints_str += "\n\n";
}
for (const [media_type, obj] of Object.entries(body.content)) {
endpoints_str += (0, _1.generateMediaTypeMarkdown)(media_type, obj, 'request');
}
}
else {
endpoints_str += "No Request Body.";
endpoints_str += "\n\n";
}
return endpoints_str;
}