import { TestElement, TestNode, NodeTypes, TestText } from './nodeOps' export function serialize( node: TestNode, indent: number = 0, depth: number = 0 ): string { if (node.type === NodeTypes.ELEMENT) { return serializeElement(node, indent, depth) } else { return serializeText(node, indent, depth) } } function serializeElement( node: TestElement, indent: number, depth: number ): string { const props = Object.keys(node.props) .map(key => { return `${key}=${JSON.stringify(node.props[key])}` }) .join(' ') const newLine = indent ? `\n` : `` const children = node.children.length ? newLine + node.children.map(c => serialize(c, indent, depth + 1)).join(newLine) + newLine : `` const padding = indent ? ` `.repeat(indent).repeat(depth) : `` return ( `${padding}<${node.tag}${props ? ` ${props}` : ``}>` + `${children}` + `${padding}` ) } function serializeText(node: TestText, indent: number, depth: number): string { const padding = indent ? ` `.repeat(indent).repeat(depth) : `` return padding + node.text }