UNPKG

@mintlify/previewing

Version:

Preview Mintlify docs locally

61 lines (60 loc) 2.84 kB
import { findAndRemoveImports, replaceVariables } from '@mintlify/common'; import { preparseMdxTree } from '@mintlify/prebuild'; import fse from 'fs-extra'; import { mkdtemp, rm } from 'fs/promises'; import { tmpdir } from 'os'; import { join } from 'path'; const testPaths = vi.hoisted(() => ({ cmd: '', public: '', })); vi.mock('../constants.js', () => ({ get CMD_EXEC_PATH() { return testPaths.cmd; }, get NEXT_PUBLIC_PATH() { return testPaths.public; }, })); vi.mock('../local-preview/listener/utils.js', () => ({ getCurrentVariables: vi.fn(async () => ({ name: 'Ada' })), handleParseError: vi.fn(), normalizePathForComparison: (path) => { const normalized = path.startsWith('/') ? path : `/${path}`; return normalized.toLowerCase(); }, suppressParseError: vi.fn(), })); import { generateDependentSnippets } from '../local-preview/listener/generateDependentSnippets.js'; import { initializeImportCache } from '../local-preview/listener/importCache.js'; describe('generateDependentSnippets', () => { let root; beforeEach(async () => { root = await mkdtemp(join(tmpdir(), 'generate-dependent-snippets-')); testPaths.cmd = join(root, 'docs'); testPaths.public = join(root, 'public'); await fse.ensureDir(testPaths.cmd); await fse.ensureDir(testPaths.public); }); afterEach(async () => { await rm(root, { recursive: true, force: true }); }); it('regenerates legacy snippet importers of changed v2 snippets', async () => { await fse.outputFile(join(testPaths.cmd, 'snippets/base.mdx'), 'export const Base = () => <span>{{name}}</span>;'); await fse.outputFile(join(testPaths.cmd, '_snippets/legacy.mdx'), "import { Base } from '../snippets/base.mdx';\n\n<Base />"); await initializeImportCache(testPaths.cmd, new Map([ ['/snippets/base.mdx', new Set()], ['/_snippets/legacy.mdx', new Set(['/snippets/base.mdx'])], ])); const changedSourcePath = join(testPaths.cmd, 'snippets/base.mdx'); const changedContent = replaceVariables((await fse.readFile(changedSourcePath)).toString(), { name: 'Ada', }); const changedTree = await preparseMdxTree(changedContent, testPaths.cmd, changedSourcePath, vi.fn()); const changedImportData = await findAndRemoveImports(changedTree); const updatedSnippets = await generateDependentSnippets('snippets/base.mdx', changedImportData); expect(updatedSnippets).toEqual(['snippets/base.mdx', '_snippets/legacy.mdx']); expect(await fse.pathExists(join(testPaths.public, '_snippets/legacy.mdx'))).toBe(true); expect((await fse.readFile(join(testPaths.public, '_snippets/legacy.mdx'))).toString()).toContain('Ada'); }); });