All files / runtime-test/src serialize.ts

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

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 703x             3x   3x 3485x 3485x 3485x 3485x 3485x 1247x 3460x 2238x 2238x 3485x   3x 2367x 2367x 2367x 2367x 2367x 2367x 2082x 2082x 2082x 285x 2367x   1247x 1247x 1247x 1247x 1247x 1247x 1247x 170x 170x 62x 108x 53x 55x 1247x 1247x 1247x 1247x 1247x 1247x 1247x 1247x   1247x   2238x 2238x 2238x 2238x 2238x 2238x 2238x 2238x 2238x   2238x  
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)
  )
}