// @ts-check import { describe, expect, it } from 'vitest' import { mdxBodyToMarkdown } from '../mdxToMarkdown.mjs' describe('mdxBodyToMarkdown', () => { it('preserves plain markdown unchanged', async () => { const out = await mdxBodyToMarkdown('# Title\n\nA **bold** word.') expect(out).toContain('# Title') expect(out).toContain('**bold**') }) it('preserves code fences containing JSX literally', async () => { const src = [ '```tsx', 'function App() {', ' return hi', '}', '```', ].join('\n') const out = await mdxBodyToMarkdown(src) expect(out).toContain('hi') expect(out).toContain('```tsx') }) it('rewrites to a markdown image', async () => { const out = await mdxBodyToMarkdown('X') expect(out.trim()).toBe('![X](/x.png)') }) it('rewrites without alt', async () => { const out = await mdxBodyToMarkdown('') expect(out.trim()).toBe('![](/x.png)') }) it('rewrites to a labeled blockquote', async () => { const out = await mdxBodyToMarkdown('\n\nHeads up.\n\n') expect(out).toMatch(/^>\s+\*\*NOTE\*\*/m) expect(out).toContain('Heads up.') }) it('rewrites with caption to a blockquote with em-dash attribution', async () => { const out = await mdxBodyToMarkdown( '\n\nIt was great.\n\n' ) expect(out).toContain('> It was great.') expect(out).toContain('*— Jane Doe, CEO*') }) it('rewrites to a markdown link', async () => { const out = await mdxBodyToMarkdown('click') expect(out.trim()).toBe('[click](/x)') }) it('rewrites and to bold', async () => { const out = await mdxBodyToMarkdown('foo bar') expect(out).toContain('**foo**') expect(out).toContain('**bar**') }) it('drops entirely', async () => { const out = await mdxBodyToMarkdown(' rest') expect(out).not.toContain('Avatar') expect(out).toContain('rest') }) it('flattens unknown inline JSX to text, preserving inner content', async () => { const out = await mdxBodyToMarkdown('Some text with kept inline.') expect(out).toContain('kept') expect(out).toContain('Some text with') expect(out).toContain('inline.') expect(out).not.toContain(' { const out = await mdxBodyToMarkdown('hello {/* internal note */} world') expect(out).toContain('hello') expect(out).toContain('world') expect(out).not.toContain('internal') }) it('strips orphan mdxjsEsm imports at the top level', async () => { const src = "import X from 'y'\n\n# Title" const out = await mdxBodyToMarkdown(src) expect(out).toContain('# Title') expect(out).not.toContain('import') }) })