Appearance
Types
Complete TypeScript type definitions exported by @generative-dom/core.
Token Types
Token
The intermediate representation produced by the tokenizer and consumed by the renderer.
ts
interface Token {
/** Token type identifier matching the originating plugin. */
type: string;
/** The raw markdown source for this token. */
raw: string;
/** Child tokens for nested structures (e.g., list items inside a list). */
children?: Token[];
/** Text content of the token (e.g., inner text of an inline span). */
content?: string;
/** Plugin-specific metadata carried through from the match phase. */
meta?: Record<string, unknown>;
}BlockMatch
Returned by matchBlock() when a plugin matches block-level content.
ts
interface BlockMatch {
/** Token type identifier (e.g., "heading", "code-fence"). */
type: string;
/** The raw markdown source that was matched. */
raw: string;
/** Number of characters consumed from the buffer. */
consumed: number;
/** Inner content to be further parsed (e.g., list-item text). */
children?: string;
/** Plugin-specific metadata attached to the match. */
meta?: Record<string, unknown>;
}InlineMatch
Returned by matchInline() when a plugin matches inline content.
ts
interface InlineMatch {
/** Token type identifier (e.g., "bold", "link"). */
type: string;
/** The raw markdown source that was matched. */
raw: string;
/** Number of characters consumed from the text. */
consumed: number;
/** Inner content (e.g., the text inside **bold**). */
content?: string;
/** Plugin-specific metadata attached to the match. */
meta?: Record<string, unknown>;
}Configuration Types
Generative DOMOptions
Options passed to the Generative DOM constructor.
ts
interface GenerativeDomOptions {
/** The DOM element that GenerativeDom will render into. */
container: HTMLElement;
/** Minimum interval in milliseconds between renders. Default: 16. */
debounceMs?: number;
/** Container width in CSS pixels, 'auto', or undefined if not set. */
width?: number | "auto";
/** Container height in CSS pixels, 'auto', or undefined if not set. */
height?: number | "auto";
/** Plugins to register. Order matters for priority ties. */
plugins?: GenerativeDomPlugin[];
/** Structured error reporting callback. */
onError?: (error: GenerativeDomError) => void;
/** Override the DOM factory used internally (useful for testing / SSR). */
domFactory?: DOMFactory;
/** Override the timing provider used by the scheduler (useful for testing). */
timingProvider?: TimingProvider;
/** Maximum unconsumed bytes before `push()` returns `false` (backpressure). */
highWaterMark?: number;
/** Maximum number of "live" tokens retained for diffing. Default: 256. */
maxLiveTokens?: number;
/** Enable `getReceivedText()` / `getReceivedChunks()`. Default: false. */
debug?: boolean;
/** Structured pipeline logging configuration. See Logging guide. */
log?: LogConfig;
}GlobalSettings
Read-only settings exposed to plugins via context objects.
ts
interface GlobalSettings {
/** Container width in CSS pixels, 'auto', or undefined if not set. */
width?: number | "auto";
/** Container height in CSS pixels, 'auto', or undefined if not set. */
height?: number | "auto";
/** Minimum interval in milliseconds between renders. */
debounceMs: number;
/** GenerativeDom semver version string. */
version: string;
}Plugin Types
Generative DOMPlugin
The interface that all plugins must implement.
ts
interface GenerativeDomPlugin {
name: string;
priority: number;
init?(ctx: PluginContext): void;
matchBlock?(buffer: string, pos: number): BlockMatch | null;
matchInline?(text: string, pos: number): InlineMatch | null;
render(token: Token, ctx: RenderContext): HTMLElement | Text | null;
cleanup?(element: HTMLElement): void;
destroy?(): void;
}See Plugin Interface for detailed documentation of each method.
PluginContext
Context received during plugin initialization.
ts
interface PluginContext {
emit(event: string, data: unknown): void;
pool: ObjectPool;
settings: Readonly<GlobalSettings>;
getPlugin(
name: string,
): Readonly<Pick<GenerativeDomPlugin, "name" | "priority">> | undefined;
onDestroy(callback: () => void): void;
}RenderContext
Context received during each render() call.
ts
interface RenderContext {
renderInline(text: string): DocumentFragment;
pool: ObjectPool;
createElement(tag: string): HTMLElement;
createText(content: string): Text;
settings: Readonly<GlobalSettings>;
container: Readonly<HTMLElement>;
emit(event: string, data: unknown): void;
}Pool Types
ObjectPool
ts
interface ObjectPool {
acquire(tag: string): HTMLElement;
release(element: HTMLElement): void;
drain(): void;
stats(): ObjectPoolStats;
}ObjectPoolStats
ts
interface ObjectPoolStats {
pooled: number;
active: number;
created: number;
reused: number;
}Logging Types
LogConfig
Configuration for the structured pipeline logger. When omitted, Generative DOM uses a NoopLogger with zero overhead. See the Logging guide for the full reference and recipes.
ts
interface LogConfig {
/** Minimum severity. Events below this are dropped. Default: 'warn'. */
level: "trace" | "debug" | "info" | "warn" | "error";
/** Optional allow-list of pipeline phases. */
phases?: PipelinePhase[];
/** Optional allow-list of plugin names. */
plugins?: string[];
/** When true, attaches `raw` markdown / inner `content` to events. */
includeTokens?: boolean;
/** When true, attaches DOM element info to render events. */
includeDOM?: boolean;
/** Output destination. Default: 'console'. */
sink?: "console" | "callback" | "buffer";
/** For sink='callback': receive each event. */
onLog?: (event: LogEvent) => void;
/** For sink='callback': 'event' (object) | 'json' (string). */
format?: "event" | "json";
/** For sink='buffer': max events retained (circular). Default: 1000. */
bufferSize?: number;
}LogEvent
A discriminated union of every log event emitted by the pipeline. Each variant carries a phase and a typed type discriminant.
ts
type LogEvent =
| MatcherLogEvent // phase: 'match-block' | 'match-inline' | 'parse-inline'
| TokenLogEvent // phase: 'tokenize' | 'parse-inline' | 'prune'
| DiffLogEvent // phase: 'diff'
| RenderLogEvent // phase: 'render' | 'cleanup'
| PoolLogEvent; // phase: 'render'Logger
ts
interface Logger {
/** Emit a log event. */
log(event: LogEvent): void;
/** Check if a given log level is enabled. */
isEnabled(level: LogLevel): boolean;
/** Create a child logger with additional bound context. */
child(bindings: Record<string, unknown>): Logger;
/** Get buffered log events (BufferLogger only). */
getLogs?(): LogEvent[];
/** Clear the log buffer (BufferLogger only). */
clearLogs?(): void;
}Four implementations ship in the package: NoopLogger, ConsoleLogger, CallbackLogger, and BufferLogger. createLogger(config?) builds the right one based on config.sink.