bobe-dom 0.0.61 → 0.0.63
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.
- package/dist/bobe-dom.cjs.js +240 -196
- package/dist/bobe-dom.cjs.js.map +1 -1
- package/dist/bobe-dom.esm.js +238 -195
- package/dist/bobe-dom.esm.js.map +1 -1
- package/dist/code.cjs.js +43 -0
- package/dist/code.cjs.js.map +1 -0
- package/dist/code.css +107 -0
- package/dist/code.esm.js +41 -0
- package/dist/code.esm.js.map +1 -0
- package/dist/fonts/twilio.woff2 +0 -0
- package/dist/index.css +9 -0
- package/dist/index.d.ts +17 -4
- package/dist/index.umd.js +243 -200
- package/dist/index.umd.js.map +1 -1
- package/dist/markdown.cjs.js +223 -14
- package/dist/markdown.cjs.js.map +1 -1
- package/dist/markdown.d.ts +3 -0
- package/dist/markdown.esm.js +223 -14
- package/dist/markdown.esm.js.map +1 -1
- package/package.json +12 -3
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.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 === '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","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\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","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\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 '&': '&',\n '\"': '"',\n '<': '<',\n '>': '>'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>'\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 if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\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 if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\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 /** 已认领节点集合,避免同一次遍历中重复认领 */\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n /** 进入子节点:后续 findUnclaimed 搜 node 的直接子级 */\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n /** 退出当前节点,回到父级 */\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n /** 在 this.parent 的 firstChild 链上查找第一个满足条件且未被认领的节点 */\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(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 const leaveLogicNode = (node: Node) => {\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 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","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.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 === '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 '&': '&',\n '\"': '"',\n '<': '<',\n '>': '>'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>'\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\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 if (key === 'class') {\n if (value == null) continue;\n let classStr: string;\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 if (classStr) {\n point.html += ` class=\"${escapeAttr(classStr)}\"`;\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 // 纯 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","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","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","id","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","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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"}
|
package/dist/markdown.cjs.js
CHANGED
|
@@ -1,26 +1,215 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var marked = require('marked');
|
|
4
|
+
var path = require('path');
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var hljs = require('highlight.js');
|
|
7
|
+
|
|
8
|
+
function highlight(code, lang) {
|
|
9
|
+
try {
|
|
10
|
+
return hljs.highlight(code, {
|
|
11
|
+
language: lang
|
|
12
|
+
}).value;
|
|
13
|
+
} catch {
|
|
14
|
+
return code.replace(/</g, '<').replace(/>/g, '>');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async function resolveImportTree(importPath, currentPath, vResolve, walked = new Set()) {
|
|
18
|
+
const resolved = await vResolve(importPath, currentPath);
|
|
19
|
+
const absPath = resolved?.id;
|
|
20
|
+
if (!absPath || absPath.includes('node_modules') || absPath.startsWith('\0') || walked.has(absPath)) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
walked.add(absPath);
|
|
24
|
+
let content = '';
|
|
25
|
+
try {
|
|
26
|
+
content = await fs.promises.readFile(absPath, 'utf-8');
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.warn(`Failed to read file: ${absPath}`);
|
|
29
|
+
}
|
|
30
|
+
if (!content) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
const langMap = {
|
|
34
|
+
ts: 'typescript',
|
|
35
|
+
tsx: 'typescript',
|
|
36
|
+
mts: 'typescript',
|
|
37
|
+
js: 'javascript',
|
|
38
|
+
jsx: 'javascript',
|
|
39
|
+
mjs: 'javascript',
|
|
40
|
+
css: 'css',
|
|
41
|
+
html: 'xml',
|
|
42
|
+
json: 'json'
|
|
43
|
+
};
|
|
44
|
+
const ext = path.extname(absPath).slice(1);
|
|
45
|
+
const lang = langMap[ext];
|
|
46
|
+
const item = {
|
|
47
|
+
path: absPath,
|
|
48
|
+
name: path.basename(absPath),
|
|
49
|
+
lang: lang,
|
|
50
|
+
html: lang ? highlight(content, lang) : content
|
|
51
|
+
};
|
|
52
|
+
const importRegex = /import\s+(?:[\w*\s{},]*\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
53
|
+
let match;
|
|
54
|
+
const dependencies = [];
|
|
55
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
56
|
+
const importPath = match[1];
|
|
57
|
+
if (!importPath.startsWith('http')) {
|
|
58
|
+
dependencies.push(resolveImportTree(importPath, absPath, vResolve, walked));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!dependencies.length) {
|
|
62
|
+
return [item];
|
|
63
|
+
}
|
|
64
|
+
const deps = await Promise.all(dependencies);
|
|
65
|
+
return [item, ...deps.flat()];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function registerBobeLang() {
|
|
69
|
+
hljs.registerLanguage('bobe', hljs => {
|
|
70
|
+
const ATTRS = ['class', 'id', 'text', 'html', 'style', 'href', 'src', 'alt', 'title', 'ref', 'type', 'placeholder', 'value', 'name', 'foo', 'disabled', 'readonly', 'checked', 'selected', 'hidden', 'role', 'target', 'rel', 'width', 'height', 'tabindex', 'data-[\\w-]+', 'aria-[\\w-]+', 'onclick', 'oninput', 'onchange', 'onsubmit', 'onreset', 'onkeydown', 'onkeyup', 'onkeypress', 'onfocus', 'onblur', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseover', 'onmouseout', 'onload', 'onerror', 'onscroll', 'onresize', 'ondrag', 'ondragstart', 'ondragend', 'ondragover', 'ondrop', 'ontouchstart', 'ontouchend', 'ontouchmove'].join('|');
|
|
71
|
+
return {
|
|
72
|
+
name: 'bobe',
|
|
73
|
+
keywords: ['if', 'else', 'for', 'tp', 'context'],
|
|
74
|
+
contains: [hljs.COMMENT('#', '$', {
|
|
75
|
+
relevance: 0
|
|
76
|
+
}), {
|
|
77
|
+
className: 'template-substitution',
|
|
78
|
+
begin: /\$\{/,
|
|
79
|
+
end: /\}/,
|
|
80
|
+
contains: [{
|
|
81
|
+
begin: /\$\{/,
|
|
82
|
+
end: /\}/,
|
|
83
|
+
skip: true
|
|
84
|
+
}],
|
|
85
|
+
subLanguage: 'javascript'
|
|
86
|
+
}, {
|
|
87
|
+
className: 'template-substitution',
|
|
88
|
+
begin: /(?<==)\{/,
|
|
89
|
+
end: /\}/,
|
|
90
|
+
contains: [{
|
|
91
|
+
begin: /\{/,
|
|
92
|
+
end: /\}/,
|
|
93
|
+
skip: true
|
|
94
|
+
}],
|
|
95
|
+
subLanguage: 'javascript'
|
|
96
|
+
}, {
|
|
97
|
+
className: 'string',
|
|
98
|
+
begin: /"/,
|
|
99
|
+
end: /"/,
|
|
100
|
+
contains: [{
|
|
101
|
+
begin: /\$\{/,
|
|
102
|
+
end: /\}/,
|
|
103
|
+
subLanguage: 'javascript'
|
|
104
|
+
}]
|
|
105
|
+
}, {
|
|
106
|
+
className: 'selector-tag',
|
|
107
|
+
begin: /^[ \t]*(?!(?:if|else|for|tp)\b)[a-z][\w-]*(?:-[a-z][\w-]*)*\b/m,
|
|
108
|
+
relevance: 2
|
|
109
|
+
}, {
|
|
110
|
+
className: 'attr',
|
|
111
|
+
begin: new RegExp(`\\b(?:${ATTRS})\\b(?=\\s*=)`),
|
|
112
|
+
relevance: 1
|
|
113
|
+
}, {
|
|
114
|
+
className: 'attr',
|
|
115
|
+
begin: /\b(?:disabled|readonly|checked|selected|hidden)\b(?!\s*=)/,
|
|
116
|
+
relevance: 0
|
|
117
|
+
}, {
|
|
118
|
+
className: 'variable',
|
|
119
|
+
begin: /(?<=for\s+)\w+(?=\s*;)/,
|
|
120
|
+
relevance: 0
|
|
121
|
+
}, {
|
|
122
|
+
className: 'params',
|
|
123
|
+
begin: /(?<=for\s+\S+\s*;\s*)\w+/,
|
|
124
|
+
relevance: 0
|
|
125
|
+
}, {
|
|
126
|
+
className: 'params',
|
|
127
|
+
begin: /(?<=for\s+\S+\s*;\s*\w+\s+)\w+/,
|
|
128
|
+
relevance: 0
|
|
129
|
+
}, hljs.NUMBER_MODE]
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
function patchJsFamily(name) {
|
|
133
|
+
const fn = hljs.getLanguage(name)?.rawDefinition;
|
|
134
|
+
if (!fn) return;
|
|
135
|
+
const def = fn(hljs);
|
|
136
|
+
if (def.contains.some(c => c.begin?.toString?.().includes('bobe'))) return;
|
|
137
|
+
const SUBST = {
|
|
138
|
+
className: 'subst',
|
|
139
|
+
begin: /\$\{/,
|
|
140
|
+
end: /\}/,
|
|
141
|
+
keywords: def.keywords
|
|
142
|
+
};
|
|
143
|
+
def.contains.push({
|
|
144
|
+
begin: /\.?bobe`/,
|
|
145
|
+
end: '',
|
|
146
|
+
starts: {
|
|
147
|
+
end: '`',
|
|
148
|
+
returnEnd: false,
|
|
149
|
+
contains: [hljs.BACKSLASH_ESCAPE, SUBST],
|
|
150
|
+
subLanguage: 'bobe'
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
hljs.registerLanguage(name, () => def);
|
|
154
|
+
}
|
|
155
|
+
patchJsFamily('javascript');
|
|
156
|
+
patchJsFamily('typescript');
|
|
157
|
+
}
|
|
4
158
|
|
|
5
159
|
function esc(s) {
|
|
6
160
|
return s.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$/g, '\\$');
|
|
7
161
|
}
|
|
8
|
-
function gen(html, headers) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
162
|
+
function gen(html, headers, previewEntries, codeTrees = []) {
|
|
163
|
+
const hasCode = codeTrees.length > 0;
|
|
164
|
+
const lines = [`import { bobe, Store } from 'bobe';`];
|
|
165
|
+
if (hasCode) {
|
|
166
|
+
lines.push(`import Code from 'bobe-dom/plugin-markdown/code';`);
|
|
167
|
+
previewEntries.forEach((src, i) => {
|
|
168
|
+
lines.push(`import $Bobe_Comp_${i} from '${src}';`);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
lines.push(`const mdHtml = \`${esc(html)}\`;`);
|
|
172
|
+
if (hasCode) {
|
|
173
|
+
for (let i = 0; i < codeTrees.length; i++) {
|
|
174
|
+
lines.push(`const codeTree${i} = ${JSON.stringify(codeTrees[i])};`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
lines.push(`class Markdown extends Store {`);
|
|
178
|
+
lines.push(` mdRef = null;`);
|
|
179
|
+
lines.push(` ui = bobe\``);
|
|
180
|
+
lines.push(` div class="markdown" style="display: flex;"`);
|
|
181
|
+
lines.push(` main ref={mdRef} class="markdown-body" style="overflow-y: auto;" html=\${mdHtml}`);
|
|
182
|
+
lines.push(` if showAside`);
|
|
183
|
+
lines.push(` div class="markdown-aside" style="flex: none; display: flex; flex-direction: column; overflow-y: auto;"`);
|
|
184
|
+
for (const _ref of headers) {
|
|
185
|
+
const depth = _ref.depth;
|
|
186
|
+
const id = _ref.id;
|
|
187
|
+
const text = _ref.text;
|
|
188
|
+
lines.push(` a href="#${id}" text="${esc(text)}" class="markdown-aside-item markdown-aside-depth-${depth}"`);
|
|
189
|
+
}
|
|
190
|
+
if (hasCode) {
|
|
191
|
+
for (let i = 0; i < codeTrees.length; i++) {
|
|
192
|
+
const previewProp = previewEntries[i] ? `preview=\${() => $Bobe_Comp_${i}}` : '';
|
|
193
|
+
lines.push(` tp node={mdRef?.querySelector?.('#code-${i}')}`);
|
|
194
|
+
lines.push(` \${Code} files=\${codeTree${i}} ${previewProp}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
lines.push(` \`;`);
|
|
198
|
+
lines.push(`}`);
|
|
199
|
+
lines.push(`export default Markdown;`);
|
|
200
|
+
return lines.join('\n');
|
|
17
201
|
}
|
|
202
|
+
const CODE_TAG_RE = /<code\s+src="([^"]+)"(\s+preview)?\s*\/>/g;
|
|
18
203
|
function markdownPlugin(opt = {}) {
|
|
19
204
|
let headers = [];
|
|
205
|
+
const headClassMap = {
|
|
206
|
+
'1': 'cyber-title'
|
|
207
|
+
};
|
|
20
208
|
return {
|
|
21
209
|
name: 'bobe-markdown',
|
|
22
210
|
enforce: 'pre',
|
|
23
211
|
configResolved() {
|
|
212
|
+
registerBobeLang();
|
|
24
213
|
marked.marked.use({
|
|
25
214
|
gfm: true,
|
|
26
215
|
renderer: {
|
|
@@ -29,27 +218,47 @@ function markdownPlugin(opt = {}) {
|
|
|
29
218
|
depth
|
|
30
219
|
}) {
|
|
31
220
|
const text = this.parser.parseInline(tokens);
|
|
32
|
-
const id = text.toLowerCase().replace(/[^\w
|
|
33
|
-
if (depth <= opt.asideDeep || 3) {
|
|
221
|
+
const id = text.toLowerCase().replace(/[^\w一-鿿]+/g, '-');
|
|
222
|
+
if (depth <= (opt.asideDeep || 3)) {
|
|
34
223
|
headers.push({
|
|
35
224
|
depth,
|
|
36
225
|
id,
|
|
37
226
|
text
|
|
38
227
|
});
|
|
39
228
|
}
|
|
40
|
-
return `<h${depth} id="${id}">${text}</h${depth}>`;
|
|
229
|
+
return `<h${depth} class="${headClassMap[depth]}" data-text="${text}" id="${id}">${text}</h${depth}>`;
|
|
230
|
+
},
|
|
231
|
+
code({
|
|
232
|
+
text,
|
|
233
|
+
lang
|
|
234
|
+
}) {
|
|
235
|
+
return `<pre><code class="hljs">${hljs.highlight(text, {
|
|
236
|
+
language: lang
|
|
237
|
+
}).value}</code></pre>`;
|
|
41
238
|
}
|
|
42
239
|
}
|
|
43
240
|
});
|
|
44
241
|
if (opt.marked) marked.marked.use(opt.marked);
|
|
45
242
|
},
|
|
46
|
-
transform(code, id) {
|
|
243
|
+
async transform(code, id) {
|
|
47
244
|
if (!id.match(/\.mdx?$/)) return;
|
|
48
245
|
headers = [];
|
|
49
246
|
try {
|
|
50
247
|
const html = marked.marked.parse(code);
|
|
248
|
+
const codeTags = [];
|
|
249
|
+
const previewEntries = [];
|
|
250
|
+
let idx = 0;
|
|
251
|
+
const finalHtml = html.replace(CODE_TAG_RE, (_, src, preview) => {
|
|
252
|
+
codeTags.push(src);
|
|
253
|
+
if (preview) {
|
|
254
|
+
previewEntries[idx] = src;
|
|
255
|
+
}
|
|
256
|
+
return `<div id="code-${idx++}"></div>`;
|
|
257
|
+
});
|
|
258
|
+
const fileDir = path.dirname(id);
|
|
259
|
+
const codeTrees = await Promise.all(codeTags.map(tag => resolveImportTree(path.resolve(fileDir, tag), id, this.resolve.bind(this))));
|
|
51
260
|
return {
|
|
52
|
-
code: gen(
|
|
261
|
+
code: gen(finalHtml, headers, previewEntries, codeTrees),
|
|
53
262
|
moduleSideEffects: false
|
|
54
263
|
};
|
|
55
264
|
} catch (e) {
|
package/dist/markdown.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.cjs.js","sources":["../src/plugins/markdown/index.ts"],"sourcesContent":["import type { Plugin } from 'vite';\nimport type { MarkedExtension } from 'marked';\nimport { marked } from 'marked';\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(html: string, headers: HeadItem[]): string {\n const code = [\n `import { bobe } from 'bobe';`,\n `const mdHtml = \\`${esc(html)}\\`;`,\n `export default bobe\\``,\n ` div class=\"markdown\" style=\"display: flex;\"`,\n ` main class=\"markdown-main\" style=\"overflow-y: auto;\" html=\\${mdHtml}`,\n ` if showAside`,\n ` div class=\"markdown-aside\" style=\"display: flex; flex-direction: column; overflow-y: auto;\"`,\n ...headers.map(({ depth, id, text }) => {\n return ` a href=\"#${id}\" text=\"${text}\" class=\"markdown-aside-item markdown-aside-depth-${depth}\"`;\n }),\n `\\`;`\n ].join('\\n');\n return code;\n}\n\n/**\n * bobe-markdown Vite 插件。\n *\n * 将 .md / .mdx 文件编译为 bobe 组件:\n * import Readme from './README.md';\n */\n\nexport type HeadItem = {\n depth: number;\n id: string;\n text: string;\n};\nexport default function markdownPlugin(opt: MarkdownPluginOptions = {}): Plugin {\n let headers: HeadItem[] = [];\n return {\n name: 'bobe-markdown',\n enforce: 'pre',\n\n configResolved() {\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\\u4e00-\\u9fff]+/g, '-');\n if(depth <= opt.asideDeep || 3) {\n headers.push({ depth, id, text });\n }\n return `<h${depth} id=\"${id}\">${text}</h${depth}>`;\n }\n }\n });\n if (opt.marked) marked.use(opt.marked);\n },\n\n transform(code, id) {\n if (!id.match(/\\.mdx?$/)) return;\n headers = [];\n try {\n const html = marked.parse(code) as string;\n return { code: gen(html, headers), moduleSideEffects: false };\n } catch (e: any) {\n this.error(`[bobe-markdown] 解析失败: ${id}\\n${e.message}`);\n }\n }\n };\n}\n"],"names":["esc","s","replace","gen","html","headers","code","map","depth","id","text","join","markdownPlugin","opt","name","enforce","configResolved","marked","use","gfm","renderer","heading","tokens","parser","parseInline","toLowerCase","asideDeep","push","transform","match","parse","moduleSideEffects","e","error","message"],"mappings":";;;;AAYA,SAASA,GAAGA,CAACC,CAAS,EAAU;EAC9B,OAAOA,CAAC,CAACC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5E;AAGA,SAASC,GAAGA,CAACC,IAAY,EAAEC,OAAmB,EAAU;EACtD,MAAMC,IAAI,GAAG,CACX,CAAA,4BAAA,CAA8B,EAC9B,CAAA,iBAAA,EAAoBN,GAAG,CAACI,IAAI,CAAC,CAAA,GAAA,CAAK,EAClC,CAAA,qBAAA,CAAuB,EACvB,CAAA,6CAAA,CAA+C,EAC/C,CAAA,wEAAA,CAA0E,EAC1E,CAAA,gBAAA,CAAkB,EAClB,CAAA,iGAAA,CAAmG,EACnG,GAAGC,OAAO,CAACE,GAAG,CAAC,CAAC;IAAEC,KAAK;IAAEC,EAAE;AAAEC,IAAAA;AAAK,GAAC,KAAK;AACtC,IAAA,OAAO,oBAAoBD,EAAE,CAAA,QAAA,EAAWC,IAAI,CAAA,kDAAA,EAAqDF,KAAK,CAAA,CAAA,CAAG;EAC3G,CAAC,CAAC,EACF,CAAA,GAAA,CAAK,CACN,CAACG,IAAI,CAAC,IAAI,CAAC;AACZ,EAAA,OAAOL,IAAI;AACb;AAce,SAASM,cAAcA,CAACC,GAA0B,GAAG,EAAE,EAAU;EAC9E,IAAIR,OAAmB,GAAG,EAAE;EAC5B,OAAO;AACLS,IAAAA,IAAI,EAAE,eAAe;AACrBC,IAAAA,OAAO,EAAE,KAAK;AAEdC,IAAAA,cAAcA,GAAG;MACfC,aAAM,CAACC,GAAG,CAAC;AACTC,QAAAA,GAAG,EAAE,IAAI;AACTC,QAAAA,QAAQ,EAAE;AACRC,UAAAA,OAAOA,CAAC;YAAEC,MAAM;AAAEd,YAAAA;AAAM,WAAC,EAAE;YACzB,MAAME,IAAI,GAAG,IAAI,CAACa,MAAM,CAACC,WAAW,CAACF,MAAM,CAAC;AAC5C,YAAA,MAAMb,EAAE,GAAGC,IAAI,CAACe,WAAW,EAAE,CAACvB,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC;AAClE,YAAA,IAAGM,KAAK,IAAIK,GAAG,CAACa,SAAS,IAAI,CAAC,EAAE;cAC9BrB,OAAO,CAACsB,IAAI,CAAC;gBAAEnB,KAAK;gBAAEC,EAAE;AAAEC,gBAAAA;AAAK,eAAC,CAAC;AACnC,YAAA;YACA,OAAO,CAAA,EAAA,EAAKF,KAAK,CAAA,KAAA,EAAQC,EAAE,KAAKC,IAAI,CAAA,GAAA,EAAMF,KAAK,CAAA,CAAA,CAAG;AACpD,UAAA;AACF;AACF,OAAC,CAAC;MACF,IAAIK,GAAG,CAACI,MAAM,EAAEA,aAAM,CAACC,GAAG,CAACL,GAAG,CAACI,MAAM,CAAC;IACxC,CAAC;AAEDW,IAAAA,SAASA,CAACtB,IAAI,EAAEG,EAAE,EAAE;AAClB,MAAA,IAAI,CAACA,EAAE,CAACoB,KAAK,CAAC,SAAS,CAAC,EAAE;AAC1BxB,MAAAA,OAAO,GAAG,EAAE;MACZ,IAAI;AACF,QAAA,MAAMD,IAAI,GAAGa,aAAM,CAACa,KAAK,CAACxB,IAAI,CAAW;QACzC,OAAO;AAAEA,UAAAA,IAAI,EAAEH,GAAG,CAACC,IAAI,EAAEC,OAAO,CAAC;AAAE0B,UAAAA,iBAAiB,EAAE;SAAO;MAC/D,CAAC,CAAC,OAAOC,CAAM,EAAE;QACf,IAAI,CAACC,KAAK,CAAC,CAAA,sBAAA,EAAyBxB,EAAE,KAAKuB,CAAC,CAACE,OAAO,CAAA,CAAE,CAAC;AACzD,MAAA;AACF,IAAA;GACD;AACH;;;;"}
|
|
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, '<').replace(/>/g, '>');\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 { 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(html: string, headers: HeadItem[], previewEntries: string[], codeTrees: FileItem[][] = []): string {\n const hasCode = codeTrees.length > 0;\n const lines = [`import { bobe, Store } from 'bobe';`];\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 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 const html = marked.parse(code) 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), 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","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","parse","codeTags","idx","finalHtml","_","preview","fileDir","dirname","map","tag","resolve","bind","moduleSideEffects","e","message"],"mappings":"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"}
|
package/dist/markdown.d.ts
CHANGED