MUI Docs Infra

Warning

This is an internal project, and is not intended for public use. No support or stability guarantees are provided.

HAST Utilities

The hastUtils module provides utilities for converting between HAST (Hypertext Abstract Syntax Tree) nodes, strings, and React JSX elements. These utilities are essential for processing syntax-highlighted code and converting markdown/HTML structures to React components.

Features

  • Converts HAST nodes to React JSX elements
  • Extracts plain text from HAST trees
  • Handles serialized HAST JSON format
  • Used in code highlighting and markdown processing pipelines

Usage

import {
  hastToJsx,
  hastOrJsonToJsx,
  stringOrHastToString,
  stringOrHastToJsx,
} from '@mui/internal-docs-infra/pipeline/hastUtils';

// Convert HAST to React JSX
const jsxElement = hastToJsx(hastNode);

// Convert HAST or serialized JSON to JSX
const jsxFromJson = hastOrJsonToJsx({ hastJson: '{"type":"element",...}' });

// Extract plain text from string or HAST
const plainText = stringOrHastToString(hastNodeOrString);

// Convert to JSX with optional highlighting
const jsx = stringOrHastToJsx(hastNodeOrString, true);

API

hastOrJsonToJsx

ParameterTypeDescription
hastOrJson
| HastNodes
| { hastJson: string }
| { hastCompressed: string }
components
Partial<Components> | undefined
Return Type
React.ReactNode

hastToJsx

ParameterTypeDescription
hast
HastNodes
components
Partial<Components> | undefined
Return Type
React.ReactNode

stringOrHastToJsx

ParameterTypeDescription
source
| string
| HastNodes
| { hastJson: string }
| { hastCompressed: string }
highlighted
boolean | undefined
components
Partial<Components> | undefined
Return Type
React.ReactNode

stringOrHastToString

ParameterTypeDescription
source
| string
| HastNodes
| { hastJson: string }
| { hastCompressed: string }
Return Type
string

Additional Types

CHECKSUM_BYTES

Checksum byte length embedded in compressed payloads that use a text dictionary. The checksum lets decompressHast verify that the caller supplied the same textContent that was used during compression.

HAST_DICTIONARY

Shared dictionary for DEFLATE compression of HAST JSON.

Contains byte sequences that frequently appear in JSON-serialized HAST trees (syntax-highlighted TypeScript type documentation). The dictionary is embedded in both the server build and the client bundle, so it must stay small — currently ~3 KB uncompressed.

type HAST_DICTIONARY = Uint8Array
MAX_DICTIONARY_SIZE

Maximum size of the DEFLATE dictionary in bytes.

DEFLATE uses only the last 32 KiB of the dictionary buffer. Any content beyond this limit is ignored by the compressor.

type MAX_DICTIONARY_SIZE = number

When to Use

  • When processing syntax-highlighted code in CodeHighlighter
  • When writing custom remark/rehype plugins that need to convert HAST to React
  • When handling serialized HAST data from build-time processing