test('should ignore other nodes with no content', () => {
expect(parse(`<script/>`).descriptor.script).toBe(null)
+ expect(parse(`<script> \n\t </script>`).descriptor.script).toBe(null)
expect(parse(`<style/>`).descriptor.styles.length).toBe(0)
+ expect(parse(`<style> \n\t </style>`).descriptor.styles.length).toBe(0)
expect(parse(`<custom/>`).descriptor.customBlocks.length).toBe(0)
+ expect(
+ parse(`<custom> \n\t </custom>`).descriptor.customBlocks.length
+ ).toBe(0)
})
test('handle empty nodes with src attribute', () => {
if (node.type !== NodeTypes.ELEMENT) {
return
}
- if (!node.children.length && !hasSrc(node) && node.tag !== 'template') {
+ // we only want to keep the nodes that are not empty (when the tag is not a template)
+ if (node.tag !== 'template' && isEmpty(node) && !hasSrc(node)) {
return
}
switch (node.tag) {
return p.name === 'src'
})
}
+
+/**
+ * Returns true if the node has no children
+ * once the empty text nodes (trimmed content) have been filtered out.
+ */
+function isEmpty(node: ElementNode) {
+ return (
+ node.children.filter(
+ child => child.type !== NodeTypes.TEXT || child.content.trim() !== ''
+ ).length === 0
+ )
+}