@mintlify/prebuild
Version:
Helpful functions for Mintlify's prebuild step
41 lines (40 loc) • 1.84 kB
JavaScript
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',
});
};