| Type | Command |
|---|---|
| Fetch-style runtimes | pnpm add @web-markdown/transform-fetch @web-markdown/converters |
| Express | pnpm add @web-markdown/adapters-express @web-markdown/converters |
| Next | pnpm add @web-markdown/adapters-next @web-markdown/converters |
import { createDefaultConverter } from "@web-markdown/converters";
import { transformFetchResponse } from "@web-markdown/transform-fetch";
const converter = createDefaultConverter({
mode: "content",
addFrontMatter: true,
});
export async function handle(request: Request): Promise<Response> {
const upstream = await fetch(request);
return transformFetchResponse(request, upstream, {
converter,
maxHtmlBytes: 3 * 1024 * 1024,
oversizeBehavior: "passthrough",
debugHeaders: false,
});
}Transform:
curl -i -H 'Accept: text/markdown' http://localhost:3000/docsPassthrough:
curl -i -H 'Accept: text/html,*/*' http://localhost:3000/docsWhat to check:
Vary: Acceptexists on both responses.Content-Typebecomestext/markdownonly when markdown is explicitly acceptable.- Status code and cache headers remain intact.
- Semantics and edge cases
- Converter options and metadata
- Framework integration guides: Express, Next.js