@mintlify/prebuild
Version:
Helpful functions for Mintlify's prebuild step
43 lines (42 loc) • 1.62 kB
JavaScript
import { validate } from '@mintlify/common';
import { readFile } from 'fs/promises';
import yaml from 'js-yaml';
import * as path from 'path';
import { getFileList } from '../fs/index.js';
import { getFileExtension } from '../utils.js';
import { addWarning } from './warnings.js';
export const getOpenApiFiles = async (contentDirectoryPath, { mintIgnore = [], disableOpenApi = false } = {}) => {
if (disableOpenApi)
return [];
const allFiles = getFileList(contentDirectoryPath, contentDirectoryPath, mintIgnore);
const openApiFiles = [];
for await (const filename of allFiles) {
const extension = getFileExtension(filename);
if (extension !== 'json' && extension !== 'yaml' && extension !== 'yml')
continue;
const filePath = path.join(contentDirectoryPath, filename);
const str = await readFile(filePath, 'utf8');
const obj = yaml.load(str);
if (!obj || typeof obj !== 'object')
continue;
if (!Object.keys(obj).includes('openapi'))
continue;
try {
const { schema: openApiDocument } = await validate(obj);
if (openApiDocument) {
openApiFiles.push({
filename: path.parse(filename).name,
spec: obj,
originalFileLocation: filename,
});
}
}
catch (error) {
addWarning({
type: 'openapi',
message: `Error validating OpenAPI file ${filename}: ${error}`,
});
}
}
return openApiFiles;
};