UNPKG

@redocly/respect-core

Version:
62 lines 2.56 kB
import { isPlainObject } from '@redocly/openapi-core'; import { generateTestDataFromJsonSchema, generateExampleValue, } from '../arazzo-description-generator/index.js'; import { extractFirstExample } from './extract-first-example.js'; import { isParameterWithIn } from '../context-parser/index.js'; export function getRequestDataFromOpenApi(operation, logger) { const content = operation?.requestBody?.content || {}; const [contentType, contentItem] = Object.entries(content)[0] || []; const requestBody = contentItem?.example || extractFirstExample(contentItem?.examples) || generateTestDataFromJsonSchema(contentItem?.schema, logger); const accept = getAcceptHeader(operation); const parameters = getUniqueParameters([ ...transformParameters(operation.pathParameters, logger), ...transformParameters(operation.parameters, logger), ]).filter(({ value }) => value); return { parameters, contentTypeParameters: [ ...(contentType ? [{ name: 'content-type', in: 'header', value: contentType }] : []), ...(accept ? [{ name: 'accept', in: 'header', value: accept }] : []), ], requestBody, contentType, }; } function getAcceptHeader(descriptionOperation) { return descriptionOperation?.responses ? Array.from(new Set(Object.values(descriptionOperation.responses).flatMap((response) => { if (isPlainObject(response) && 'content' in response) { return Object.keys(response.content || {}); } return []; }))).join(', ') : undefined; } function transformParameters(params, logger) { return (params || []) .filter((parameter) => parameter?.required === true) .map((parameter) => { if (isParameterWithIn(parameter)) { return { name: parameter.name, in: parameter.in, value: generateExampleValue(parameter, logger), }; } // Return undefined for non-matching parameters return undefined; }) .filter((parameter) => parameter !== undefined); } function getUniqueParameters(parameters) { const uniqParameters = {}; for (const parameter of parameters) { if (!isParameterWithIn(parameter)) { continue; } uniqParameters[(parameter.name + ':' + parameter.in).toLowerCase()] = parameter; } return Object.values(uniqParameters); } //# sourceMappingURL=get-request-data-from-openapi.js.map