UNPKG

@mintlify/validation

Version:

Validates mint.json files

76 lines (75 loc) 3.09 kB
import hash from 'object-hash'; import { v4 as uuidv4 } from 'uuid'; import { mapParameter } from './mapParameter.js'; import { mapRequestBody } from './mapRequestBody.js'; import { mapResponse } from './mapResponse.js'; import { mapSecurityRequirement } from './mapSecurityRequirement.js'; export const mapOperation = ({ operation, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, method, isWebhook, }) => { var _a; const objectHash = hash(operation); uuidObjectHashMap[uuid] = objectHash; // parameters if ('parameters' in operation) { const parameterUuids = []; (_a = operation.parameters) === null || _a === void 0 ? void 0 : _a.forEach((parameter) => { const uuid = uuidv4(); mapParameter({ parameter, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid }); parameterUuids.push(uuid); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any operation.parameters = parameterUuids; } // requestBody if ('requestBody' in operation && operation.requestBody !== undefined) { const uuid = uuidv4(); mapRequestBody({ requestBody: operation.requestBody, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any operation.requestBody = uuid; } // responses if ('responses' in operation && operation.responses) { Object.entries(operation.responses).forEach(([statusCode, response]) => { const uuid = uuidv4(); mapResponse({ response, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid }); if (operation.responses) { // eslint-disable-next-line @typescript-eslint/no-explicit-any operation.responses[statusCode] = uuid; } }); } // callbacks (TODO: add support for callbacks) // security if ('security' in operation && operation.security) { const securityUuids = []; operation.security.forEach((security) => { const uuid = uuidv4(); mapSecurityRequirement({ security, refUuidMap, uuidObjectHashMap, hashedNodeMap, uuid }); securityUuids.push(uuid); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any operation.security = securityUuids; } // servers if ('servers' in operation && operation.servers) { const serverUuids = []; operation.servers.forEach((server) => { const uuid = uuidv4(); const objectHash = hash(server); uuidObjectHashMap[uuid] = objectHash; hashedNodeMap[objectHash] = server; serverUuids.push(uuid); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any operation.servers = serverUuids; } operation.method = method; operation.type = isWebhook ? 'webhook' : 'path'; // add to hashedNodeMap hashedNodeMap[objectHash] = operation; };