@mintlify/validation
Version:
Validates mint.json files
76 lines (75 loc) • 3.09 kB
JavaScript
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;
};