bobe-dom 0.0.67 → 0.0.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"bobe-dom.cjs.js","sources":["../src/render.ts","../src/type.ts","../src/parse-html.ts","../src/render-html-str2.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key.startsWith('.')) {\n el.classList.toggle(key.slice(1), !!value);\n return;\n }\n\n if (key.startsWith('#')) {\n if (value) el.id = key.slice(1);\n else el.removeAttribute('id');\n return;\n }\n\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n\n\nexport class SSRFiber {\n parent?: SSRFiber = undefined;\n next?: SSRFiber = undefined;\n child?: SSRFiber = undefined;\n html?: string = undefined;\n /** 开标签 > 在原始 HTML 字符串中的索引位置 */\n openTagEnd?: number = undefined;\n constructor(public type: any, public props: Record<any, any> = {}) {}\n\n querySelector(selector: string): SSRFiber | null {\n // 解析 selector:tag#id.class1.class2\n const idMatch = selector.match(/#([\\w-]+)/);\n const id = idMatch ? idMatch[1] : null;\n const classMatches = selector.match(/\\.[\\w-]+/g);\n const classes = classMatches ? classMatches.map(c => c.slice(1)) : [];\n const tag = selector.replace(/#[\\w-]+/g, '').replace(/\\.[\\w-]+/g, '').trim() || null;\n\n // 深度优先遍历 child → next 链表\n const walk = (node: SSRFiber | undefined): SSRFiber | null => {\n if (!node) return null;\n // 跳过非元素节点\n if (node.type !== 'root' && node.type !== 'anchor' && node.type !== 'text') {\n if (!tag || node.type === tag) {\n if (!id || node.props['id'] === id) {\n if (\n classes.length === 0 ||\n classes.every(c => (node.props['class'] || '').split(/\\s+/).includes(c))\n ) {\n return node;\n }\n }\n }\n }\n return walk(node.child) || walk(node.next);\n };\n\n return walk(this.child);\n }\n\n getElementById(id: string): SSRFiber | null {\n return this.querySelector(`#${id}`);\n }\n}\n\n","import { Parser } from 'htmlparser2';\nimport { SSRFiber } from './type';\n\n/**\n * 使用 htmlparser2 将 HTML 字符串解析为 SSRFiber,插入到 root 下。\n * 解析产生的节点通过 child/next/parent 组成树结构,挂载到 root.child 链表。\n */\nexport function parseHtmlToFibers(html: string, root: SSRFiber): void {\n // 栈:跟踪当前父节点及其最后一个子节点。root 始终在栈底\n const stack: { parent: SSRFiber; lastChild: SSRFiber | null }[] = [\n { parent: root, lastChild: null },\n ];\n // 当前层级的上一个兄弟节点\n let prevSibling: SSRFiber | null = null;\n\n const append = (node: SSRFiber) => {\n const frame = stack[stack.length - 1];\n if (!frame.parent.child) {\n frame.parent.child = node;\n } else if (frame.lastChild) {\n frame.lastChild.next = node;\n }\n frame.lastChild = node;\n node.parent = frame.parent;\n prevSibling = node;\n };\n\n // 通过 onparserinit 拿到 parser 实例,后续从 parser.endIndex 读取 > 的位置\n let parserRef: Parser;\n\n const parser = new Parser({\n onparserinit(p: Parser) {\n parserRef = p;\n },\n\n onopentag(name: string, attribs: Record<string, string>) {\n const fiber = new SSRFiber(name, { ...attribs });\n // onopentagend 在 onopentag 之前触发,已将 endIndex 写入 parser\n fiber.openTagEnd = parserRef.endIndex;\n append(fiber);\n stack.push({ parent: fiber, lastChild: null });\n prevSibling = null;\n },\n\n ontext(text: string) {\n const fiber = new SSRFiber('text', { text });\n append(fiber);\n },\n\n onclosetag() {\n stack.pop();\n const top = stack[stack.length - 1];\n prevSibling = top.lastChild ?? null;\n },\n });\n\n parser.write(html);\n parser.end();\n}\n","import { customRender, Store } from 'bobe';\nimport { SSRFiber } from './type';\nimport { parseHtmlToFibers } from './parse-html';\n\nconst VOID_TAGS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n return new SSRFiber(name);\n};\n\nconst setProp = (node: SSRFiber, key: string, value: any) => {\n node.props[key] = value;\n if (key === 'html') {\n parseHtmlToFibers(value, node);\n }\n};\n\nconst beforeIndent = (node: SSRFiber) => {\n // 仅 html 需要跳过缩进子节点(子内容来自 parseHtmlToFibers)\n if (node.props.html != null) {\n return false;\n }\n};\n\nconst insertAfter = (parent: SSRFiber, node: SSRFiber, prev: SSRFiber | null) => {\n let next: SSRFiber;\n if (prev) {\n next = prev.next;\n prev.next = node;\n } else {\n next = parent.child;\n parent.child = node;\n }\n node.next = next;\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n return new SSRFiber('anchor', {\n name,\n isBefore\n });\n};\n\nconst remove = (node: SSRFiber, prev?: SSRFiber) => {\n const { parent, next } = node;\n node.next = null;\n if (prev) {\n prev.next = next;\n } else {\n parent.child = next;\n }\n node.parent = null;\n};\n\nconst firstChild = (node: SSRFiber) => node.child;\n\nconst nextSib = (node: SSRFiber) => node.next;\n\nexport function walkFiber(root: SSRFiber) {\n let point = root;\n let shouldSink = true;\n // 下沉\n sink: do {\n // begin 组装 HTML 起始部位\n if (point.type === 'root') {\n point.html = '';\n } else if (point.type === 'anchor') {\n point.html = `<!--${point.props.name}-->`;\n } else if (point.type === 'text') {\n const text = point.props.text;\n if (text != null) {\n point.html = escapeText(point.props.text);\n }\n }\n // dom 节点\n else {\n point.html = `<${point.type}`;\n const props = point.props;\n let text;\n let classStr = '';\n const dotClasses: string[] = [];\n let idValue: string | null = null;\n\n for (const key in props) {\n const value = props[key];\n if (key.startsWith('on') || key === 'ref') continue;\n // html 被解析成了子节点,则不处理\n if (key === 'html') {\n continue;\n }\n if (key === 'text') {\n text = value;\n continue;\n }\n // .xxx — class toggle,收集后与 class 合并\n if (key.startsWith('.')) {\n if (value) dotClasses.push(key.slice(1));\n continue;\n }\n // #xxx — id toggle\n if (key.startsWith('#')) {\n if (value) idValue = key.slice(1);\n continue;\n }\n if (key === 'class') {\n if (value == null) continue;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n continue;\n }\n if (key === 'style') {\n if (value == null) continue;\n point.html += ` style=\"${escapeAttr(String(value))}\"`;\n continue;\n }\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n point.html += ` ${key}`;\n }\n continue;\n }\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) continue;\n point.html += ` ${key}=\"${escapeAttr(value)}\"`;\n continue;\n }\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) continue;\n point.html += ` ${key}=\"${escapeAttr(value)}\"`;\n }\n // 合并 .xxx 类名到 class\n if (dotClasses.length) {\n classStr = (classStr ? classStr + ' ' : '') + dotClasses.join(' ');\n }\n if (classStr) {\n point.html += ` class=\"${escapeAttr(classStr)}\"`;\n }\n // 输出 #xxx 设置的 id\n if (idValue) {\n point.html += ` id=\"${escapeAttr(idValue)}\"`;\n }\n // 纯 text(无 html children)→ 内联文本,闭合标签,不下沉\n if (text != null && props.html == null) {\n const content = escapeText(text);\n point.html += `>${content}</${point.type}>`;\n if (point.child) console.warn(`<${point.type}> has text content and child elements — children ignored`);\n shouldSink = false;\n } else {\n if (VOID_TAGS.has(point.type)) {\n point.html += `/>`;\n if (point.child) console.warn(`<${point.type}> can't have children`);\n shouldSink = false;\n } else {\n point.html += `>`;\n }\n }\n }\n\n if (point.child && shouldSink) {\n point = point.child;\n continue;\n }\n // 上浮\n do {\n const notRoot = point !== root;\n const notAnchor = point.type !== 'anchor';\n const notText = point.type !== 'text';\n /**\n * shouldSink == false 时会直接进入节点的 complete 且不会遍历子节点\n * 此时标签已闭合,complete 不需要重复处理\n */\n if (shouldSink && notRoot && notAnchor && notText) {\n point.html += `</${point.type}>`;\n }\n // 把子节点的字符串加入父节点\n if (notRoot) {\n point.parent.html += point.html;\n }\n // complete\n // 上浮到根,end\n shouldSink = true;\n if (!notRoot) break sink;\n // 有兄弟节点,停止上浮\n if (point.next) {\n point = point.next;\n break;\n }\n // 无兄弟节点,继续上浮\n point = point.parent;\n } while (true);\n } while (true);\n}\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n const root = new SSRFiber('root');\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n noopEffect: true\n });\n render(ComponentClass, root);\n walkFiber(root);\n return root.html;\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\n/**\n * SSR DOM 认领游标。\n *\n * 工作方式:\n * - 维护一个 `parent` 指针,始终指向\"当前容器\"。\n * - `findUnclaimed` 只在 `parent.firstChild` 中平铺搜索(只搜一层,不递归)。\n * - 认领过的节点放入 `claimed` WeakSet,同一次遍历不会重复认领。\n *\n * 典型调用(以 hydrate 测试为例):\n * container.innerHTML = ssrHtml; // <div id=\"app1\"><div>SSR...</div></div>\n * hydrate(Ctor, container);\n *\n * hydrate 内部:\n * cursor = new TreeCursor(rootEl.parentNode); // 光标起点 = container,即 <div id=\"app1\">\n * createNode('div') → findUnclaimed 搜 <div id=\"app1\"> 的直接子级 → 找到 rootEl → 认领 ✅\n * beforeIndent → enterChildren(rootEl) // 光标进入 rootEl\n * createNode('nav') → findUnclaimed 搜 rootEl 的直接子级 → 找到 SSR <nav> → 认领 ✅\n *\n * 关键约束:游标只在当前层级搜索。这就是为什么光标起点必须在 container 层——让 App 的\n * 外层 div 在 container 的子级中被认领,而不是在 <body> 层误将 #app 当 div 认领走。\n */\nclass TreeCursor {\n /** 当前搜索容器——findUnclaimed 在此节点的 firstChild 链上搜索 */\n private parent: Node;\n /** 已认领节点集合,防止 DOM 重排导致误认领 */\n private claimed = new WeakSet<Node>();\n /** 当前层级最后一个被认领的节点,搜索从 nextSibling 起跳,跳过已遍历节点 */\n private current: Node | null = null;\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n /** 进入子节点:后续 findUnclaimed 搜 node 的直接子级 */\n enterChildren(node: Node) {\n this.parent = node;\n this.current = null;\n }\n\n /** 直接设置游标父级(用于 tp 等需要跳转到非树位置的场景) */\n setParent(node: Node) {\n this.parent = node;\n this.current = null;\n }\n\n /** 设置当前指针,后续 findUnclaimed 从 node.nextSibling 开始 */\n setCurrent(node: Node) {\n this.current = node;\n }\n\n /** 退出当前节点,回到父级,恢复游标位置 */\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n this.current = node;\n }\n }\n\n /** 在 this.parent 的 firstChild 链上查找第一个满足条件的节点 */\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n // 指针起跳 + WeakSet 兜底:指针失效(DOM 重排)时 wrapped 扫描,WeakSet 防重认\n let node = this.current?.nextSibling || this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n this.current = node;\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n /** 认领一个未使用的元素节点(按 tagName 匹配) */\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n /** 认领一个未使用的注释节点(按注释内容匹配) */\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n /** 认领一个未使用的文本节点(非空文本) */\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const cursor = new TreeCursor(rootEl);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n // tp 节点进入 indent 时,将游标切入目标 DOM,使其子节点在正确位置认领\n const beforeLogicIndent = (node: any) => {\n if (isFirstRender && node.tpData) {\n const targetDom = node.tpData.node;\n if (targetDom) cursor.enterChildren(targetDom);\n }\n };\n\n const leaveLogicNode = (node: any, _isDedent: boolean) => {\n // tp 节点离开时,通过 realAfter 锚点找到模板父级 DOM 恢复游标\n if (isFirstRender && node.tpData) {\n const parentDom = node.realAfter?.parentNode;\n if (parentDom) {\n cursor.setParent(parentDom);\n // 后续认领从 tp-after 锚点之后开始\n if (node.realAfter) cursor.setCurrent(node.realAfter);\n }\n return;\n }\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n beforeLogicIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, rootEl);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","classList","toggle","id","removeAttribute","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","str","String","style","cssText","innerHTML","undefined","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","SSRNodeType","SSRFiber","next","child","html","openTagEnd","constructor","type","props","querySelector","selector","idMatch","match","classMatches","classes","c","replace","trim","walk","length","every","split","includes","getElementById","parseHtmlToFibers","root","stack","lastChild","append","frame","parserRef","parser","Parser","onparserinit","p","onopentag","attribs","fiber","endIndex","push","ontext","text","onclosetag","pop","top","prevSibling","write","end","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","m","escapeText","isBefore","walkFiber","point","shouldSink","sink","classStr","dotClasses","idValue","content","notRoot","notAnchor","notText","renderHtmlStr","ComponentClass","noopEffect","TreeCursor","claimed","WeakSet","current","container","enterChildren","setParent","setCurrent","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","beforeLogicIndent","tpData","targetDom","_isDedent","parentDom","realAfter","onBeforeFlush"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"code.cjs.js","sources":["../src/plugins/markdown/components/code.ts"],"sourcesContent":["import { bobe, Store } from 'bobe';\nimport './code.css';\nimport './markdown.css';\nimport './tokyo-night-dark.css';\n\n\nclass Code extends Store {\n activeIndex = 0;\n files: Array<{ name: string; html: string }> = [];\n\n switchTab(i: number) { this.activeIndex = i }\n\n get activeFile() { return this.files[this.activeIndex]; }\n preview = null;\n\n normalBlock = null;\n fullBlock = null;\n\n isFull = false;\n\n toggleFull = () => {\n this.isFull = !this.isFull;\n console.log('isFull', this.isFull);\n \n }\n\n get blockTarget() {\n return this.isFull ? this.fullBlock : this.normalBlock;\n }\n\n ui = bobe`\n div ref={normalBlock} class=\"code-block\"\n div ref={fullBlock} class={isFull ? \"code-block-full code-block-full-active\" : \"code-block-full\"} \n tp node={blockTarget} \n div class=\"code-tabs\"\n button class=\"full-button\" onclick={toggleFull} text={isFull ? '收起' : '全屏'}\n for files; file i; file.path\n button class={activeIndex === i ? 'code-tab code-tab-active' : 'code-tab'} onclick={() => switchTab(i)} text={file.name}\n div ref={normalPreview} class=\"code-panel-preview\"\n pre class=\"code-panel\" \n code class=\"hljs\" html={activeFile.html}\n if preview \n div class=\"code-preview\"\n {preview} \n `;\n}\n\nexport default Code;\n"],"names":["Code","Store","activeIndex","files","switchTab","i","activeFile","preview","normalBlock","fullBlock","isFull","toggleFull","console","log","blockTarget","ui","bobe"],"mappings":";;;;AAMA,MAAMA,IAAI,SAASC,UAAK,CAAC;AACvBC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,KAAK,GAA0C,EAAE;EAEjDC,SAASA,CAACC,CAAS,EAAE;IAAE,IAAI,CAACH,WAAW,GAAGG,CAAC;AAAC,EAAA;EAE5C,IAAIC,UAAUA,GAAG;AAAE,IAAA,OAAO,IAAI,CAACH,KAAK,CAAC,IAAI,CAACD,WAAW,CAAC;AAAE,EAAA;AACxDK,EAAAA,OAAO,GAAG,IAAI;AAEdC,EAAAA,WAAW,GAAG,IAAI;AAClBC,EAAAA,SAAS,GAAG,IAAI;AAEhBC,EAAAA,MAAM,GAAG,KAAK;EAEdC,UAAU,GAAGA,MAAM;AACjB,IAAA,IAAI,CAACD,MAAM,GAAG,CAAC,IAAI,CAACA,MAAM;IAC1BE,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAACH,MAAM,CAAC;EAEpC,CAAC;EAED,IAAII,WAAWA,GAAG;IAChB,OAAO,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,WAAW;AACxD,EAAA;AAEAO,EAAAA,EAAE,GAAGC,SAAI;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,CAAG;AACH;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.cjs.js","sources":["../src/plugins/markdown/my-resolve.ts","../src/plugins/markdown/components/bobe-lang.ts","../src/plugins/markdown/index.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport hljs from 'highlight.js';\nfunction highlight(code: string, lang: string): string {\n try {\n return hljs.highlight(code, { language: lang }).value;\n } catch {\n return code.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n}\n\ntype ResolveFn = (id: string, importer?: string) => Promise<{ id: string } | null>;\nexport type FileItem = {\n path: string;\n name: string;\n lang: string;\n html: string;\n};\nexport async function resolveImportTree(\n importPath: string,\n currentPath: string,\n vResolve: ResolveFn,\n walked = new Set<string>()\n): Promise<FileItem[]> {\n const resolved = await vResolve(importPath, currentPath);\n const absPath = resolved?.id;\n\n if (!absPath || absPath.includes('node_modules') || absPath.startsWith('\\0') || walked.has(absPath)) {\n return [];\n }\n\n walked.add(absPath);\n\n let content = '';\n try {\n content = await fs.promises.readFile(absPath, 'utf-8');\n } catch (error) {\n console.warn(`Failed to read file: ${absPath}`);\n }\n if (!content) {\n return [];\n }\n\n const langMap: Record<string, string> = {\n ts: 'typescript',\n tsx: 'typescript',\n mts: 'typescript',\n js: 'javascript',\n jsx: 'javascript',\n mjs: 'javascript',\n css: 'css',\n html: 'xml',\n json: 'json'\n };\n const ext = path.extname(absPath).slice(1);\n const lang = langMap[ext];\n\n const item: FileItem = {\n path: absPath,\n name: path.basename(absPath),\n lang: lang,\n // html: highlight(content, lang)\n html: lang ? highlight(content, lang) : content\n };\n\n // 4. 正则匹配出文件中的静态 import 语句\n const importRegex = /import\\s+(?:[\\w*\\s{},]*\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n let match: RegExpExecArray | null;\n const dependencies: Promise<FileItem[]>[] = [];\n\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = match[1];\n // 排除绝对路径网络请求(如 https://)\n if (!importPath.startsWith('http')) {\n dependencies.push(resolveImportTree(importPath, absPath, vResolve, walked));\n }\n }\n if (!dependencies.length) {\n return [item];\n }\n const deps = await Promise.all(dependencies);\n return [item, ...deps.flat()];\n}\n","import hljs, { Language } from 'highlight.js';\n\n/**\n * 注册 bobe DSL 语法高亮。\n *\n * 1. 注册 `bobe` 独立语言(用于 markdown 中 ```bobe 代码块)\n * 2. 给 JavaScript grammar 打补丁,让 `bobe`...`` 标签模板被 TS/JS 代码块自动识别\n *\n * bobe 采用类似 Pug 的缩进风格,语法要素:\n * - 元素标签:div, span, h1-h6, a, p, ul, li, button, input ...\n * - 属性:class=\"...\", id=\"...\", text=\"...\", onclick={...}, ref={...}\n * - 控制流:if, else, for, tp\n * - 响应式绑定:{expr}\n * - 模板插值:${expr}\n * - 字符串:\"hello\"\n * - 注释:# comment\n */\nexport function registerBobeLang() {\n // ================================================================\n // Part 1: 注册 bobe 独立语言\n // ================================================================\n hljs.registerLanguage('bobe', (hljs) => {\n // 属性名列表(含事件处理器和布尔属性)\n const ATTRS = [\n 'class', 'id', 'text', 'html', 'style', 'href', 'src', 'alt', 'title',\n 'ref', 'type', 'placeholder', 'value', 'name', 'foo',\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'role', 'target', 'rel', 'width', 'height', 'tabindex',\n 'data-[\\\\w-]+', 'aria-[\\\\w-]+',\n 'onclick', 'oninput', 'onchange', 'onsubmit', 'onreset',\n 'onkeydown', 'onkeyup', 'onkeypress',\n 'onfocus', 'onblur', 'onmouseenter', 'onmouseleave',\n 'onmousemove', 'onmouseover', 'onmouseout',\n 'onload', 'onerror', 'onscroll', 'onresize',\n 'ondrag', 'ondragstart', 'ondragend', 'ondragover', 'ondrop',\n 'ontouchstart', 'ontouchend', 'ontouchmove',\n ].join('|');\n\n return {\n name: 'bobe',\n // keywords: {\n // $pattern: /\\b(if|else|for|tp)\\b/,\n // keyword: 'if else for tp'\n // },\n keywords: ['if','else','for','tp','context'],\n contains: [\n // ----------------------------------------------------------\n // 1. 行注释 — # 到行尾\n // ----------------------------------------------------------\n hljs.COMMENT('#', '$', { relevance: 0 }),\n\n // ----------------------------------------------------------\n // 2. 模板插值 ${expr} — bobe 组件/表达式嵌入\n // ----------------------------------------------------------\n {\n className: 'template-substitution',\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n { begin: /\\$\\{/, end: /\\}/, skip: true },\n ],\n subLanguage: 'javascript',\n },\n\n // ----------------------------------------------------------\n // 3. 响应式绑定 {expr} — 跟在 = 后面(不含 $)\n // ----------------------------------------------------------\n {\n className: 'template-substitution',\n begin: /(?<==)\\{/,\n end: /\\}/,\n contains: [\n { begin: /\\{/, end: /\\}/, skip: true },\n ],\n subLanguage: 'javascript',\n },\n\n // ----------------------------------------------------------\n // 4. 双引号字符串 — 内部可含 ${} 插值\n // ----------------------------------------------------------\n {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n {\n begin: /\\$\\{/,\n end: /\\}/,\n subLanguage: 'javascript',\n }\n ]\n },\n\n // ----------------------------------------------------------\n // 5. 元素标签 — 行首缩进后的第一个标识符(排除关键字)\n // 泛化匹配:bobe 缩进语法中每行首个标识符必是标签或关键字\n // ----------------------------------------------------------\n {\n className: 'selector-tag',\n begin: /^[ \\t]*(?!(?:if|else|for|tp)\\b)[a-z][\\w-]*(?:-[a-z][\\w-]*)*\\b/m,\n relevance: 2,\n },\n\n // ----------------------------------------------------------\n // 6. 属性名 — key=value 形式\n // ----------------------------------------------------------\n {\n className: 'attr',\n begin: new RegExp(`\\\\b(?:${ATTRS})\\\\b(?=\\\\s*=)`),\n relevance: 1,\n },\n\n // ----------------------------------------------------------\n // 7. 布尔属性 — 独立出现,不跟 =\n // ----------------------------------------------------------\n {\n className: 'attr',\n begin: /\\b(?:disabled|readonly|checked|selected|hidden)\\b(?!\\s*=)/,\n relevance: 0,\n },\n\n // ----------------------------------------------------------\n // 8. for 循环变量 — for items; item i\n // ----------------------------------------------------------\n {\n className: 'variable',\n begin: /(?<=for\\s+)\\w+(?=\\s*;)/,\n relevance: 0,\n },\n {\n className: 'params',\n begin: /(?<=for\\s+\\S+\\s*;\\s*)\\w+/,\n relevance: 0,\n },\n {\n className: 'params',\n begin: /(?<=for\\s+\\S+\\s*;\\s*\\w+\\s+)\\w+/,\n relevance: 0,\n },\n\n // ----------------------------------------------------------\n // 9. 数字字面量\n // ----------------------------------------------------------\n hljs.NUMBER_MODE,\n ]\n } as Language;\n });\n\n // ================================================================\n // Part 2: 给 JS-family grammars 打补丁,让 `bobe`...`` 标签模板被识别\n // ================================================================\n function patchJsFamily(name: string) {\n const fn = (hljs.getLanguage(name) as any)?.rawDefinition as\n | ((hljs: any) => any)\n | undefined;\n if (!fn) return;\n\n const def = fn(hljs);\n\n // 避免重复注册\n if (def.contains.some((c: any) =>\n c.begin?.toString?.().includes('bobe')\n )) return;\n\n // 复刻该 grammar 的 keywords(用于 SUBST 中的 JS 表达式高亮)\n const SUBST = {\n className: 'subst',\n begin: /\\$\\{/,\n end: /\\}/,\n keywords: def.keywords,\n };\n\n def.contains.push({\n begin: /\\.?bobe`/, // 匹配 bobe` 或 .bobe`\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [hljs.BACKSLASH_ESCAPE, SUBST],\n subLanguage: 'bobe',\n },\n });\n\n hljs.registerLanguage(name, () => def);\n }\n\n patchJsFamily('javascript');\n patchJsFamily('typescript');\n}\n","import type { Plugin } from 'vite';\nimport type { MarkedExtension } from 'marked';\nimport { marked } from 'marked';\nimport matter from 'gray-matter';\nimport { resolve, dirname } from 'path';\nimport { FileItem, resolveImportTree } from './my-resolve';\nimport hljs from 'highlight.js';\nimport { registerBobeLang } from './components/bobe-lang';\n\nexport interface MarkdownPluginOptions {\n /** 传递给 marked.use() 的扩展配置 */\n marked?: MarkedExtension;\n /** 侧边栏的深度,默认为 3,表示提取 h1 - h3 到侧边栏做导航 */\n asideDeep?: number;\n}\n\n/** 对要嵌入模板字面量的字符串进行转义(` $ \\) */\nfunction esc(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\$/g, '\\\\$');\n}\n\n/** 将 HTML 字符串编译为 bobe 组件模块源码 */\nfunction gen(\n html: string,\n headers: HeadItem[],\n previewEntries: string[],\n codeTrees: FileItem[][] = [],\n layoutPath?: string,\n routeMeta?: Record<string, any>\n): string {\n const hasCode = codeTrees.length > 0;\n const lines = [`import { bobe, Store } from 'bobe';`];\n\n // layout 组件导入\n if (layoutPath) {\n lines.push(`import __layout from '${layoutPath}';`);\n }\n\n if (hasCode) {\n lines.push(`import Code from 'bobe-dom/plugin-markdown/code';`);\n previewEntries.forEach((src, i) => {\n lines.push(`import $Bobe_Comp_${i} from '${src}';`);\n });\n }\n\n lines.push(`const mdHtml = \\`${esc(html)}\\`;`);\n\n // 代码树数据\n if (hasCode) {\n for (let i = 0; i < codeTrees.length; i++) {\n lines.push(`const codeTree${i} = ${JSON.stringify(codeTrees[i])};`);\n }\n }\n\n // Markdown Store 组件\n lines.push(`class Markdown extends Store {`);\n lines.push(` mdRef = null;`);\n lines.push(` ui = bobe\\``);\n lines.push(` div class=\"markdown\" style=\"display: flex;\"`);\n lines.push(` main ref={mdRef} class=\"markdown-body\" style=\"overflow-y: auto;\" html=\\${mdHtml}`);\n lines.push(` if showAside`);\n lines.push(` div class=\"markdown-aside\" style=\"flex: none; display: flex; flex-direction: column; overflow-y: auto;\"`);\n for (const { depth, id, text } of headers) {\n lines.push(\n ` a href=\"#${id}\" text=\"${esc(text)}\" class=\"markdown-aside-item markdown-aside-depth-${depth}\"`\n );\n }\n // tp + Code 组件\n if (hasCode) {\n for (let i = 0; i < codeTrees.length; i++) {\n const previewProp = previewEntries[i] ? `preview=\\${() => $Bobe_Comp_${i}}` : '';\n lines.push(` tp node={mdRef?.querySelector?.('#code-${i}')}`);\n lines.push(` \\${Code} files=\\${codeTree${i}} ${previewProp}`);\n }\n }\n lines.push(` \\`;`);\n lines.push(`}`);\n lines.push(`export default Markdown;`);\n if (layoutPath) {\n lines.push(`export { __layout as layout };`);\n }\n if (routeMeta) {\n lines.push(`export const routeMeta = ${JSON.stringify(routeMeta)};`);\n }\n return lines.join('\\n');\n}\n\n/**\n * bobe-markdown Vite 插件。\n *\n * 将 .md / .mdx 文件编译为 bobe 组件:\n * import Readme from './README.md';\n *\n * 支持 <code src=\"xxx.ts\" /> 引入代码文件及 import 树(非 node_modules),\n * 以 Code 组件 + tp 传送方式渲染。\n */\n\nexport type HeadItem = {\n depth: number;\n id: string;\n text: string;\n};\n\nconst CODE_TAG_RE = /<code\\s+src=\"([^\"]+)\"(\\s+preview)?\\s*\\/>/g;\n\nexport default function markdownPlugin(opt: MarkdownPluginOptions = {}): Plugin {\n let headers: HeadItem[] = [];\n const headClassMap = {\n '1': 'cyber-title'\n }\n return {\n name: 'bobe-markdown',\n enforce: 'pre',\n\n configResolved() {\n registerBobeLang(); // 注册 bobe DSL 语法高亮(支持 markdown 中的 ```bobe 代码块)\n marked.use({\n gfm: true, // GitHub Flavored Markdown\n renderer: {\n heading({ tokens, depth }) {\n const text = this.parser.parseInline(tokens);\n const id = text.toLowerCase().replace(/[^\\w一-鿿]+/g, '-');\n if (depth <= (opt.asideDeep || 3)) {\n headers.push({ depth, id, text });\n }\n return `<h${depth} class=\"${headClassMap[depth]}\" data-text=\"${text}\" id=\"${id}\">${text}</h${depth}>`;\n },\n code({ text, lang }) {\n return `<pre><code class=\"hljs\">${hljs.highlight(text, { language: lang }).value}</code></pre>`;\n }\n }\n });\n if (opt.marked) marked.use(opt.marked);\n },\n\n async transform(code, id) {\n if (!id.match(/\\.mdx?$/)) return;\n headers = [];\n try {\n // 解析 YAML frontmatter\n const { data, content: mdContent } = matter(code);\n\n // 提取 routeMeta\n const routeMeta = data.meta as Record<string, any> | undefined;\n\n // 提取 layout 路径(相对于 .md 文件)\n let layoutPath: string | undefined;\n if (data.layout && typeof data.layout === 'string') {\n layoutPath = data.layout;\n }\n\n const html = marked.parse(mdContent) as string;\n\n // 匹配 <code src=\"xxx.ts\"> → <div id=\"code-N\">\n const codeTags: string[] = [];\n const previewEntries: string[] = [];\n let idx = 0;\n const finalHtml = html.replace(CODE_TAG_RE, (_, src, preview) => {\n codeTags.push(src);\n if (preview) {\n previewEntries[idx] = src;\n }\n return `<div id=\"code-${idx++}\"></div>`;\n });\n\n // 解析每个 code block 的 import 树\n const fileDir = dirname(id);\n const codeTrees = await Promise.all(\n codeTags.map(tag => resolveImportTree(resolve(fileDir, tag), id, this.resolve.bind(this)))\n );\n\n return { code: gen(finalHtml, headers, previewEntries, codeTrees, layoutPath, routeMeta), moduleSideEffects: false };\n } catch (e: any) {\n this.error(`[bobe-markdown] 解析失败: ${id}\\n${e.message}`);\n }\n }\n };\n}\n"],"names":["highlight","code","lang","hljs","language","value","replace","resolveImportTree","importPath","currentPath","vResolve","walked","Set","resolved","absPath","id","includes","startsWith","has","add","content","fs","promises","readFile","error","console","warn","langMap","ts","tsx","mts","js","jsx","mjs","css","html","json","ext","path","extname","slice","item","name","basename","importRegex","match","dependencies","exec","push","length","deps","Promise","all","flat","registerBobeLang","registerLanguage","ATTRS","join","keywords","contains","COMMENT","relevance","className","begin","end","skip","subLanguage","RegExp","NUMBER_MODE","patchJsFamily","fn","getLanguage","rawDefinition","def","some","c","toString","SUBST","starts","returnEnd","BACKSLASH_ESCAPE","esc","s","gen","headers","previewEntries","codeTrees","layoutPath","routeMeta","hasCode","lines","forEach","src","i","JSON","stringify","_ref","depth","text","previewProp","CODE_TAG_RE","markdownPlugin","opt","headClassMap","enforce","configResolved","marked","use","gfm","renderer","heading","tokens","parser","parseInline","toLowerCase","asideDeep","transform","_matter","matter","data","mdContent","meta","layout","parse","codeTags","idx","finalHtml","_","preview","fileDir","dirname","map","tag","resolve","bind","moduleSideEffects","e","message"],"mappings":"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"}