UNPKG

@humanspeak/svelte-markdown

Version:

Markdown and HTML renderer for Svelte 5 — built for rendering streaming AI agent output from Claude Code, ChatGPT, and agentic workflows. XSS-safe defaults, streaming-aware sanitization, token caching, TypeScript types, and Svelte 5 runes.

40 lines (39 loc) 1.81 kB
import type { SvelteMarkdownOptions } from '../types.js'; import type { Token, TokensList } from './markdown-parser.js'; export interface RenderPreparation { source?: string; startIndex?: number; startOffset?: number; } export interface RenderMetadata { prepareTokensForRender: (_tokens: Token[] | TokensList | undefined, _options: SvelteMarkdownOptions, _preparation?: RenderPreparation) => Token[] | TokensList | undefined; getPreparedHeadingId: (_node: unknown) => string | undefined; getStableNodeKey: (_node: unknown, _index: number) => unknown; getStableRowKey: (_row: unknown[] | undefined, _index: number) => unknown; } export declare const RENDER_METADATA_CONTEXT: unique symbol; /** * Creates a per-`SvelteMarkdown`-instance render metadata helper. State * (render keys, precomputed heading ids, source offsets, and cross-pass * bookkeeping) is captured in the returned closure via WeakMaps keyed by token * objects, so each component instance gets isolated metadata and caller token * arrays are never mutated. See the module overview above for the keying and * heading-id strategy. * * @returns A {@link RenderMetadata} whose methods precompute per-pass metadata * (`prepareTokensForRender`) and read it back during render * (`getPreparedHeadingId`, `getStableNodeKey`, `getStableRowKey`). * @example * ```ts * const metadata = createRenderMetadata() * // Streaming append: skip the stable prefix via the parser's diverge point. * const tokens = metadata.prepareTokensForRender(rawTokens, options, { * source, * startIndex, * startOffset * }) * const key = metadata.getStableNodeKey(tokens?.[0], 0) * const id = metadata.getPreparedHeadingId(tokens?.[0]) * ``` */ export declare const createRenderMetadata: () => RenderMetadata;