UNPKG

@mintlify/prebuild

Version:

Helpful functions for Mintlify's prebuild step

41 lines (40 loc) 1.84 kB
import { removeLeadingSlash, isAbsoluteUrl } from '@mintlify/common'; import { openApiToSchemaGraph, isOpenAPIV3orV31Document } from '@mintlify/validation'; import fse from 'fs-extra'; import { v4 as uuidv4 } from 'uuid'; export const writeOpenApiData = async (openApiFiles) => { const openApiDataPath = 'src/_props/openApiData'; await fse.remove(openApiDataPath); const indexFilePath = `${openApiDataPath}/openApiDataFiles.json`; const fileToLocalUuidMap = {}; const localUuidToRefsMap = {}; for (const file of openApiFiles) { const localUuid = uuidv4(); const filePath = `${openApiDataPath}/${localUuid}.json`; const originalFileLocation = file.originalFileLocation || file.filename; const trimmedOriginalFileLocation = isAbsoluteUrl(originalFileLocation) ? originalFileLocation : removeLeadingSlash(originalFileLocation); if (isOpenAPIV3orV31Document(file.spec)) { const clonedSpec = JSON.parse(JSON.stringify(file.spec)); const graphData = openApiToSchemaGraph({ spec: clonedSpec, filename: file.filename, originalFileLocation: trimmedOriginalFileLocation, }); fileToLocalUuidMap[trimmedOriginalFileLocation] = localUuid; localUuidToRefsMap[localUuid] = { originalFileLocation: trimmedOriginalFileLocation, filename: file.filename, refs: graphData.spec.refUuidMap, }; await fse.outputFile(filePath, JSON.stringify(graphData), { flag: 'w', }); } } const fileIndexData = { files: fileToLocalUuidMap, refs: localUuidToRefsMap }; await fse.outputFile(indexFilePath, JSON.stringify(fileIndexData), { flag: 'w', }); };