import { visit } from "estree-util-visit"; import { toHtml } from "hast-util-to-html"; const exportConstComponentsRe = /export\s+const\s+components\s*=/; function rehypeOptimizeStatic(options) { return (tree) => { var _a, _b, _c, _d, _e, _f; const customComponentNames = new Set(options == null ? void 0 : options.customComponentNames); for (const child of tree.children) { if (child.type === "mdxjsEsm" && exportConstComponentsRe.test(child.value)) { const objectPropertyNodes = (_d = (_c = (_b = (_a = child.data.estree.body[0]) == null ? void 0 : _a.declarations) == null ? void 0 : _b[0]) == null ? void 0 : _c.init) == null ? void 0 : _d.properties; if (objectPropertyNodes) { for (const objectPropertyNode of objectPropertyNodes) { const componentName = ((_e = objectPropertyNode.key) == null ? void 0 : _e.name) ?? ((_f = objectPropertyNode.key) == null ? void 0 : _f.value); if (componentName) { customComponentNames.add(componentName); } } } } } const allPossibleElements = /* @__PURE__ */ new Set(); const elementStack = []; visit(tree, { enter(node) { const isCustomComponent = node.tagName && customComponentNames.has(node.tagName); if (node.type.startsWith("mdx") || isCustomComponent) { for (const el of elementStack) { allPossibleElements.delete(el); } elementStack.length = 0; } if (node.type === "element" || node.type === "mdxJsxFlowElement") { elementStack.push(node); allPossibleElements.add(node); } }, leave(node, _, __, parents) { if (node.type === "element" || node.type === "mdxJsxFlowElement") { elementStack.pop(); const parent = parents[parents.length - 1]; if (allPossibleElements.has(parent)) { allPossibleElements.delete(node); } } } }); for (const el of allPossibleElements) { if (el.type === "mdxJsxFlowElement") { el.attributes.push({ type: "mdxJsxAttribute", name: "set:html", value: toHtml(el.children) }); } else { el.properties["set:html"] = toHtml(el.children); } el.children = []; } }; } export { rehypeOptimizeStatic };