mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
import React from "react";
|
|
import { renderToString } from "react-dom/server";
|
|
import ReactMarkdown from "react-markdown";
|
|
|
|
const markdown = `# Project README
|
|
|
|
## Introduction
|
|
|
|
This is a medium-sized markdown document that includes **bold text**, *italic text*,
|
|
and \`inline code\`. It also has [links](https://example.com) and various formatting.
|
|
|
|
## Features
|
|
|
|
- Feature one with **bold**
|
|
- Feature two with *emphasis*
|
|
- Feature three with \`code\`
|
|
- Feature four with [a link](https://example.com)
|
|
|
|
## Code Example
|
|
|
|
\`\`\`javascript
|
|
function hello() {
|
|
console.log("Hello, world!");
|
|
return 42;
|
|
}
|
|
|
|
const result = hello();
|
|
\`\`\`
|
|
|
|
## Table
|
|
|
|
| Name | Value | Description |
|
|
|------|-------|-------------|
|
|
| foo | 1 | First item |
|
|
| bar | 2 | Second item |
|
|
| baz | 3 | Third item |
|
|
|
|
## Blockquote
|
|
|
|
> This is a blockquote with **bold** and *italic* text.
|
|
> It spans multiple lines and contains a [link](https://example.com).
|
|
|
|
---
|
|
|
|
### Nested Lists
|
|
|
|
1. First ordered item
|
|
- Nested unordered
|
|
- Another nested
|
|
2. Second ordered item
|
|
1. Nested ordered
|
|
2. Another nested
|
|
3. Third ordered item
|
|
|
|
Some final paragraph with ~~strikethrough~~ text and more **formatting**.
|
|
`;
|
|
|
|
// Verify outputs are roughly the same
|
|
const bunHtml = renderToString(Bun.markdown.react(markdown));
|
|
const reactMarkdownHtml = renderToString(React.createElement(ReactMarkdown, { children: markdown }));
|
|
|
|
console.log("=== Bun.markdown.react output ===");
|
|
console.log(bunHtml.slice(0, 500));
|
|
console.log(`... (${bunHtml.length} chars total)\n`);
|
|
|
|
console.log("=== react-markdown output ===");
|
|
console.log(reactMarkdownHtml.slice(0, 500));
|
|
console.log(`... (${reactMarkdownHtml.length} chars total)\n`);
|
|
|
|
const server = Bun.serve({
|
|
port: 0,
|
|
routes: {
|
|
"/bun-markdown": () => {
|
|
return new Response(renderToString(Bun.markdown.react(markdown)), {
|
|
headers: { "Content-Type": "text/html" },
|
|
});
|
|
},
|
|
"/react-markdown": () => {
|
|
return new Response(renderToString(React.createElement(ReactMarkdown, { children: markdown })), {
|
|
headers: { "Content-Type": "text/html" },
|
|
});
|
|
},
|
|
},
|
|
});
|
|
|
|
console.log(`Server listening on ${server.url}`);
|
|
console.log(` ${server.url}bun-markdown`);
|
|
console.log(` ${server.url}react-markdown`);
|
|
console.log();
|
|
console.log("Run:");
|
|
console.log(` oha -c 20 -z 5s ${server.url}bun-markdown`);
|
|
console.log(` oha -c 20 -z 5s ${server.url}react-markdown`);
|