contentful-rich-text-html-parser
Version:
Convert any HTML to the Contentful Rich Text format
95 lines • 4.85 kB
JavaScript
;
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