vitepress-openapi
Version:
Generate VitePress API Documentation from OpenAPI Specification.
41 lines (32 loc) • 1.1 kB
text/typescript
import type { ParsedContent, ParsedOpenAPI, ParsedOperation } from '../../types'
import { httpVerbs } from '../../index'
import { getSchemaExample } from '../examples/getSchemaExample'
import { getSchemaUi } from './getSchemaUi'
export function generateRequestBodyUi(spec: ParsedOpenAPI): ParsedOpenAPI {
if (!spec.paths) {
return spec
}
for (const path of Object.values(spec.paths)) {
for (const verb of httpVerbs) {
const operation = (path as Record<string, any>)[verb] as ParsedOperation
if (!operation) {
continue
}
if (!operation.requestBody) {
continue
}
for (const [contentType, content] of Object.entries(operation.requestBody.content || {})) {
const parsedContent = content as ParsedContent
if (!parsedContent.schema) {
continue
}
parsedContent.ui = getSchemaUi(parsedContent.schema)
parsedContent.examples = {
...(parsedContent.examples || {}),
...getSchemaExample(contentType, parsedContent.ui, true),
}
}
}
}
return spec
}