UNPKG

@mintlify/prebuild

Version:

Helpful functions for Mintlify's prebuild step

51 lines (50 loc) 2.59 kB
import { hasImports, findAndRemoveImports, getDecoratedNavPageAndSlug, parseFrontmatter, } from '@mintlify/common'; import { promises as _promises } from 'fs'; import { join } from 'path'; import { preparseMdxTree } from '../../../createPage/preparseMdx/index.js'; const { readFile } = _promises; export const readPageContents = async ({ contentDirectoryPath, openApiFiles, asyncApiFiles, contentFilenames, pagesAcc, }) => { const filesWithImports = []; const pagePromises = contentFilenames.map(async (filename) => { const sourcePath = join(contentDirectoryPath, filename); const targetPath = join('src', '_props', filename); try { const contentStr = (await readFile(sourcePath)).toString(); const tree = await preparseMdxTree(contentStr, contentDirectoryPath, sourcePath); const importsResponse = await findAndRemoveImports(tree); if (hasImports(importsResponse)) { let metadata; try { metadata = parseFrontmatter(contentStr).attributes; } catch (error) { } filesWithImports.push({ ...importsResponse, filename, metadata, contentDirectoryPath, }); return; } const { slug, pageMetadata } = getDecoratedNavPageAndSlug(filename, contentStr, openApiFiles, asyncApiFiles); pagesAcc[slug] = pageMetadata; return { targetPath, sourcePath, tree, metadata: pageMetadata }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred reading and parsing file.'; console.error(`${sourcePath}: ${errorMessage}`); throw new Error('Failed to parse MDX files, please correct errors before continuing'); } }); const mdxFilesWithNoImports = (await Promise.all(pagePromises)).filter((item) => item !== undefined); return { mdxFilesWithNoImports, pagesAcc, filesWithImports }; }; export const readSnippetsV2Contents = (contentDirectoryPath, snippetV2Filenames) => { const snippetV2Promises = snippetV2Filenames.map(async (filename) => { const sourcePath = join(contentDirectoryPath, filename); const contentStr = await readFile(sourcePath, 'utf8'); const tree = await preparseMdxTree(contentStr, contentDirectoryPath, sourcePath); return { filename, tree }; }); return Promise.all(snippetV2Promises); };