export interface RendererOptions { createElement(tag: string): NodeType; createTextNode(value: string): NodeType; replaceText(textNode: NodeType, value: string): void; isTextNode(node: NodeType): boolean; setProperty(node: NodeType, name: string, value: T, prev?: T): void; insertNode(parent: NodeType, node: NodeType, anchor?: NodeType): void; removeNode(parent: NodeType, node: NodeType): void; getParentNode(node: NodeType): NodeType | undefined; getFirstChild(node: NodeType): NodeType | undefined; getNextSibling(node: NodeType): NodeType | undefined; } export interface Renderer { render(code: () => NodeType, node: NodeType): () => void; effect(fn: (prev?: T) => T, init?: T): void; memo(fn: () => T, equal: boolean): () => T; createComponent(Comp: (props: T) => NodeType, props: T): NodeType; createElement(tag: string): NodeType; createTextNode(value: string): NodeType; insertNode(parent: NodeType, node: NodeType, anchor?: NodeType): void; insert(parent: any, accessor: (() => T) | T, marker?: any | null): NodeType; spread(node: any, accessor: (() => T) | T, skipChildren?: Boolean): void; setProp(node: NodeType, name: string, value: T, prev?: T): T; mergeProps(...sources: unknown[]): unknown; use(fn: (element: NodeType, arg: A) => T, element: NodeType, arg: A): T; } export function createRenderer(options: RendererOptions): Renderer;