"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.update = exports.getParse = void 0; var domutils_1 = require("domutils"); var domhandler_1 = require("domhandler"); /** * Get the parse function with options. * * @param parser - The parser function. * @returns The parse function with options. */ function getParse(parser) { /** * Parse a HTML string or a node. * * @param content - The HTML string or node. * @param options - The parser options. * @param isDocument - If `content` is a document. * @param context - The context node in the DOM tree. * @returns The parsed document node. */ return function parse(content, options, isDocument, context) { if (typeof Buffer !== 'undefined' && Buffer.isBuffer(content)) { content = content.toString(); } if (typeof content === 'string') { return parser(content, options, isDocument, context); } var doc = content; if (!Array.isArray(doc) && (0, domhandler_1.isDocument)(doc)) { // If `doc` is already a root, just return it return doc; } // Add conent to new root element var root = new domhandler_1.Document([]); // Update the DOM using the root update(doc, root); return root; }; } exports.getParse = getParse; /** * Update the dom structure, for one changed layer. * * @param newChilds - The new children. * @param parent - The new parent. * @returns The parent node. */ function update(newChilds, parent) { // Normalize var arr = Array.isArray(newChilds) ? newChilds : [newChilds]; // Update parent if (parent) { parent.children = arr; } else { parent = null; } // Update neighbors for (var i = 0; i < arr.length; i++) { var node = arr[i]; // Cleanly remove existing nodes from their previous structures. if (node.parent && node.parent.children !== arr) { (0, domutils_1.removeElement)(node); } if (parent) { node.prev = arr[i - 1] || null; node.next = arr[i + 1] || null; } else { node.prev = node.next = null; } node.parent = parent; } return parent; } exports.update = update; //# sourceMappingURL=parse.js.map