import { resolveConfig } from 'node/config' import { createMarkdownToVueRenderFn } from 'node/markdownToVue' import { mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import path from 'node:path' describe('node/markdownToVue', () => { let root: string | undefined afterEach(async () => { if (root) { await rm(root, { recursive: true, force: true }) root = undefined } }) test('records source line numbers for dead links', async () => { root = await mkdtemp(path.join(tmpdir(), 'vitepress-dead-link-')) const file = path.join(root, 'index.md') const src = '# Home\n\nIntro\n\n[Missing](./missing.md)\n' await writeFile(file, src) const siteConfig = await resolveConfig(root, 'build', 'production') const render = await createMarkdownToVueRenderFn( siteConfig.srcDir, { cache: false }, '/', false, false, siteConfig ) const result = await render(src, file) expect(result.deadLinks).toContainEqual({ url: './missing', file, line: 5 }) }) test('records source line numbers after frontmatter', async () => { root = await mkdtemp(path.join(tmpdir(), 'vitepress-dead-link-')) const file = path.join(root, 'index.md') const src = '---\ntitle: Home\n---\n# Home\n\nIntro\n\n[Missing](./missing.md)\n' await writeFile(file, src) const siteConfig = await resolveConfig(root, 'build', 'production') const render = await createMarkdownToVueRenderFn( siteConfig.srcDir, { cache: false }, '/', false, false, siteConfig ) const result = await render(src, file) expect(result.deadLinks).toContainEqual({ url: './missing', file, line: 8 }) }) test('selects included heading sections after frontmatter', async () => { root = await mkdtemp(path.join(tmpdir(), 'vitepress-include-')) const file = path.join(root, 'index.md') const source = path.join(root, 'source.md') await writeFile( source, [ '---', 'description: Source description', '---', '# Intro', '', 'intro text', '', '## Shared', '', 'shared before target', '', '## Target', '', 'target text', '', '### Child', '', 'child text', '', '## Shared', '', 'shared after target', '' ].join('\n') ) const src = '' await writeFile(file, src) const siteConfig = await resolveConfig(root, 'build', 'production') const render = await createMarkdownToVueRenderFn( siteConfig.srcDir, { cache: false }, '/', false, false, siteConfig ) const result = await render(src, file) expect(result.vueSrc).toContain('
target text
') expect(result.vueSrc).toContain('