UNPKG

contentful-rich-text-html-parser

Version:
52 lines 1.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseHtml = void 0; const parse5_1 = require("parse5"); const utils_js_1 = require("./utils.js"); const isChildNodeComment = (childNode) => { return childNode.nodeName === "#comment"; }; const isChildNodeTextNode = (childNode) => { return childNode.nodeName === "#text"; }; const isChildNodeTemplate = (childNode) => { return childNode.nodeName === "template"; }; const isChildNodeDocumentType = (childNode) => { return childNode.nodeName === "#documentType"; }; const isTextNodePureWhiteSpace = (textNode) => { return (0, utils_js_1.isWhiteSpace)(textNode.value); }; const mapChildNodeToHtmlNode = (childNode, options) => { if (isChildNodeComment(childNode) || isChildNodeDocumentType(childNode) || isChildNodeTemplate(childNode)) { return null; } if (isChildNodeTextNode(childNode)) { if (options.ignoreWhiteSpace && isTextNodePureWhiteSpace(childNode)) { return null; } return { type: "text", value: childNode.value, }; } return { type: "element", tagName: childNode.tagName, children: childNode.childNodes .map((c) => mapChildNodeToHtmlNode(c, options)) .filter(utils_js_1.isNotNull), attrs: Object.fromEntries(childNode.attrs.map((attr) => [attr.name, attr.value])), }; }; const parseHtml = (htmlString, options) => { const parsedHtml = (0, parse5_1.parseFragment)(htmlString); return parsedHtml.childNodes .map((node) => mapChildNodeToHtmlNode(node, options)) .filter(utils_js_1.isNotNull); }; exports.parseHtml = parseHtml; //# sourceMappingURL=parseHtml.js.map