UNPKG

contentful-rich-text-html-parser

Version:
79 lines 4.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.htmlStringToDocument = void 0; const converters_js_1 = require("./converters.js"); const parseHtml_js_1 = require("./parseHtml.js"); const processConvertedNodesFromTopLevel_js_1 = require("./processConvertedNodesFromTopLevel.js"); const utils_js_1 = require("./utils.js"); const DEFAULT_TAG_CONVERTERS = { h1: converters_js_1.convertTagToBlock, h2: converters_js_1.convertTagToBlock, h3: converters_js_1.convertTagToBlock, h4: converters_js_1.convertTagToBlock, h5: converters_js_1.convertTagToBlock, h6: converters_js_1.convertTagToBlock, hr: converters_js_1.convertTagToBlock, li: converters_js_1.convertTagToBlock, ol: converters_js_1.convertTagToBlock, p: converters_js_1.convertTagToBlock, blockquote: converters_js_1.convertTagToBlock, table: converters_js_1.convertTagToBlock, td: converters_js_1.convertTagToBlock, th: converters_js_1.convertTagToBlock, tr: converters_js_1.convertTagToBlock, ul: converters_js_1.convertTagToBlock, b: converters_js_1.convertTagToMark, strong: converters_js_1.convertTagToMark, pre: converters_js_1.convertTagToMark, i: converters_js_1.convertTagToMark, em: converters_js_1.convertTagToMark, sub: converters_js_1.convertTagToMark, sup: converters_js_1.convertTagToMark, u: converters_js_1.convertTagToMark, a: converters_js_1.convertTagToHyperlink, }; const mapHtmlNodeToRichTextNode = (node, marks, options) => { var _a; const { convertText, convertTag, defaultTagConverter } = options; const mapChildren = (node, mark) => { const newMarks = mark ? (0, utils_js_1.getAsList)(mark) : []; const allMarks = newMarks.concat(marks); if (node.type === "element") { return node.children.flatMap((child) => mapHtmlNodeToRichTextNode(child, allMarks, options)); } return (0, utils_js_1.getAsList)(mapHtmlNodeToRichTextNode(node, allMarks, options)); }; const next = mapChildren; if (node.type === "text") { return convertText(node, marks); } const tagConverter = (_a = convertTag[node.tagName]) !== null && _a !== void 0 ? _a : defaultTagConverter; const convertedNode = tagConverter(node, next); return convertedNode; }; const htmlStringToDocument = (htmlString, options = {}) => { var _a, _b, _c, _d, _e, _f, _g, _h; const optionsWithDefaults = { convertTag: Object.assign(Object.assign({}, DEFAULT_TAG_CONVERTERS), options.convertTag), defaultTagConverter: (_a = options.defaultTagConverter) !== null && _a !== void 0 ? _a : converters_js_1.convertTagToChildren, convertText: (_b = options.convertText) !== null && _b !== void 0 ? _b : converters_js_1.convertTextNodeToText, parserOptions: { handleWhitespaceNodes: (_d = (_c = options === null || options === void 0 ? void 0 : options.parserOptions) === null || _c === void 0 ? void 0 : _c.handleWhitespaceNodes) !== null && _d !== void 0 ? _d : "preserve", }, postProcessing: { handleTopLevelInlines: (_f = (_e = options === null || options === void 0 ? void 0 : options.postProcessing) === null || _e === void 0 ? void 0 : _e.handleTopLevelInlines) !== null && _f !== void 0 ? _f : "preserve", handleTopLevelText: (_h = (_g = options === null || options === void 0 ? void 0 : options.postProcessing) === null || _g === void 0 ? void 0 : _g.handleTopLevelText) !== null && _h !== void 0 ? _h : "preserve", }, }; const parserOptions = { ignoreWhiteSpace: optionsWithDefaults.parserOptions.handleWhitespaceNodes == "remove", }; const parsedHtml = (0, parseHtml_js_1.parseHtml)(htmlString, parserOptions); const richTextNodes = parsedHtml.flatMap((node) => mapHtmlNodeToRichTextNode(node, [], optionsWithDefaults)); const processedRichTextNodes = richTextNodes .map((node) => (0, processConvertedNodesFromTopLevel_js_1.processConvertedNodesFromTopLevel)(node, optionsWithDefaults)) .filter(utils_js_1.isNotNull); return (0, utils_js_1.createDocumentNode)(processedRichTextNodes); }; exports.htmlStringToDocument = htmlStringToDocument; //# sourceMappingURL=htmlStringToDocument.js.map