| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 | "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);};var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {    if (k2 === undefined) k2 = k;    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });}) : (function(o, m, k, k2) {    if (k2 === undefined) k2 = k;    o[k2] = m[k];}));var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {    Object.defineProperty(o, "default", { enumerable: true, value: v });}) : function(o, v) {    o["default"] = v;});var __importStar = (this && this.__importStar) || function (mod) {    if (mod && mod.__esModule) return mod;    var result = {};    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);    __setModuleDefault(result, mod);    return result;};Object.defineProperty(exports, "__esModule", { value: true });/* * Module dependencies */var ElementType = __importStar(require("domelementtype"));var entities_1 = require("entities");/** * Mixed-case SVG and MathML tags & attributes * recognized by the HTML parser. * * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign */var foreignNames_1 = require("./foreignNames");var unencodedElements = new Set([    "style",    "script",    "xmp",    "iframe",    "noembed",    "noframes",    "plaintext",    "noscript",]);/** * Format attributes */function formatAttributes(attributes, opts) {    if (!attributes)        return;    return Object.keys(attributes)        .map(function (key) {        var _a, _b;        var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : "";        if (opts.xmlMode === "foreign") {            /* Fix up mixed-case attribute names */            key = (_b = foreignNames_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;        }        if (!opts.emptyAttrs && !opts.xmlMode && value === "") {            return key;        }        return key + "=\"" + (opts.decodeEntities !== false            ? entities_1.encodeXML(value)            : value.replace(/"/g, """)) + "\"";    })        .join(" ");}/** * Self-enclosing tags */var singleTag = new Set([    "area",    "base",    "basefont",    "br",    "col",    "command",    "embed",    "frame",    "hr",    "img",    "input",    "isindex",    "keygen",    "link",    "meta",    "param",    "source",    "track",    "wbr",]);/** * Renders a DOM node or an array of DOM nodes to a string. * * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). * * @param node Node to be rendered. * @param options Changes serialization behavior */function render(node, options) {    if (options === void 0) { options = {}; }    var nodes = "length" in node ? node : [node];    var output = "";    for (var i = 0; i < nodes.length; i++) {        output += renderNode(nodes[i], options);    }    return output;}exports.default = render;function renderNode(node, options) {    switch (node.type) {        case ElementType.Root:            return render(node.children, options);        case ElementType.Directive:        case ElementType.Doctype:            return renderDirective(node);        case ElementType.Comment:            return renderComment(node);        case ElementType.CDATA:            return renderCdata(node);        case ElementType.Script:        case ElementType.Style:        case ElementType.Tag:            return renderTag(node, options);        case ElementType.Text:            return renderText(node, options);    }}var foreignModeIntegrationPoints = new Set([    "mi",    "mo",    "mn",    "ms",    "mtext",    "annotation-xml",    "foreignObject",    "desc",    "title",]);var foreignElements = new Set(["svg", "math"]);function renderTag(elem, opts) {    var _a;    // Handle SVG / MathML in HTML    if (opts.xmlMode === "foreign") {        /* Fix up mixed-case element names */        elem.name = (_a = foreignNames_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;        /* Exit foreign mode at integration points */        if (elem.parent &&            foreignModeIntegrationPoints.has(elem.parent.name)) {            opts = __assign(__assign({}, opts), { xmlMode: false });        }    }    if (!opts.xmlMode && foreignElements.has(elem.name)) {        opts = __assign(__assign({}, opts), { xmlMode: "foreign" });    }    var tag = "<" + elem.name;    var attribs = formatAttributes(elem.attribs, opts);    if (attribs) {        tag += " " + attribs;    }    if (elem.children.length === 0 &&        (opts.xmlMode            ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags                opts.selfClosingTags !== false            : // User explicitly asked for self-closing tags, even in HTML mode                opts.selfClosingTags && singleTag.has(elem.name))) {        if (!opts.xmlMode)            tag += " ";        tag += "/>";    }    else {        tag += ">";        if (elem.children.length > 0) {            tag += render(elem.children, opts);        }        if (opts.xmlMode || !singleTag.has(elem.name)) {            tag += "</" + elem.name + ">";        }    }    return tag;}function renderDirective(elem) {    return "<" + elem.data + ">";}function renderText(elem, opts) {    var data = elem.data || "";    // If entities weren't decoded, no need to encode them back    if (opts.decodeEntities !== false &&        !(!opts.xmlMode &&            elem.parent &&            unencodedElements.has(elem.parent.name))) {        data = entities_1.encodeXML(data);    }    return data;}function renderCdata(elem) {    return "<![CDATA[" + elem.children[0].data + "]]>";}function renderComment(elem) {    return "<!--" + elem.data + "-->";}
 |