import type { BufferHeader } from "../types.js"; import type { MdxJsxAttribute, MdxJsxExpressionAttribute } from "../mdx-types.js"; import type { Position } from "unist"; export type { MdxJsxAttribute, MdxJsxExpressionAttribute }; export declare const HAST_ROOT: number; export declare const HAST_ELEMENT: number; export declare const HAST_TEXT: number; export declare const HAST_COMMENT: number; export declare const HAST_DOCTYPE: number; export declare const HAST_RAW: number; export declare const HAST_MDX_JSX_ELEMENT: number; export declare const HAST_MDX_JSX_TEXT_ELEMENT: number; export declare const HAST_MDX_FLOW_EXPRESSION: number; export declare const HAST_MDX_ESM: number; export declare const HAST_MDX_TEXT_EXPRESSION: number; export interface HastProperty { name: string; value: string | number | boolean | string[]; } export declare class HastReader { #private; constructor(buffer: ArrayBuffer | Uint8Array); /** * Per-node JSON `data` blob (set via `Arena::set_node_data` on the Rust * side). Returns `null` when the node has no entry. Lazy-builds a * `Map` on first call so a materialization pass on a * data-heavy tree stays O(nodes) rather than O(nodes × entries). */ getNodeData(nodeId: number): string | null; get nodeCount(): number; get header(): BufferHeader; /** The full string pool (original input + interning heap). Not the document * source as written; for that, read `ctx.source` from a plugin. */ getStringPool(): string; /** Read a substring from the string pool by byte offset and length. */ getString(offset: number, len: number): string; /** Get position data for a node. */ getPosition(nodeId: number): Position | undefined; /** Whether the node carries a source position (line 0 + offset 0 is the * synthesized-node sentinel), without decoding the three position objects. */ hasPosition(nodeId: number): boolean; /** Get the node_type byte for a given node ID. */ getNodeType(nodeId: number): number; /** Get the parent id for a given node (0xffffffff at the root). */ getParentId(nodeId: number): number; /** Get child node IDs for a given node. */ getChildIds(nodeId: number): number[]; /** Push child node IDs directly onto a stack array (reverse order for depth-first). */ pushChildIds(nodeId: number, stack: number[]): void; /** Get the raw type_data bytes for a node. */ getTypeData(nodeId: number): Uint8Array; /** * Get element data for a HAST_ELEMENT node. * * Element type_data layout: * [tag_name: StringRef(8B)][prop_count: u32(4B)][_pad: u32(4B)] = 16-byte header * then prop_count * 20 bytes: * [name: StringRef(8B)][value_type: u8(1B)][_pad: [u8;3](3B)][value: StringRef(8B)] */ getElementData(nodeId: number): { tagName: string; properties: HastProperty[]; }; /** * Get MDX JSX element data: name and attributes. * * MDX JSX element type_data layout: * [name: StringRef(8B)][attr_count: u32(4B)][_pad: u32(4B)] = 16-byte header * then attr_count * 20 bytes: * [kind: u8(1B)][_pad: [u8;3](3B)][name: StringRef(8B)][value: StringRef(8B)] */ getMdxJsxElementData(nodeId: number): { name: string | null; attributes: (MdxJsxAttribute | MdxJsxExpressionAttribute)[]; }; /** * Get the string value for HAST_TEXT, HAST_COMMENT, or HAST_RAW nodes. * These store a single StringRef (8 bytes) as their type_data. */ getTextValue(nodeId: number): string; }