From 14d39dfbfa4cb253d0d8bcf1b1ff0857d9c268c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20MANCA?= Date: Tue, 2 May 2023 17:01:59 +0200 Subject: [PATCH] fix(createRichTextObjectResolver): text node value A text node serialized with parse5 has no child so no value is returned. With these changes, we check the type and avoid the serialization. FIXES #4 --- lib/parser/implementation/shared.ts | 4 ++-- test/node/sync/node-rich-text-object-resolver.spec.js | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/parser/implementation/shared.ts b/lib/parser/implementation/shared.ts index 00cdb6f..327e4ef 100644 --- a/lib/parser/implementation/shared.ts +++ b/lib/parser/implementation/shared.ts @@ -8,7 +8,7 @@ import { IParserElementAttribute } from '@kontent-ai/delivery-sdk'; import { parseFragment, serialize } from 'parse5'; -import { Element, DocumentFragment, ChildNode, ParentNode } from 'parse5/dist/cjs/tree-adapters/default'; +import { Element, DocumentFragment, ChildNode, ParentNode, TextNode } from 'parse5/dist/cjs/tree-adapters/default'; import * as striptags from 'striptags'; export function getChildNodes(documentFragment: DocumentFragment): ChildNode[] { @@ -157,7 +157,7 @@ export function convertToParserElement(node: ParentNode): IParserElement { } }, html: serialize(node), - text: striptags(serialize(node)), + text: tagName === '#text' ? (node as unknown as TextNode).value : striptags(serialize(node)), attributes: attributes, parentElement: (node as Element).parentNode ? convertToParserElement((node as Element).parentNode as ParentNode) diff --git a/test/node/sync/node-rich-text-object-resolver.spec.js b/test/node/sync/node-rich-text-object-resolver.spec.js index 2d499e8..75d2224 100644 --- a/test/node/sync/node-rich-text-object-resolver.spec.js +++ b/test/node/sync/node-rich-text-object-resolver.spec.js @@ -24,4 +24,11 @@ describe('Node rich text object resolver', () => { it(`Expect correct number of root children nodes`, () => { assert.ok(resolvedData.data.children.length === expectedRootChildrenNodes); }); + + it(`Expect text nodes should be extracted`, () => { + const textChildren = Object.values(resolvedData.data.children).filter(({ tag }) => tag === '#text'); + const filledTextChildren = textChildren.filter(({ data: { text } }) => !!text); + + assert.ok(textChildren.length === filledTextChildren.length); + }); });