hyogen-md

0.10.0

renderServer

Renders a hyogen.md source string or file on the server. Use this for SSR, one-off server renders, and as the engine behind build.

import { renderServer } from '@b4moss/hyogen-md'

function renderServer(
  input: string | { path: string },
  context?: HyogenContext,
  options?: ServerRenderOptions,
): Promise<RenderResult>

Arguments

ArgumentDescription
inputSource string, or { path } to load via the loader
contextTemplate variables available in &#123;&#123; &#125;&#125; and @hg blocks
optionsLoader, root, output preservation, and serverContext

serverContext

Pass server-only data through options.serverContext. It is merged into the render context but is kept separate at the API level so you do not accidentally expose secrets to client bundles.

await renderServer('./page.md', { title: 'Docs' }, {
  serverContext: { secretToken: process.env.TOKEN },
})

renderClient rejects serverContext with error server_context_on_client.

Default loader

When options.loader is omitted, createNodeLoader() is used — local file reads plus remote https:// URLs on Node.

Example

const source = `
---
title: Hello
---

# {{ title }} {{ name }}
`

const { markdown, warnings } = await renderServer(source, { name: 'world' })

// warnings is an array of non-fatal HyogenWarning objects
console.log(markdown)

Return value

type RenderResult = {
  markdown: string   // rendered Markdown
  warnings: HyogenWarning[]
}

Fatal problems throw a HyogenError instead of returning. See Diagnostics and Error codes.