/** * Sentinel the MDX parser substitutes for spaces inside expression and JSX * attribute-expression values (see `PHANTOM_SPACE` in * satteri-pulldown-cmark/src/mdx.rs). mdast and hast keep the sentinel in the * stored value; readers and visitors restore the real space on the way out. * Both plugin-facing paths (direct walk match and materialized child) must * restore it so a node's `value` reads the same regardless of how it's reached. */ const PHANTOM_SPACE = "\uF002"; /** Restore phantom-space sentinels to real spaces, allocating only when present. */ export function restorePhantomSpaces(value) { return value.includes(PHANTOM_SPACE) ? value.replaceAll(PHANTOM_SPACE, " ") : value; }