"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.XmlElement = void 0; const XmlNode_js_1 = require("./XmlNode.js"); /** * Element in an XML document. */ class XmlElement extends XmlNode_js_1.XmlNode { constructor(name, attributes = Object.create(null), children = []) { super(); this.name = name; this.attributes = attributes; this.children = children; } /** * Whether this element is empty (meaning it has no children). */ get isEmpty() { return this.children.length === 0; } get preserveWhitespace() { let node = this; // eslint-disable-line @typescript-eslint/no-this-alias while (node instanceof XmlElement) { if ('xml:space' in node.attributes) { return node.attributes['xml:space'] === 'preserve'; } node = node.parent; } return false; } /** * Text content of this element and all its descendants. */ get text() { return this.children .map(child => 'text' in child ? child.text : '') .join(''); } get type() { return XmlNode_js_1.XmlNode.TYPE_ELEMENT; } toJSON() { return Object.assign(XmlNode_js_1.XmlNode.prototype.toJSON.call(this), { name: this.name, attributes: this.attributes, children: this.children.map(child => child.toJSON()), }); } } exports.XmlElement = XmlElement; //# sourceMappingURL=XmlElement.js.map