UNPKG

contentful-rich-text-html-parser

Version:
95 lines 4.85 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.htmlStringToDocument = void 0; var converters_js_1 = require("./converters.js"); var parseHtml_js_1 = require("./parseHtml.js"); var processConvertedNodesFromTopLevel_js_1 = require("./processConvertedNodesFromTopLevel.js"); var utils_js_1 = require("./utils.js"); var 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, }; var mapHtmlNodeToRichTextNode = function (node, marks, options) { var _a; var convertText = options.convertText, convertTag = options.convertTag, defaultTagConverter = options.defaultTagConverter; var mapChildren = function (node, mark) { var newMarks = mark ? (0, utils_js_1.getAsList)(mark) : []; var allMarks = newMarks.concat(marks); if (node.type === "element") { return node.children.flatMap(function (child) { return mapHtmlNodeToRichTextNode(child, allMarks, options); }); } return (0, utils_js_1.getAsList)(mapHtmlNodeToRichTextNode(node, allMarks, options)); }; var next = mapChildren; if (node.type === "text") { return convertText(node, marks); } var tagConverter = (_a = convertTag[node.tagName]) !== null && _a !== void 0 ? _a : defaultTagConverter; var convertedNode = tagConverter(node, next); return convertedNode; }; var htmlStringToDocument = function (htmlString, options) { var _a, _b, _c, _d, _e, _f, _g, _h; if (options === void 0) { options = {}; } var optionsWithDefaults = { convertTag: __assign(__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", }, }; var parserOptions = { ignoreWhiteSpace: optionsWithDefaults.parserOptions.handleWhitespaceNodes == "remove", }; var parsedHtml = (0, parseHtml_js_1.parseHtml)(htmlString, parserOptions); var richTextNodes = parsedHtml.flatMap(function (node) { return mapHtmlNodeToRichTextNode(node, [], optionsWithDefaults); }); var processedRichTextNodes = richTextNodes .map(function (node) { return (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