utils/src
saberzero1 bb5c136296
feat(path): add normalizeHastElement for cross-slug HAST rebasing
Moved from Quartz core (quartz/util/path.ts) into the shared utils
package so that plugins performing cross-slug HAST embedding can
re-use the same rebase helper as Quartz's internal transclude
expansion, rather than reimplementing or skipping the rebase.

The primary consumer outside of Quartz core is canvas-page, whose
buildEmbeddedContent() pulls vfile.data.htmlAst from arbitrary target
pages and serializes it verbatim into canvas pages - producing broken
relative hrefs that survive accidentally on root deployments but fail
under non-trivial basePath configurations. Exposing the helper here
lets canvas-page (and any future embedding plugin) rebase correctly
without duplicating the logic.

Implementation details:
- Deep-clones the input via structuredClone (Node >=22 builtin) so
  callers don't need to bring their own clone function
- Absolute URLs (http://, https://, /root-relative) pass through
  untouched; only relative URLs are rebased
- Recurses into children so nested anchors inside a rebased subtree
  are also normalized

Backed by 10 new tests covering same-slug, cross-slug (both directions),
nested depth, anchor preservation, absolute URL passthrough, root-relative
passthrough, src-attribute rebasing, elements without href/src, nested
children recursion, and input-immutability.
2026-04-17 02:24:33 +02:00
..
date.ts feat: add formatDate and getIconCode utility exports 2026-04-03 15:04:35 +02:00
dom.ts fix: active class 2026-02-09 22:38:41 +01:00
emoji.ts feat: add formatDate and getIconCode utility exports 2026-04-03 15:04:35 +02:00
escape.ts feat: add path utilities, escape helpers, and capitalize for transformer plugins 2026-02-13 22:24:41 +01:00
index.ts feat: add getDate and byDateAndAlphabetical sort utilities 2026-04-03 15:39:35 +02:00
jsx.tsx feat: add htmlToJsx wrapper for safe HAST-to-JSX rendering 2026-03-08 19:25:27 +01:00
lang.ts feat: add path utilities, escape helpers, and capitalize for transformer plugins 2026-02-13 22:24:41 +01:00
path.ts feat(path): add normalizeHastElement for cross-slug HAST rebasing 2026-04-17 02:24:33 +02:00
sort.ts fix: safely handle undefined getDate in byDateAndAlphabetical 2026-04-03 15:58:13 +02:00