@mintlify/previewing
Version:
Preview Mintlify docs locally
61 lines (60 loc) • 2.84 kB
JavaScript
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');
});
});