diff --git a/packages/fern-docs/bundle/src/server/llm-txt-md.test.ts b/packages/fern-docs/bundle/src/server/llm-txt-md.test.ts new file mode 100644 index 0000000000..77e3d407f6 --- /dev/null +++ b/packages/fern-docs/bundle/src/server/llm-txt-md.test.ts @@ -0,0 +1,186 @@ +import { convertToLlmTxtMarkdown } from "./llm-txt-md"; + +describe("llm-txt-md", () => { + describe("convertToLlmTxtMarkdown", () => { + it("should handle regular markdown without MDX components", () => { + const markdown = "# Test\n\nThis is regular markdown."; + const result = convertToLlmTxtMarkdown(markdown, "Test Page", "md"); + + expect(result).toContain("# Test Page"); + expect(result).toContain("This is regular markdown."); + }); + + it("should expand TSFetchCodeBlock components to code blocks", () => { + const markdown = `# Test + + +console.log("Hello, world!"); +`; + + const result = convertToLlmTxtMarkdown(markdown, "Test Page", "mdx"); + + expect(result).toContain("# Test Page"); + expect(result).toContain("```typescript"); + expect(result).toContain('console.log("Hello, world!");'); + expect(result).not.toContain(""); + }); + + it("should expand CodeGroup components to multiple code blocks", () => { + const markdown = `# Test + + + +console.log("JS code"); + + +print("Python code") + +`; + + const result = convertToLlmTxtMarkdown(markdown, "Test Page", "mdx"); + + expect(result).toContain("# Test Page"); + expect(result).toContain("```javascript"); + expect(result).toContain('console.log("JS code");'); + expect(result).toContain("```python"); + expect(result).toContain('print("Python code")'); + expect(result).not.toContain(""); + expect(result).not.toContain(" { + const markdown = `# Test + +`; + + const result = convertToLlmTxtMarkdown(markdown, "Test Page", "mdx"); + + expect(result).toContain("# Test Page"); + expect(result).toContain("Use your API key: test-key-123"); + expect(result).toContain("Base URL: https://api.example.com"); + expect(result).not.toContain(" { + const markdown = `# Test + +Your free credits threshold is {{FREE_MODEL_CREDITS_THRESHOLD}}. +Use API key: {{API_KEY_REF}}`; + + const result = convertToLlmTxtMarkdown(markdown, "Test Page", "mdx"); + + expect(result).toContain("# Test Page"); + expect(result).toContain("Your free credits threshold is 10"); + expect(result).toContain("Use API key: your-api-key"); + expect(result).not.toContain("{{FREE_MODEL_CREDITS_THRESHOLD}}"); + expect(result).not.toContain("{{API_KEY_REF}}"); + }); + + it("should handle mixed content with multiple component types", () => { + const markdown = `# Mixed Content Test + +Regular markdown paragraph. + + +const apiKey = "{{API_KEY_REF}}"; + + + + + + +curl -H "Authorization: Bearer {{API_KEY_REF}}" + + + +More regular content with {{FREE_MODEL_CREDITS_THRESHOLD}} credits.`; + + const result = convertToLlmTxtMarkdown(markdown, "Mixed Test", "mdx"); + + expect(result).toContain("# Mixed Test"); + expect(result).toContain("Regular markdown paragraph."); + expect(result).toContain("```typescript"); + expect(result).toContain('const apiKey = "your-api-key";'); + expect(result).toContain("Hello Alice!"); + expect(result).toContain("```bash"); + expect(result).toContain('curl -H "Authorization: Bearer your-api-key"'); + expect(result).toContain("More regular content with 10 credits."); + + expect(result).not.toContain(""); + expect(result).not.toContain(""); + expect(result).not.toContain("{{"); + }); + + it("should handle empty or malformed components gracefully", () => { + const markdown = `# Edge Cases + + + + + + + +Regular content continues.`; + + const result = convertToLlmTxtMarkdown(markdown, "Edge Cases", "mdx"); + + expect(result).toContain("# Edge Cases"); + expect(result).toContain("Regular content continues."); + expect(result).not.toContain(""); + expect(result).not.toContain(""); + expect(result).not.toContain("