{"version":3,"sources":["../src/index.node.ts","../src/encoding.ts","../src/h.ts","../src/vcss.ts","../src/vdom.ts","../src/utils.ts","../src/html.ts","../src/htmlparser.ts","../src/vdomparser.ts","../src/manipulate.ts","../src/serialize-markdown.ts","../src/tidy.ts","../src/serialize-plaintext.ts","../src/serialize-safehtml.ts","../src/xml.ts","../src/node.ts"],"sourcesContent":["export * from './index.browser'\nexport { handleHTMLFile } from './node'\n","// import { decode } from './encoding-he'\nimport { decodeHTML as decode } from 'entities'\n\nexport function escapeHTML(text: string) {\n  return text\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/'/g, '&apos;')\n    .replace(/\"/g, '&quot;')\n    .replace(/\\xA0/g, '&nbsp;')\n    .replace(/\\xAD/g, '&shy;')\n}\n\n// encode(text, {\n//   useNamedReferences: true,\n// })\n\nexport const unescapeHTML = (html: string) => decode(html)\n","import type { VDocument, VDocumentFragment, VElement } from './vdom'\n\n/*\n * Abstraction for h/jsx like DOM descriptions.\n * It is used in DOM, VDOM\n *\n */\n\ninterface Context {\n  h?: any\n  document: VDocument | VDocumentFragment\n}\n\nfunction _h(\n  context: Context,\n  tag: string | ((a0: any) => VDocumentFragment | VElement),\n  attrs: object,\n  children: any[],\n): VDocumentFragment | VElement {\n  if (typeof tag === 'function') {\n    return tag({\n      props: { ...attrs, children },\n      attrs,\n      children,\n      h: context.h,\n      context,\n    })\n  }\n  else {\n    let isElement = true\n    let el: VDocumentFragment | VElement\n    if (tag) {\n      if (tag.toLowerCase() === 'fragment') {\n        el = context.document.createDocumentFragment()\n        isElement = false\n      }\n      else { el = context.document.createElement(tag) }\n    }\n    else {\n      el = context.document.createElement('div')\n    }\n    if (attrs && isElement) {\n      const element = el as VElement\n      for (const [key, value] of Object.entries(attrs)) {\n        const compareKey = key.toLowerCase()\n        if (compareKey === 'classname') {\n          element.className = value\n        }\n        else if (compareKey === 'on') {\n          for (const [name, v] of Object.entries(value)) {\n            element.setAttribute(`on${name}`, String(v))\n          }\n        }\n        else if (value !== false && value != null) {\n          element.setAttribute(key, value === true ? key : value.toString())\n        }\n      }\n    }\n    if (children) {\n      for (const childOuter of children) {\n        const cc = Array.isArray(childOuter) ? childOuter : [childOuter]\n        for (const child of cc) {\n          if (child !== false && child != null) {\n            if (typeof child !== 'object') {\n              el.appendChild(context.document.createTextNode(child.toString()))\n            }\n            else {\n              el.appendChild(child)\n            }\n          }\n        }\n      }\n    }\n    return el\n  }\n}\n\nexport function hArgumentParser(\n  tag: string | ((props: any) => VDocumentFragment | VElement),\n  attrs?: Record<string, unknown> | unknown[] | null,\n  ...childrenInput: unknown[]\n): { tag: string | ((props: any) => VDocumentFragment | VElement), attrs: Record<string, unknown>, children: unknown[] } {\n  let children: unknown[] = childrenInput\n\n  if (typeof tag === 'object' && tag !== null) {\n    // If tag is an object, treat as fragment-like\n    children = (tag as any).children\n    attrs = (tag as any).attrs\n    tag = 'fragment'\n  }\n\n  if (Array.isArray(attrs)) {\n    children = [attrs]\n    attrs = {}\n  }\n  else if (attrs) {\n    if ((attrs as Record<string, unknown>).attrs) {\n      const attrsObj = (attrs as Record<string, unknown>).attrs\n      attrs = { ...(typeof attrsObj === 'object' && attrsObj !== null ? attrsObj : {}), ...attrs }\n      delete (attrs as Record<string, unknown>).attrs\n    }\n  }\n  else {\n    attrs = {}\n  }\n\n  return {\n    tag,\n    attrs: attrs ?? {},\n    children:\n      typeof children[0] === 'string'\n        ? children\n        : children.flat(Number.POSITIVE_INFINITY),\n  }\n}\n\nexport function hFactory(context: Context) {\n  // let context = { document }\n  context.h = function h(itag: any, iattrs: any, ...ichildren: any[]) {\n    const { tag, attrs, children } = hArgumentParser(itag, iattrs, ichildren)\n    return _h(context, tag, attrs, children)\n  }\n  return context.h\n}\n","import type { VElement } from './vdom'\nimport { parse } from 'css-what'\n\nconst cache: Record<string, any> = {}\n\nexport function parseSelector(selector: string) {\n  if (!(selector in cache)) {\n    cache[selector] = parse(selector)\n  }\n  return cache[selector]\n}\n\nexport function matchSelector(\n  selector: string,\n  element: VElement,\n) {\n  for (const rules of parseSelector(selector)) {\n    function matchRule(el: VElement | null, ruleParts: any[], idx: number): boolean {\n      while (el && el.nodeType !== 1) el = el.parentNode\n      if (!el || idx < 0)\n        return false\n      const part = ruleParts[idx]\n      switch (part.type) {\n        case 'descendant': {\n          let parent = el.parentNode\n          while (parent) {\n            if (parent.nodeType === 1 && matchRule(parent, ruleParts, idx - 1))\n              return true\n            parent = parent.parentNode\n          }\n          return false\n        }\n        case 'child': {\n          let parent = el.parentNode\n          while (parent && parent.nodeType !== 1) parent = parent.parentNode\n          return !!parent && matchRule(parent, ruleParts, idx - 1)\n        }\n        case 'sibling': {\n          let prev = el.previousSibling\n          while (prev) {\n            if (prev.nodeType === 1 && matchRule(prev, ruleParts, idx - 1))\n              return true\n            prev = prev.previousSibling\n          }\n          return false\n        }\n        case 'adjacent': {\n          let prev = el.previousSibling\n          while (prev && prev.nodeType !== 1) prev = prev.previousSibling\n          return !!prev && matchRule(prev, ruleParts, idx - 1)\n        }\n        case 'general': { // general sibling combinator (~)\n          let prev = el.previousSibling\n          while (prev) {\n            if (prev.nodeType === 1 && matchRule(prev, ruleParts, idx - 1))\n              return true\n            prev = prev.previousSibling\n          }\n          return false\n        }\n        default: {\n          if (!matchSimple(el, part))\n            return false\n          if (idx === 0)\n            return true\n          return matchRule(el, ruleParts, idx - 1)\n        }\n      }\n    }\n\n    function matchSimple(element: VElement, part: any): boolean {\n      const { type, name, action, value, data } = part\n      if (type === 'attribute') {\n        const attrValue = element.getAttribute(name)\n        switch (action) {\n          case 'equals': return attrValue === value\n          case 'start': return !!attrValue?.startsWith(value)\n          case 'end': return !!attrValue?.endsWith(value)\n          case 'element':\n            return name === 'class'\n              ? element.classList.contains(value)\n              : !!attrValue?.includes(value)\n          case 'exists': return element.hasAttribute(name)\n          case 'any': return !!attrValue?.includes(value)\n          case 'hyphen': // [attr|=val]\n            return attrValue === value || !!attrValue?.startsWith(`${value}-`)\n          case 'contains': // [attr*=val]\n            return !!attrValue?.includes(value)\n          default: return false\n        }\n      }\n      if (type === 'tag')\n        return element.tagName === name.toUpperCase()\n      if (type === 'universal')\n        return true\n      if (type === 'pseudo') {\n        if (name === 'not') {\n          return !data.some((rules: any) => rules.every((p: any) => matchSimple(element, p)))\n        }\n        const parent = element.parentNode\n        if (!parent || !parent.childNodes)\n          return false\n        const elementChildren = parent.childNodes.filter((n: any) => n.nodeType === 1)\n        if (name === 'first-child')\n          return elementChildren[0] === element\n        if (name === 'last-child')\n          return elementChildren[elementChildren.length - 1] === element\n        if (name === 'nth-child') {\n          const idx = elementChildren.indexOf(element)\n          const nth = data && data.length > 0 ? Number.parseInt(data[0], 10) - 1 : 0\n          return idx === nth\n        }\n        return false\n      }\n      return false\n    }\n\n    if (matchRule(element, rules, rules.length - 1))\n      return true\n  }\n  return false\n}\n","import { escapeHTML } from './encoding'\nimport { hFactory } from './h'\nimport { html, htmlVDOM } from './html'\nimport { matchSelector } from './vcss'\n\n// For node debugging\nconst inspect = Symbol.for('nodejs.util.inspect.custom')\n\nconst B = { fontWeight: 'bold' }\nconst I = { fontStyle: 'italic' }\nconst M = { backgroundColor: 'rgb(255, 250, 165)' }\nconst U = { textDecorations: 'underline' }\nconst S = { textDecorations: 'line-through' }\n// let C = {}\n\nconst DEFAULTS = {\n  b: B,\n  strong: B,\n  em: I,\n  i: I,\n  mark: M,\n  u: U,\n  a: U,\n  s: S,\n  del: S,\n  ins: M,\n  strike: S,\n  // 'code': C,\n  // 'tt': C\n} as any\n\nfunction toCamelCase(s: string): string {\n  return s.toLowerCase().replace(/[^a-z0-9]+(.)/gi, (_m, chr) => chr.toUpperCase())\n}\n\nexport class VNode {\n  static ELEMENT_NODE = 1\n  static TEXT_NODE = 3\n  static CDATA_SECTION_NODE = 4\n  static PROCESSING_INSTRUCTION_NODE = 7\n  static COMMENT_NODE = 8\n  static DOCUMENT_NODE = 9\n  static DOCUMENT_TYPE_NODE = 10\n  static DOCUMENT_FRAGMENT_NODE = 11\n\n  _parentNode: any\n  _childNodes: any[]\n\n  get nodeType(): number {\n    console.error('Subclasses should define nodeType!')\n    return 0\n  }\n\n  get nodeName() {\n    console.error('Subclasses should define nodeName!')\n    return ''\n  }\n\n  get nodeValue(): string | null {\n    return null\n  }\n\n  constructor() {\n    this._parentNode = null\n    this._childNodes = []\n  }\n\n  cloneNode(deep = false) {\n    // @ts-expect-error xxx\n    const node = new this.constructor()\n    if (deep) {\n      node._childNodes = this._childNodes.map(c => c.cloneNode(true))\n      node._fixChildNodesParent()\n    }\n    return node\n  }\n\n  _fixChildNodesParent() {\n    this._childNodes.forEach(node => (node._parentNode = this))\n  }\n\n  insertBefore(newNode: VNode, node?: VNode) {\n    if (newNode !== node) {\n      let index = node ? this._childNodes.indexOf(node) : 0\n      if (index < 0)\n        index = 0\n      this._childNodes.splice(index, 0, newNode)\n      this._fixChildNodesParent()\n    }\n  }\n\n  appendChild(node: VNode | VNode[] | string | string[] | null | undefined) {\n    if (node == null)\n      return\n    if (node === this) {\n      console.warn('Cannot appendChild to self')\n      return\n    }\n    // log('appendChild', node, this)\n\n    if (node instanceof VDocument)\n      console.warn('No defined how to append a document to a node!', node)\n\n    if (node instanceof VDocumentFragment) {\n      for (const c of [...node._childNodes]) {\n        // Don't iterate over the original! Do [...el]\n        this.appendChild(c)\n      }\n    }\n    else if (Array.isArray(node)) {\n      for (const c of [...node]) {\n        // Don't iterate over the original! Do [...el]\n        this.appendChild(c)\n      }\n    }\n    else if (node instanceof VNode) {\n      node.remove()\n      this._childNodes.push(node)\n    }\n    else {\n      // Fallback for unknown data\n      try {\n        const text\n          = typeof node === 'string' ? node : JSON.stringify(node, null, 2)\n        this._childNodes.push(new VTextNode(text))\n      }\n      catch (err) {\n        console.error(`The data ${node} to be added to ${this.render()} is problematic: ${err}`)\n      }\n    }\n    this._fixChildNodesParent()\n  }\n\n  append = this.appendChild\n\n  removeChild(node: { _parentNode: null }) {\n    const i = this._childNodes.indexOf(node)\n    if (i >= 0) {\n      node._parentNode = null\n      this._childNodes.splice(i, 1)\n      this._fixChildNodesParent()\n    }\n  }\n\n  /** Remove node */\n  remove() {\n    this?.parentNode?.removeChild(this)\n    return this\n  }\n\n  /** Replace content of node with text or nodes */\n  replaceChildren(...nodes: any[]) {\n    this._childNodes = nodes.map(n =>\n      typeof n === 'string' ? new VTextNode(n) : n.remove(),\n    )\n    this._fixChildNodesParent()\n  }\n\n  /** Replace node itself with nodes */\n  replaceWith(...nodes: any[]) {\n    const p = this._parentNode\n    if (p) {\n      const index = this._indexInParent()\n      if (index >= 0) {\n        nodes = nodes.map(n =>\n          typeof n === 'string' ? new VTextNode(n) : n.remove(),\n        )\n        p._childNodes.splice(index, 1, ...nodes)\n        this._parentNode = null\n        p._fixChildNodesParent()\n      }\n    }\n  }\n\n  _indexInParent() {\n    if (this._parentNode)\n      return this._parentNode.childNodes.indexOf(this)\n    return -1\n  }\n\n  get parentNode() {\n    return this._parentNode\n  }\n\n  get childNodes() {\n    return this._childNodes || []\n  }\n\n  get children() {\n    return (this._childNodes || []).filter<any>(isVElement)\n  }\n\n  get firstChild() {\n    return this._childNodes[0]\n  }\n\n  get lastChild() {\n    return this._childNodes[this._childNodes.length - 1]\n  }\n\n  get nextSibling() {\n    const i = this._indexInParent()\n    if (i != null)\n      return this.parentNode.childNodes[i + 1] || null\n    return null\n  }\n\n  get previousSibling() {\n    const i = this._indexInParent()\n    if (i > 0)\n      return this.parentNode.childNodes[i - 1] || null\n    return null\n  }\n\n  get childElementCount() {\n    return this._childNodes.filter(child => child.nodeType === VNode.ELEMENT_NODE).length\n  }\n\n  get firstElementChild() {\n    return this._childNodes.find(child => child.nodeType === VNode.ELEMENT_NODE) || null\n  }\n\n  get lastElementChild() {\n    for (let i = this._childNodes.length - 1; i >= 0; i--) {\n      if (this._childNodes[i].nodeType === VNode.ELEMENT_NODE) {\n        return this._childNodes[i]\n      }\n    }\n    return null\n  }\n\n  flatten(): VElement[] {\n    const elements: VElement[] = []\n    if (this instanceof VElement)\n      elements.push(this)\n    for (const child of this._childNodes)\n      elements.push(...child.flatten())\n    return elements\n  }\n\n  flattenNodes(): VNode[] {\n    const nodes: VNode[] = []\n    nodes.push(this)\n    for (const child of this._childNodes)\n      nodes.push(...child.flattenNodes())\n    return nodes\n  }\n\n  render() {\n    return ''\n  }\n\n  get textContent(): string | null {\n    return this._childNodes.map(c => c.textContent).join('')\n  }\n\n  set textContent(text) {\n    this._childNodes = []\n    if (text)\n      this.appendChild(new VTextNode(text.toString()))\n  }\n\n  contains(otherNode: this) {\n    if (otherNode === this)\n      return true\n    // if (this._childNodes.includes(otherNode)) return true\n    return this._childNodes.some(n => n.contains(otherNode))\n  }\n\n  get ownerDocument() {\n    if (this.nodeType === VNode.DOCUMENT_NODE || this.nodeType === VNode.DOCUMENT_FRAGMENT_NODE)\n      return this\n\n    return this?._parentNode?.ownerDocument\n  }\n\n  toString(): string {\n    return `${this.nodeName}`\n    // return `${this.nodeName}: ${JSON.stringify(this.nodeValue)}`\n  }\n\n  [inspect]() {\n    return `${this.constructor.name} \"${this.render()}\"`\n  }\n\n  get parentElement() {\n    // DOM spec: parentNode if it is an element, else null\n    const p = this.parentNode\n    return p && p.nodeType === VNode.ELEMENT_NODE ? p : null\n  }\n\n  // insertAdjacentHTML(position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend', text: string) {\n  //   let nodes: VNode[] = []\n  //   try {\n  //     const fragment = parseHTML(text)\n  //     nodes = fragment.childNodes.filter((n: any) => n instanceof VNode)\n  //   } catch (e) {\n  //     // Only fallback if text is not valid HTML\n  //     if (/^\\s*<\\/?[a-zA-Z]/.test(text)) {\n  //       throw new Error('HTML parsing failed in insertAdjacentHTML')\n  //     }\n  //     nodes = [new VTextNode(text)]\n  //   }\n  //   switch (position) {\n  //     case 'beforebegin':\n  //       if (this.parentNode) {\n  //         const idx = this._indexInParent()\n  //         if (idx >= 0) {\n  //           this.parentNode._childNodes.splice(idx, 0, ...nodes)\n  //           this.parentNode._fixChildNodesParent()\n  //         }\n  //       }\n  //       break\n  //     case 'afterbegin':\n  //       this._childNodes.unshift(...nodes)\n  //       this._fixChildNodesParent()\n  //       break\n  //     case 'beforeend':\n  //       this._childNodes.push(...nodes)\n  //       this._fixChildNodesParent()\n  //       break\n  //     case 'afterend':\n  //       if (this.parentNode) {\n  //         const idx = this._indexInParent()\n  //         if (idx >= 0) {\n  //           this.parentNode._childNodes.splice(idx + 1, 0, ...nodes)\n  //           this.parentNode._fixChildNodesParent()\n  //         }\n  //       }\n  //       break\n  //   }\n  // }\n}\n\nexport class VTextNode extends VNode {\n  _text: string\n\n  get nodeType(): number {\n    return VNode.TEXT_NODE\n  }\n\n  get nodeName() {\n    return '#text'\n  }\n\n  get nodeValue(): string | null {\n    return this._text || ''\n  }\n\n  get textContent(): string | null {\n    return this.nodeValue\n  }\n\n  constructor(text = '') {\n    super()\n    this._text = text\n  }\n\n  render() {\n    const parentTagName = this.parentNode?.tagName\n    if (parentTagName === 'SCRIPT' || parentTagName === 'STYLE')\n      return this._text\n\n    return escapeHTML(this._text)\n  }\n\n  cloneNode(deep = false) {\n    const node = super.cloneNode(deep)\n    node._text = this._text\n    return node\n  }\n}\n\nexport class VNodeQuery extends VNode {\n  getElementById(name: string) {\n    return this.flatten().find(e => e._attributes.id === name)\n  }\n\n  getElementsByClassName(name: any) {\n    return this.flatten().filter(e => e.classList.contains(name))\n  }\n\n  matches(selector: string) {\n    return matchSelector(selector, this as any)\n  }\n\n  querySelectorAll(selector: any) {\n    return this.flatten().filter(e => e.matches(selector))\n  }\n\n  querySelector(selector: string) {\n    return this.flatten().find(e => e.matches(selector))\n  }\n\n  getElementsByName(name: string) {\n    // DOM spec: only elements with a matching name attribute\n    return this.flatten().filter(e => e.getAttribute && e.getAttribute('name') === name)\n  }\n\n  //\n\n  parent(selector: string) {\n    if (this.matches(selector))\n      return this\n\n    if (this.parentNode == null)\n      return null\n\n    return this.parentNode?.parent(selector)\n  }\n\n  handle(selector: any, handler: (arg0: VElement, arg1: number) => void) {\n    let i = 0\n    for (const el of this.querySelectorAll(selector))\n      handler(el, i++)\n  }\n}\n\ninterface Attr {\n  name: string\n  value: string\n}\n\nexport type VElementStyle = Record<string, string> & {\n  get length(): number\n  getPropertyValue: (name: string) => any\n}\n\nexport class VElement extends VNodeQuery {\n  _originalTagName: string\n  _nodeName: string\n  _attributes: Record<string, string>\n  _styles: VElementStyle | undefined\n  _dataset: Record<string, string> | undefined\n\n  get nodeType() {\n    return VNode.ELEMENT_NODE\n  }\n\n  get nodeName() {\n    return this._nodeName\n  }\n\n  constructor(name = 'div', attrs = {}) {\n    super()\n    this._originalTagName = name\n    this._nodeName = (name || '').toUpperCase()\n    this._attributes = attrs || {}\n  }\n\n  cloneNode(deep = false) {\n    const node = super.cloneNode(deep)\n    node._originalTagName = this._originalTagName\n    node._nodeName = this._nodeName\n    node._attributes = Object.assign({}, this._attributes)\n    return node\n  }\n\n  get attributes(): Attr[] {\n    return Object.entries(this._attributes).map(([name, value]): Attr => ({ name, value }))\n    // return this._attributes\n  }\n\n  get attributesObject() {\n    return { ...this._attributes }\n  }\n\n  _findAttributeName(name: string) {\n    const search = name.toLowerCase()\n    return (\n      Object.keys(this._attributes).find(\n        name => search === name.toLowerCase(),\n      ) || null\n    )\n  }\n\n  setAttribute(name: string, value: any) {\n    this.removeAttribute(name)\n    if (value != null && value !== false) {\n      this._attributes[name] = value\n    }\n    this._styles = undefined\n    this._dataset = undefined\n  }\n\n  getAttribute(name: string): string | null {\n    const originalName = this._findAttributeName(name)\n    const value = originalName ? this._attributes[originalName] : null\n    if (value == null)\n      return null\n    else if (typeof value === 'string')\n      return value\n    else\n      return ''\n  }\n\n  removeAttribute(name: string | number) {\n    const originalName = this._findAttributeName(String(name))\n    if (originalName)\n      delete this._attributes[name]\n  }\n\n  hasAttribute(name: any) {\n    const originalName = this._findAttributeName(name)\n    return originalName ? this._attributes[originalName] != null : false\n  }\n\n  /// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\n  get style(): VElementStyle {\n    if (this._styles == null) {\n      // const styles = Object.assign({}, DEFAULTS[this.tagName.toLowerCase()] || {})\n\n      const styles: Record<string, string> = {}\n      let count = 0\n\n      const styleString = this.getAttribute('style')\n      if (styleString) {\n        let m: string[] | null\n\n        // Thanks to https://github.com/holtwick/zeed-dom/issues/12#issuecomment-2148998665\n        const re = /\\s*([\\w-]+)\\s*:\\s*((url\\(.*?\\)[^;]*|[^;]+))/gi\n\n        // eslint-disable-next-line no-cond-assign\n        while ((m = re.exec(styleString))) {\n          ++count\n          const name = m[1]\n          const value = m[2].trim()\n          styles[name] = value\n          styles[toCamelCase(name)] = value\n        }\n      }\n      this._styles = {\n        get length(): number {\n          return count\n        },\n        getPropertyValue(name: string) {\n          return styles[name]\n        },\n\n        ...DEFAULTS[this.tagName.toLowerCase()],\n        ...styles,\n      }\n    }\n    return this._styles!\n  }\n\n  /// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset\n  get dataset() {\n    if (this._dataset == null) {\n      const dataset: Record<string, string> = {}\n      for (const [key, value] of Object.entries(this._attributes)) {\n        if (key.startsWith('data-')) {\n          dataset[key.slice(5)] = value\n          dataset[toCamelCase(key.slice(5))] = value\n        }\n      }\n      this._dataset = dataset\n    }\n    return this._dataset\n  }\n\n  get tagName() {\n    return this._nodeName\n  }\n\n  /** Private function to easily change the tagName */\n  setTagName(name: string) {\n    this._originalTagName = name\n    this._nodeName = name.toUpperCase()\n  }\n\n  get id(): string | null {\n    return this._attributes.id || null\n  }\n\n  set id(value: string | null) {\n    if (value == null)\n      delete this._attributes.id\n    else this._attributes.id = value\n  }\n\n  get src(): string | null {\n    return this._attributes.src\n  }\n\n  set src(value: string | null) {\n    if (value == null)\n      delete this._attributes.src\n    else this._attributes.src = value\n  }\n\n  //\n\n  getElementsByTagName(name: string) {\n    name = name.toUpperCase()\n    const elements = this.flatten()\n    if (name !== '*')\n      return elements.filter(e => e.tagName === name)\n\n    return elements\n  }\n\n  // html\n\n  setInnerHTML(_html: string) {\n    // throw new Error('setInnerHTML is not implemented; see vdomparser for an example')\n  }\n\n  insertAdjacentHTML(\n    position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend',\n    text: string,\n  ) {\n    // throw new Error('setInnerHTML is not implemented; see vdomparser for an example')\n  }\n\n  get innerHTML() {\n    return this._childNodes.map(c => c.render(html)).join('')\n  }\n\n  set innerHTML(html) {\n    this.setInnerHTML(html)\n  }\n\n  get outerHTML() {\n    return this.render(htmlVDOM)\n  }\n\n  // class\n\n  get className(): string {\n    return this._attributes.class || ''\n  }\n\n  set className(name: string | string[]) {\n    if (Array.isArray(name)) {\n      name = name.filter(n => !!n).join(' ')\n    }\n    else if (typeof name === 'object') {\n      name = Object.entries(name)\n        .filter(([_k, v]) => !!v)\n        .map(([k, _v]) => k)\n        .join(' ')\n    }\n    this._attributes.class = name\n  }\n\n  get classList() {\n    const classNames = String(this.className ?? '').trim().split(/\\s+/g) || []\n    // log('classList', classNames)\n    return {\n      contains(s: any) {\n        return classNames.includes(s)\n      },\n      add: (s: any) => {\n        if (!classNames.includes(s)) {\n          classNames.push(s)\n          this.className = classNames\n        }\n      },\n      remove: (s: any) => {\n        const index = classNames.indexOf(s)\n        if (index >= 0) {\n          classNames.splice(index, 1)\n          this.className = classNames\n        }\n      },\n    }\n  }\n\n  //\n\n  render(h = htmlVDOM) {\n    return h(\n      this._originalTagName || this.tagName,\n      this._attributes,\n      this._childNodes.map(c => c.render(h)).join(''), // children:string is not escaped again\n    )\n  }\n}\n\nexport class VDocType extends VNode {\n  // todo\n\n  name: any\n  publicId: any\n  systemId: any\n\n  get nodeName(): string {\n    return super.nodeName\n  }\n\n  get nodeValue(): string | null {\n    return super.nodeValue\n  }\n\n  get nodeType(): number {\n    return VDocType.DOCUMENT_TYPE_NODE\n  }\n\n  render() {\n    return '<!DOCTYPE html>' // hack!\n  }\n}\n\nexport class VDocumentFragment extends VNodeQuery {\n  docType?: VDocType\n\n  get nodeType() {\n    return VNode.DOCUMENT_FRAGMENT_NODE\n  }\n\n  get nodeName() {\n    return '#document-fragment'\n  }\n\n  render(h = htmlVDOM) {\n    return this._childNodes.map(c => c.render(h) || []).join('')\n  }\n\n  get innerHTML() {\n    // for debug\n    return this._childNodes.map(c => c.render(html)).join('')\n  }\n\n  createElement(name: string, attrs = {}) {\n    return new VElement(name, attrs)\n  }\n\n  createDocumentFragment() {\n    return new VDocumentFragment()\n  }\n\n  createTextNode(text?: string) {\n    return new VTextNode(text)\n  }\n}\n\nexport class VDocument extends VDocumentFragment {\n  get nodeType() {\n    return VNode.DOCUMENT_NODE\n  }\n\n  get nodeName() {\n    return '#document'\n  }\n\n  get documentElement() {\n    return this.firstChild\n  }\n\n  render(h = htmlVDOM) {\n    let content = super.render(h)\n    if (this.docType)\n      content = this.docType.render() + content\n    return content\n  }\n}\n\nexport class VHTMLDocument extends VDocument {\n  constructor(empty = false) {\n    super()\n    this.docType = new VDocType()\n    if (!empty) {\n      const html = new VElement('html')\n      const body = new VElement('body')\n      const head = new VElement('head')\n      const title = new VElement('title')\n      html.appendChild(head)\n      head.appendChild(title)\n      html.appendChild(body)\n      this.appendChild(html)\n    }\n  }\n\n  get body(): VElement {\n    let body = this.querySelector('body')\n    if (!body) {\n      let html = this.querySelector('html')\n      if (!html) {\n        html = new VElement('html')\n        this.appendChild(html)\n      }\n      body = new VElement('body')\n      html.appendChild(html)\n    }\n    return body\n  }\n\n  get title(): string {\n    return this.querySelector('title')?.textContent || ''\n  }\n\n  set title(title: string) {\n    const titleElement = this.querySelector('title')\n    if (titleElement)\n      titleElement.textContent = title\n  }\n\n  get head(): VElement {\n    let head = this.querySelector('head')\n    if (!head) {\n      let html = this.querySelector('html')\n      if (!html) {\n        html = new VElement('html')\n        this.appendChild(html)\n      }\n      head = new VElement('head')\n      html.insertBefore(html)\n    }\n    return head\n  }\n}\n\nexport function createDocument(): VDocument {\n  return new VDocument()\n}\n\nexport function createHTMLDocument(): VHTMLDocument {\n  return new VHTMLDocument()\n}\n\nexport const document = createDocument()\nexport const h = hFactory({ document })\n\nexport function isVElement(n: VNode): n is VElement {\n  return n.nodeType === VNode.ELEMENT_NODE\n}\n\nexport function isVTextElement(n: VNode): n is VTextNode {\n  return n.nodeType === VNode.TEXT_NODE\n}\n\nexport function isVDocument(n: VNode): n is VDocument {\n  return n.nodeType === VNode.DOCUMENT_NODE\n}\n","import type { VNodeQuery } from './vdom'\nimport { VDocumentFragment } from './vdom'\n\nexport function removeBodyContainer(body: VNodeQuery): VNodeQuery {\n  const ehead = body.querySelector('head')\n  const ebody = body.querySelector('body')\n  if (ebody || ehead) {\n    const body = new VDocumentFragment()\n    if (ehead) {\n      body.appendChild(ehead.childNodes)\n    }\n    if (ebody) {\n      body.appendChild(ebody.children)\n    }\n    return body\n  }\n  return body\n}\n\nconst object = {}\nconst hasOwnProperty = object.hasOwnProperty\n\n/** Fallback for Object.hasOwn */\nexport function hasOwn(object: any, propertyName: string) {\n  return hasOwnProperty.call(object, propertyName)\n}\n","// Special cases:\n// 1. <noop> is an element that is not printed out, can be used to create a list of elements\n// 2. Attribute name '__' gets transformed to ':' for namespace emulation\n// 3. Emulate CDATA by <cdata> element\n\nimport type { VDocumentFragment, VElement } from './vdom'\nimport { escapeHTML } from './encoding'\nimport { hArgumentParser } from './h'\nimport { hasOwn } from './utils'\n\nexport const SELF_CLOSING_TAGS = [\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'keygen',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n  'command',\n]\n\nexport const CDATA = (s: string) => `<![CDATA[${s}]]>`\nexport const HTML = (s: string) => s\n\n// export function prependXMLIdentifier(s) {\n//   return '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n' + s\n// }\n\n// https://reactjs.org/docs/jsx-in-depth.html\nexport function markup(\n  xmlMode: boolean,\n  tag: string,\n  attrs: any = {},\n  children?: any[] | string,\n) {\n  const hasChildren = !(\n    (typeof children === 'string' && children === '')\n    || (Array.isArray(children)\n      && (children.length === 0\n        || (children.length === 1 && children[0] === '')))\n      || children == null\n  )\n\n  const parts: string[] = []\n  tag = tag.replace(/__/g, ':')\n\n  // React fragment <>...</> and ours: <noop>...</noop>\n  if (tag !== 'noop' && tag !== '') {\n    if (tag !== 'cdata') {\n      parts.push(`<${tag}`)\n    }\n    else {\n      parts.push('<![CDATA[')\n    }\n\n    // Add attributes\n    for (let name in attrs) {\n      if (!name || !hasOwn(attrs, name))\n        continue\n      const v = attrs[name]\n      if (name === 'html')\n        continue\n      if (name.toLowerCase() === 'classname')\n        name = 'class'\n      name = name.replace(/__/g, ':')\n      if (v === true) {\n        parts.push(` ${name}`)\n      }\n      else if (name === 'style' && typeof v === 'object') {\n        const styleStr = Object.entries(v)\n          .filter(([, val]) => val != null)\n          .map(([k, val]) => {\n            const vv = typeof val === 'number' ? `${val}px` : val\n            return `${k.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}:${vv}`\n          })\n          .join(';')\n        if (styleStr)\n          parts.push(` ${name}=\"${styleStr}\"`)\n      }\n      else if (v !== false && v != null) {\n        parts.push(` ${name}=\"${escapeHTML(v.toString())}\"`)\n      }\n    }\n\n    const isSelfClosing = !xmlMode && SELF_CLOSING_TAGS.includes(tag)\n    if (tag !== 'cdata') {\n      if (xmlMode && !hasChildren) {\n        parts.push(' />')\n        return parts.join('')\n      }\n      else {\n        parts.push('>')\n      }\n    }\n    if (isSelfClosing)\n      return parts.join('')\n  }\n\n  // Append children\n  if (hasChildren) {\n    if (typeof children === 'string') {\n      parts.push(children)\n    }\n    else if (children && children.length > 0) {\n      for (const child of children) {\n        if (child == null || child === false)\n          continue\n        if (Array.isArray(child)) {\n          for (const c of child) {\n            if (c == null || c === false)\n              continue\n            if ((typeof c === 'string' && c.startsWith('<') && c.endsWith('>')) || tag === 'script' || tag === 'style') {\n              parts.push(c)\n            }\n            else {\n              parts.push(escapeHTML(c.toString()))\n            }\n          }\n        }\n        else {\n          if ((typeof child === 'string' && child.startsWith('<') && child.endsWith('>')) || tag === 'script' || tag === 'style') {\n            parts.push(child)\n          }\n          else {\n            parts.push(escapeHTML(child.toString()))\n          }\n        }\n      }\n    }\n  }\n\n  if (attrs.html)\n    parts.push(attrs.html)\n\n  if (tag !== 'noop' && tag !== '') {\n    if (tag !== 'cdata') {\n      parts.push(`</${tag}>`)\n    }\n    else {\n      parts.push(']]>')\n    }\n  }\n  return parts.join('')\n}\n\nexport function html(\n  tag: string | ((props: any) => VDocumentFragment | VElement),\n  attrs?: Record<string, unknown> | unknown[] | null,\n  ...children: unknown[]\n): string {\n  const parsed = hArgumentParser(tag, attrs, ...children)\n  return markup(false, parsed.tag as string, parsed.attrs, parsed.children)\n}\n\nexport const htmlVDOM = markup.bind(null, false)\n\nhtml.firstLine = '<!DOCTYPE html>'\nhtml.html = true\n\nexport const h = html\n","export interface HtmlParserScanner {\n  characters: (text: string) => void\n  comment: (text: string) => void\n  startElement: (tagName: string, attrs: Record<string, any>, isSelfColse: boolean, raw: string) => void\n  endElement: (tagName: string) => void\n}\n\n/**\n * This is a simple html parser. Will read and parse html string.\n *\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n */\nexport function createHtmlParser(scanner: HtmlParserScanner) {\n  const attrRe = /([^=\\s]+)(\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|[^>\\s]+))?/g\n  const endTagRe = /^<\\/([^>\\s]+)[^>]*>/m\n  const startTagRe = /^<([^>\\s/]+)((\\s+[^=>\\s]+(\\s*=\\s*((\"[^\"]*\")|('[^']*')|[^>\\s]+))?)*)\\s*(?:\\/\\s*)?>/m\n  const selfCloseTagRe = /\\s*\\/\\s*>\\s*$/m\n\n  function parse(html: string) {\n    let treatAsChars = false\n    let index, match, characters\n    let scriptEndRe: RegExp | null = null\n    let styleEndRe: RegExp | null = null\n\n    while (html.length) {\n      treatAsChars = true\n\n      if (html.startsWith('<!--')) {\n        index = html.indexOf('-->')\n        if (index !== -1) {\n          scanner.comment(html.substring(4, index))\n          html = html.slice(index + 3)\n          treatAsChars = false\n        }\n      }\n      else if (html.startsWith('</')) {\n        match = html.match(endTagRe)\n        if (match) {\n          html = html.slice(match[0].length)\n          treatAsChars = false\n          scanner.endElement(match[1])\n        }\n      }\n      else if (html[0] === '<') {\n        match = html.match(startTagRe)\n        if (match) {\n          html = html.slice(match[0].length)\n          treatAsChars = false\n          const tagName = parseStartTag(match[0], match[1], match)\n          if (tagName === 'script') {\n            if (!scriptEndRe)\n              scriptEndRe = /<\\/script/i\n            index = html.search(scriptEndRe)\n            if (index !== -1) {\n              scanner.characters(html.slice(0, index))\n              html = html.slice(index)\n              treatAsChars = false\n            }\n          }\n          else if (tagName === 'style') {\n            if (!styleEndRe)\n              styleEndRe = /<\\/style/i\n            index = html.search(styleEndRe)\n            if (index !== -1) {\n              scanner.characters(html.slice(0, index))\n              html = html.slice(index)\n              treatAsChars = false\n            }\n          }\n        }\n      }\n\n      if (treatAsChars) {\n        index = html.indexOf('<')\n\n        if (index === 0) {\n          index = html.indexOf('<', 1)\n          characters = html[0]\n          html = html.slice(1)\n        }\n        else if (index === -1) {\n          characters = html\n          html = ''\n        }\n        else {\n          characters = html.slice(0, index)\n          html = html.slice(index)\n        }\n\n        if (characters)\n          scanner.characters(characters)\n      }\n\n      match = null\n    }\n  }\n\n  function parseStartTag(input: string, tagName: string, match: any) {\n    const isSelfColse = selfCloseTagRe.test(input)\n    let attrInput = match[2]\n    if (isSelfColse)\n      attrInput = attrInput.replace(/\\s*\\/\\s*$/, '')\n    const attrs = parseAttributes(attrInput)\n    scanner.startElement(tagName, attrs, isSelfColse, match[0])\n    return tagName.toLocaleLowerCase()\n  }\n\n  function parseAttributes(input: string) {\n    const attrs: Record<string, any> = {}\n\n    if (!input || !input.trim())\n      return attrs\n\n    // If there are no quotes in the input, split by whitespace and parse attributes simply\n    if (!/[\"']/.test(input)) {\n      const parts = input.trim().split(/\\s+/)\n      for (const part of parts) {\n        const eqIndex = part.indexOf('=')\n        if (eqIndex === -1) {\n        // Attribute without value (boolean attribute)\n          attrs[part] = true\n        }\n        else {\n        // Attribute with value (unquoted)\n          attrs[part.slice(0, eqIndex)] = part.slice(eqIndex + 1)\n        }\n      }\n      return attrs\n    }\n\n    // Otherwise, use regex to extract attributes with quoted values\n    attrRe.lastIndex = 0\n    let match\n    // eslint-disable-next-line no-cond-assign\n    while ((match = attrRe.exec(input)) !== null) {\n      // Destructure the match to get attribute name and value (quoted or unquoted)\n      const [, name, , value, , valueInQuote, , valueInSingleQuote] = match\n      // Prefer single-quoted, then double-quoted, then unquoted, then true (boolean attribute)\n      attrs[name] = valueInSingleQuote ?? valueInQuote ?? value ?? true\n    }\n    return attrs\n  }\n\n  return parse\n}\n","/* eslint-disable node/prefer-global/buffer */\n\nimport { unescapeHTML } from './encoding'\nimport { SELF_CLOSING_TAGS } from './html'\nimport { createHtmlParser } from './htmlparser'\nimport { hasOwn } from './utils'\nimport { document, VDocType, VDocumentFragment, VElement, VHTMLDocument, VNode, VTextNode } from './vdom'\n\n// Makes sure we operate on VNodes\nexport function vdom(obj: VNode | Buffer | string | null = null): VNode {\n  if (obj instanceof VNode)\n    return obj\n  if (obj instanceof Buffer)\n    obj = obj.toString('utf-8')\n  if (typeof obj === 'string')\n    return parseHTML(obj)\n  return new VDocumentFragment()\n}\n\nexport function parseHTML(html: string): VDocumentFragment | VHTMLDocument {\n  if (typeof html !== 'string') {\n    console.error('parseHTML requires string, found', html)\n    throw new Error('parseHTML requires string')\n  }\n\n  const isDoc = html.startsWith('<!')\n  const frag = isDoc ? new VHTMLDocument(true) : new VDocumentFragment()\n  const stack: VNode[] = [frag]\n\n  const parse = createHtmlParser({\n    startElement(tagName: string, attrs: Record<string, string>, isSelfClosing: boolean) {\n      const lowerTagName = tagName.length === 1 ? tagName : tagName.toLowerCase()\n      if (lowerTagName === '!doctype') {\n        frag.docType = new VDocType()\n        return\n      }\n      for (const name in attrs) {\n        if (hasOwn(attrs, name) && typeof attrs[name] === 'string') {\n          attrs[name] = unescapeHTML(attrs[name])\n        }\n      }\n      const parentNode = stack[stack.length - 1]\n      if (parentNode) {\n        const element = document.createElement(tagName, attrs)\n        parentNode.appendChild(element)\n        if (!SELF_CLOSING_TAGS.includes(lowerTagName) && !isSelfClosing) {\n          stack.push(element)\n        }\n      }\n    },\n    endElement() {\n      stack.pop()\n    },\n    characters(text: string) {\n      text = unescapeHTML(text)\n      const parentNode = stack[stack.length - 1]\n      if (parentNode?.lastChild?.nodeType === VNode.TEXT_NODE) {\n        parentNode.lastChild._text += text\n      }\n      else if (parentNode) {\n        parentNode.appendChild(new VTextNode(text))\n      }\n    },\n    comment() {},\n  })\n  parse(html)\n  return frag\n}\n\n// Attach parser-dependent methods to VElement prototype\nVElement.prototype.setInnerHTML = function (html) {\n  const frag = parseHTML(html)\n  this._childNodes = frag._childNodes\n  this._fixChildNodesParent()\n}\n\nVElement.prototype.insertAdjacentHTML = function (\n  position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend',\n  text: string,\n) {\n  let nodes: VNode[] = []\n  try {\n    const frag = parseHTML(text)\n    nodes = frag._childNodes.filter((n: any) => n instanceof VNode)\n  }\n  catch (e) {\n    // Only fallback if text is not valid HTML\n    if (/^\\s*<\\/?[a-zA-Z]/.test(text)) {\n      throw new Error('HTML parsing failed in insertAdjacentHTML')\n    }\n    nodes = [new VTextNode(text)]\n  }\n  switch (position) {\n    case 'beforebegin':\n      if (this.parentNode) {\n        const idx = this._indexInParent()\n        if (idx >= 0) {\n          this.parentNode._childNodes.splice(idx, 0, ...nodes)\n          this.parentNode._fixChildNodesParent()\n        }\n      }\n      break\n    case 'afterbegin':\n      this._childNodes.unshift(...nodes)\n      this._fixChildNodesParent()\n      break\n    case 'beforeend':\n      this._childNodes.push(...nodes)\n      this._fixChildNodesParent()\n      break\n    case 'afterend':\n      if (this.parentNode) {\n        const idx = this._indexInParent()\n        if (idx >= 0) {\n          this.parentNode._childNodes.splice(idx + 1, 0, ...nodes)\n          this.parentNode._fixChildNodesParent()\n        }\n      }\n      break\n  }\n}\n","import type { VDocumentFragment, VHTMLDocument } from './vdom'\nimport { parseHTML } from './vdomparser'\n\nexport function handleHTML(html: string, handler: (document: VHTMLDocument | VDocumentFragment) => void) {\n  const document = parseHTML(html)\n  handler(document)\n  return document.render()\n}\n","import type { VElement } from './vdom'\nimport { isVElement, VNode } from './vdom'\n\ninterface SerializeContext {\n  level: number\n  count: 0\n  mode?: 'ol' | 'ul'\n  options?: SerializeMarkdownOptions\n}\n\nconst INLINE_STYLE_TAGS = new Set([\n  'b', 'strong', 'i', 'em', 'u', 'mark', 'tt', 'code',\n  'strike', 'del', 'ins', 'sub', 'sup', 'super',\n])\n\n// Build rules map only once for performance\nconst rules: Record<string, (node: VElement, handleChildren: (ctx?: Partial<SerializeContext>) => string, ctx?: SerializeContext) => string> = {\n  b: (node, h) => `**${h()}**`,\n  strong: (node, h) => `**${h()}**`,\n  i: (node, h) => `*${h()}*`,\n  em: (node, h) => `*${h()}*`,\n  u: (node, h) => `<u>${h()}</u>`,\n  mark: (node, h) => `==${h()}==`,\n  tt: (node, h) => `==${h()}==`,\n  code: (node, h) => `==${h()}==`,\n  strike: (node, h) => `~~${h()}~~`,\n  sub: (node, h) => `~${h()}~`,\n  super: (node, h) => `^${h()}^`,\n  sup: (node, h) => `^${h()}^`,\n  li: (node, h, ctx) => {\n    const indent = '  '.repeat(Math.max(0, (ctx?.level ?? 1) - 1))\n    const content = h().replace(/\\n+$/, '')\n    return `${indent}- ${content}\\n`\n  },\n  br: (node, h) => `\\n`,\n  ol: (node, h, ctx) => {\n    const level = (ctx?.level ?? 0) + 1\n    const inner = h({ level })\n    return level > 1 ? `\\n${inner}` : `\\n\\n${inner}\\n\\n`\n  },\n  ul: (node, h, ctx) => {\n    const level = (ctx?.level ?? 0) + 1\n    const inner = h({ level })\n    return level > 1 ? `\\n${inner}` : `\\n\\n${inner}\\n\\n`\n  },\n  blockquote: (node, h) => `\\n\\n> ${h()}\\n\\n`,\n  pre: (node, h) => `\\n\\n\\`\\`\\`\\n${h()}\\n\\`\\`\\`\\n\\n`,\n  p: (node, h) => `\\n\\n${h()}\\n\\n`,\n  div: (node, h) => `\\n\\n${h()}\\n\\n`,\n  h1: (node, h) => `\\n\\n# ${h()}\\n\\n`,\n  h2: (node, h) => `\\n\\n## ${h()}\\n\\n`,\n  h3: (node, h) => `\\n\\n### ${h()}\\n\\n`,\n  h4: (node, h) => `\\n\\n#### ${h()}\\n\\n`,\n  h5: (node, h) => `\\n\\n##### ${h()}\\n\\n`,\n  h6: (node, h) => `\\n\\n###### ${h()}\\n\\n`,\n  hr: () => `\\n\\n---\\n\\n`,\n  a: (node, h, ctx) => {\n    const href = node.getAttribute('href') ?? '#'\n    const text = h()\n    if (ctx?.options?.linkStyle === 'autolink') {\n      const trimmed = text.trim()\n      if (!trimmed || trimmed === href)\n        return `<${href}>`\n      return `${text} <${href}>`\n    }\n    return `[${text}](${href})`\n  },\n  img: (node, _h, ctx) => {\n    const src = node.getAttribute('src') ?? ''\n    const alt = node.getAttribute('alt') ?? ''\n    if (ctx?.options?.linkStyle === 'autolink') {\n      if (!alt || alt === src)\n        return `<${src}>`\n      return `${alt} <${src}>`\n    }\n    return `![${alt}](${src})`\n  },\n  del: (node, h) => `~~${h()}~~`,\n  ins: (node, h) => `++${h()}++`,\n  span: (node, h) => h(),\n  table: (node, h) => `\\n\\n${h()}\\n\\n`,\n  tr: (node, h) => `|${h()}|\\n`,\n  th: (node, h) => ` ${h()} |`,\n  td: (node, h) => ` ${h()} |`,\n  caption: (node, h) => `\\n${h()}\\n`,\n}\n\nfunction serialize(node: VNode | VElement, context: SerializeContext = {\n  level: 0,\n  count: 0,\n}): string {\n  if (node.nodeType === VNode.DOCUMENT_FRAGMENT_NODE) {\n    return (node.childNodes || []).map(c => serialize(c, { ...context })).join('')\n  }\n  else if (isVElement(node)) {\n    const tag: string = node.tagName.toLowerCase()\n    const handleChildren = (ctx?: Partial<SerializeContext>): string => (node.childNodes || []).map(c => serialize(c, { ...context, ...ctx })).join('')\n    if (context.options?.inlineStyles === false && INLINE_STYLE_TAGS.has(tag))\n      return handleChildren()\n    const fn = rules[tag]\n    if (fn)\n      return fn(node as VElement, handleChildren, context)\n    else\n      return handleChildren()\n  }\n  return node.textContent ?? ''\n}\n\nexport interface SerializeMarkdownOptions {\n  /** Wrap column for soft-wrapping long lines. `0` or omitted disables wrapping. */\n  wrap?: number\n  /**\n   * How `<a href=\"…\">…</a>` and `<img src=\"…\" alt=\"…\">` are rendered.\n   * - `'inline'` (default): `[text](url)` / `![alt](src)` — standard inline syntax\n   * - `'autolink'`: `text <url>` / `alt <src>` — label followed by an autolink\n   *   (or just `<url>` / `<src>` if the label is empty or equals the URL)\n   */\n  linkStyle?: 'inline' | 'autolink'\n  /**\n   * When `false`, inline text-styling tags (`b`, `strong`, `i`, `em`, `u`, `mark`,\n   * `tt`, `code`, `strike`, `del`, `ins`, `sub`, `sup`) are unwrapped and rendered\n   * as plain text. Default `true` (styles preserved).\n   */\n  inlineStyles?: boolean\n}\n\nexport function serializeMarkdown(node: VNode, options: SerializeMarkdownOptions = {}): string {\n  const out = `${serialize(node, { level: 0, count: 0, options }).replace(/\\n{2,}/g, '\\n\\n').trim()}\\n`\n  return options.wrap && options.wrap > 0 ? wrapMarkdown(out, options.wrap) : out\n}\n\nfunction wrapMarkdown(text: string, width: number): string {\n  const lines = text.split('\\n')\n  const result: string[] = []\n  let inFence = false\n  for (const line of lines) {\n    if (/^\\s*```/.test(line)) {\n      inFence = !inFence\n      result.push(line)\n      continue\n    }\n    if (inFence || line.length <= width || /^\\s*\\|/.test(line)) {\n      result.push(line)\n      continue\n    }\n    const m = line.match(/^(\\s*)((?:[-*+]\\s+|\\d+\\.\\s+|>\\s+)?)/)\n    const indent = m?.[1] ?? ''\n    const marker = m?.[2] ?? ''\n    const contIndent = indent + ' '.repeat(marker.length)\n    const head = indent + marker\n    const body = line.slice(head.length)\n    const words = body.split(/\\s+/).filter(Boolean)\n    if (words.length === 0) {\n      result.push(line)\n      continue\n    }\n    let current = head + words.shift()\n    for (const word of words) {\n      if (current.length + 1 + word.length > width) {\n        result.push(current)\n        current = contIndent + word\n      }\n      else {\n        current += ` ${word}`\n      }\n    }\n    result.push(current)\n  }\n  return result.join('\\n')\n}\n","import type { VDocument } from './vdom'\nimport { VNode, VTextNode } from './vdom'\n\nexport const SELECTOR_BLOCK_ELEMENTS = 'meta,link,script,p,h1,h2,h3,h4,h5,h6,blockquote,div,ul,ol,li,article,section,footer,head,body,title,nav,hr,form'\nexport const TAGS_KEEP_CONTENT = ['PRE', 'CODE', 'SCRIPT', 'STYLE', 'TT']\n\nfunction level(element: VNode): string {\n  let indent = ''\n  while (element.parentNode) {\n    indent += '  '\n    element = element.parentNode\n  }\n  return indent.slice(2)\n}\n\nexport function tidyDOM(document: VDocument) {\n  document.handle(SELECTOR_BLOCK_ELEMENTS, (e) => {\n    // Ignore if inside PRE etc.\n    let ee = e\n    while (ee) {\n      if (TAGS_KEEP_CONTENT.includes(ee.tagName))\n        return\n      ee = ee.parentNode\n    }\n\n    const parent = e.parentNode\n    if (!parent)\n      return\n\n    const prev = e.previousSibling\n    if (!prev || prev.nodeType !== VNode.TEXT_NODE || !prev.nodeValue?.endsWith('\\n')) {\n      parent.insertBefore(new VTextNode('\\n'), e)\n    }\n    parent.insertBefore(new VTextNode(level(e)), e)\n\n    const next = e.nextSibling\n    if (!next || next.nodeType !== VNode.TEXT_NODE || !next.nodeValue?.startsWith('\\n')) {\n      if (next) {\n        parent.insertBefore(new VTextNode('\\n'), next)\n      }\n      else {\n        parent.appendChild(new VTextNode('\\n'))\n      }\n    }\n\n    if (e.childNodes.length) {\n      const first = e.firstChild\n      if (first.nodeType === VNode.TEXT_NODE) {\n        e.insertBefore(new VTextNode(`\\n${level(e)}  `), first)\n      }\n      e.appendChild(new VTextNode(`\\n${level(e)}`))\n    }\n  })\n}\n","import type { VElement } from './vdom'\nimport { SELECTOR_BLOCK_ELEMENTS } from './tidy'\nimport { isVElement, VNode } from './vdom'\n\ninterface SerializeContext {\n  level: number\n  count: 0\n  mode?: 'ol' | 'ul'\n}\n\nfunction serialize(node: VNode | VElement, context: SerializeContext = {\n  level: 0,\n  count: 0,\n}): string {\n  if (node.nodeType === VNode.DOCUMENT_FRAGMENT_NODE) {\n    return node.childNodes.map(c => serialize(c, { ...context })).join('')\n  }\n\n  else if (isVElement(node)) {\n    const tag: string = node.tagName.toLowerCase()\n\n    const handleChildren = (ctx?: Partial<SerializeContext>): string => node.childNodes.map(c => serialize(c, { ...context, ...ctx })).join('')\n\n    const rules: Record<string, () => string> = {\n      br: () => `${handleChildren()}\\n`,\n      title: () => '',\n      script: () => '',\n      style: () => '',\n    }\n\n    SELECTOR_BLOCK_ELEMENTS.split(',').forEach((tag) => {\n      rules[tag] = () => `\\n\\n${handleChildren().trim()}\\n\\n`\n    })\n\n    const fn = rules[tag]\n\n    if (fn)\n      return fn()\n    else\n      return handleChildren()\n  }\n  return node.textContent ?? ''\n}\n\nexport function serializePlaintext(node: VNode): string {\n  return `${serialize(node).replace(/\\n{2,}/g, '\\n\\n').trim()}\\n`\n}\n","import type { VElement } from './vdom'\nimport { escapeHTML } from './encoding'\nimport { isVElement, VNode } from './vdom'\nimport { parseHTML } from './vdomparser'\n\nexport const SELECTOR_BLOCK_ELEMENTS = 'p,h1,h2,h3,h4,h5,h6,blockquote,div,ul,ol,li,article,section,footer,nav,hr,form'\n\ninterface SerializeContext {\n  level: number\n  count: 0\n  mode?: 'ol' | 'ul'\n}\n\n// Build rules map only once for performance\nconst blockTags = SELECTOR_BLOCK_ELEMENTS.split(',')\nconst baseRules: Record<string, (node: VElement, handleChildren: (ctx?: Partial<SerializeContext>) => string) => string> = {\n  a: (node, handleChildren) => `<a href=\"${escapeHTML(node.getAttribute('href') ?? '')}\" rel=\"noopener noreferrer\" target=\"_blank\">${handleChildren()}</a>`,\n  img: node => `<img src=\"${escapeHTML(node.getAttribute('src') ?? '')}\" alt=\"${escapeHTML(node.getAttribute('alt') ?? '')}\">`,\n  br: () => `<br>`,\n  title: () => '',\n  script: () => '',\n  style: () => '',\n  head: () => '',\n}\nblockTags.forEach((tag) => {\n  baseRules[tag] = (node, handleChildren) => `<${tag}>${handleChildren().trim()}</${tag}>`\n})\n\nfunction serialize(node: VNode, context: SerializeContext = {\n  level: 0,\n  count: 0,\n}): string {\n  if (node.nodeType === VNode.DOCUMENT_FRAGMENT_NODE) {\n    return (node.childNodes || []).map(c => serialize(c, { ...context })).join('')\n  }\n  else if (isVElement(node)) {\n    const tag: string = node.tagName?.toLowerCase()\n    const handleChildren = (ctx?: Partial<SerializeContext>): string => (node.childNodes || []).map(c => serialize(c, { ...context, ...ctx })).join('')\n    const fn = baseRules[tag]\n    if (fn)\n      return fn(node, handleChildren)\n    return handleChildren()\n  }\n  return escapeHTML(node.textContent ?? '')\n}\n\nexport function serializeSafeHTML(node: VNode): string {\n  return serialize(node).trim()\n}\n\nexport function safeHTML(html: string) {\n  return serializeSafeHTML(parseHTML(html))\n}\n","import type { VDocumentFragment, VElement } from './vdom'\nimport { hArgumentParser } from './h'\nimport { markup } from './html'\nimport './jsx-runtime'\n\nexport function xml(\n  itag: string | ((props: any) => VElement | VDocumentFragment),\n  iattrs?: Record<string, unknown> | unknown[] | null,\n  ...ichildren: any[]\n) {\n  const { tag, attrs, children } = hArgumentParser(itag, iattrs, ...ichildren)\n  return markup(true, tag as string, attrs, children)\n}\n\n// export const xmlVDOM = markup.bind(null, true)\n\nxml.firstLine = '<?xml version=\"1.0\" encoding=\"utf-8\"?>'\nxml.xml = true\n\nexport const h = xml\n","import type { VHTMLDocument } from './vdom'\nimport { readFileSync, writeFileSync } from 'node:fs'\nimport { parseHTML } from './vdomparser'\n\n/** Manipulate HTMl file directly on disk. Only writes back if there were significant changes. */\nexport function handleHTMLFile(filePath: string, handler: (document: VHTMLDocument) => void, outPath?: string): string {\n  const html = readFileSync(filePath, 'utf-8')\n  const document = parseHTML(html)\n  const htmlIn = document.render()\n  handler(document as VHTMLDocument)\n  const htmlOut = document.render()\n  if (outPath || htmlOut !== htmlIn) {\n    writeFileSync(outPath ?? filePath, htmlOut, 'utf-8')\n    return htmlOut\n  }\n  return html\n}\n"],"mappings":"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","names":["html","decode","h","rules","matchRule","matchSimple","element","name","html","h","body","object","parse","html","html","parse","html","document","h","level","_h","document","serialize","rules","tag","SELECTOR_BLOCK_ELEMENTS","serialize","html","html","document"]}