| | |
| | | import { slug as slugAnchor } from "github-slugger" |
| | | import type { Element as HastElement } from "hast" |
| | | import rfdc from "rfdc" |
| | | |
| | | export const clone = rfdc() |
| | | |
| | | // this file must be isomorphic so it can't use node libs (e.g. path) |
| | | |
| | | export const QUARTZ = "quartz" |
| | |
| | | function sluggify(s: string): string { |
| | | return s |
| | | .split("/") |
| | | .map((segment) => segment.replace(/\s/g, "-").replace(/%/g, "-percent").replace(/\?/g, "-q")) // slugify all segments |
| | | .map((segment) => |
| | | segment.replace(/\s/g, "-").replace(/%/g, "-percent").replace(/\?/g, "-q").replace(/#/g, ""), |
| | | ) // slugify all segments |
| | | .join("/") // always use / as sep |
| | | .replace(/\/$/, "") |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | export function normalizeHastElement(el: HastElement, curBase: FullSlug, newBase: FullSlug) { |
| | | export function normalizeHastElement(rawEl: HastElement, curBase: FullSlug, newBase: FullSlug) { |
| | | const el = clone(rawEl) // clone so we dont modify the original page |
| | | _rebaseHastElement(el, "src", curBase, newBase) |
| | | _rebaseHastElement(el, "href", curBase, newBase) |
| | | if (el.children) { |