@mintlify/common
Version:
Commonly shared code within Mintlify
93 lines (92 loc) • 3.81 kB
JavaScript
import { generateExampleFromSchema } from '@mintlify/validation';
export const getExamplesData = ({ message, jsonSchema, payloadSchema, extensions, }) => {
var _a, _b, _c, _d, _e;
const id = message.id().toLowerCase();
const examples = message.examples();
const hasInlineExamples = examples.length > 0;
if (hasInlineExamples) {
const example = (_b = (_a = examples[0]) === null || _a === void 0 ? void 0 : _a['_json']) === null || _b === void 0 ? void 0 : _b['payload'];
return JSON.stringify(example, null, 2);
}
const jsonExamples = [
...((_c = jsonSchema['examples']) !== null && _c !== void 0 ? _c : []),
...((_e = (_d = jsonSchema['schema']) === null || _d === void 0 ? void 0 : _d['examples']) !== null && _e !== void 0 ? _e : []),
];
const hasJsonExamples = jsonExamples.length > 0;
if (hasJsonExamples) {
return JSON.stringify(jsonExamples[0], null, 2);
}
const extensionExamples = createMessageExamplesMap(extensions);
const hasExtensionExamples = extensionExamples.has(id);
if (hasExtensionExamples) {
return JSON.stringify(extensionExamples.get(id), null, 2);
}
if (payloadSchema) {
const generatedExample = generateMessageExample(payloadSchema);
if (generatedExample) {
return JSON.stringify(generatedExample, null, 2);
}
else {
return 'No examples found';
}
}
else {
return 'No examples found';
}
};
const generateMessageExample = (payloadSchema) => {
const schema = {
type: 'object',
properties: payloadSchema.reduce((acc, schema) => {
if (schema.properties) {
return Object.assign(Object.assign({}, acc), schema.properties.reduce((props, prop) => {
if (prop.properties) {
return Object.assign(Object.assign({}, props), { [prop.name]: [
{
type: 'object',
properties: prop.properties.reduce((nestedProps, nestedProp) => (Object.assign(Object.assign({}, nestedProps), { [nestedProp.name]: [
{
type: nestedProp.type,
required: nestedProp.required,
description: nestedProp.description,
},
] })), {}),
},
] });
}
return Object.assign(Object.assign({}, props), { [prop.name]: [
{
type: prop.type,
required: prop.required,
description: prop.description,
},
] });
}, {}));
}
return acc;
}, {}),
};
try {
const example = generateExampleFromSchema(schema, 0);
return example;
}
catch (error) {
console.error('Error generating example from schema', error);
return null;
}
};
const createMessageExamplesMap = (extensions) => {
const examplesMap = new Map();
const examplesExt = extensions.find((ext) => ext.id.match(/^x-.*examples$/));
if (!examplesExt)
return examplesMap;
examplesExt.value.forEach((item) => {
item.messages.forEach((message) => {
const id = message.messageId.toLowerCase();
examplesMap.set(id, {
value: message.value,
});
});
});
return examplesMap;
};