All files / runtime-test/src serialize.ts

100% Statements 56/56
100% Branches 26/26
100% Functions 4/4
100% Lines 56/56

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 702x                 2x 3303x 3303x 3303x 3303x 3303x 1196x 3278x 2107x 2107x 3303x   2x 2290x 2290x 2290x 2290x 2290x 2290x 2005x 2005x 2005x 285x 2290x   1196x 1196x 1196x 1196x 1196x 1196x 1196x 166x 166x 58x 108x 53x 55x 1196x 1196x 1196x 1196x 1196x 1196x 1196x 1196x   1196x   2107x 2107x 2107x 2107x 2107x 2107x 2107x 2107x 2107x   2107x  
import {
  type TestComment,
  type TestElement,
  type TestNode,
  TestNodeTypes,
  type TestText,
} from './nodeOps'
import { isOn } from '@vue/shared'
 
export function serialize(
  node: TestNode,
  indent: number = 0,
  depth: number = 0,
): string {
  if (node.type === TestNodeTypes.ELEMENT) {
    return serializeElement(node, indent, depth)
  } else {
    return serializeText(node, indent, depth)
  }
}
 
export function serializeInner(
  node: TestElement,
  indent: number = 0,
  depth: number = 0,
): string {
  const newLine = indent ? `\n` : ``
  return node.children.length
    ? newLine +
        node.children.map(c => serialize(c, indent, depth + 1)).join(newLine) +
        newLine
    : ``
}
 
function serializeElement(
  node: TestElement,
  indent: number,
  depth: number,
): string {
  const props = Object.keys(node.props)
    .map(key => {
      const value = node.props[key]
      return isOn(key) || value == null
        ? ``
        : value === ``
          ? key
          : `${key}=${JSON.stringify(value)}`
    })
    .filter(Boolean)
    .join(' ')
  const padding = indent ? ` `.repeat(indent).repeat(depth) : ``
  return (
    `${padding}<${node.tag}${props ? ` ${props}` : ``}>` +
    `${serializeInner(node, indent, depth)}` +
    `${padding}</${node.tag}>`
  )
}
 
function serializeText(
  node: TestText | TestComment,
  indent: number,
  depth: number,
): string {
  const padding = indent ? ` `.repeat(indent).repeat(depth) : ``
  return (
    padding +
    (node.type === TestNodeTypes.COMMENT ? `<!--${node.text}-->` : node.text)
  )
}