UNPKG

@mintlify/common

Version:

Commonly shared code within Mintlify

93 lines (92 loc) 3.81 kB
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; };