'use strict'; var xmlParser = require('./xml-parser'); function escapeAttribute(value) { return value.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); } function escapeElement(value) { return value .replace(/&/g, "&") .replace(/"/g, """) .replace(/'/g, "'") .replace(//g, ">") .replace(/\r/g, " ") .replace(/\n/g, " ") .replace(/\u0085/g, "…") .replace(/\u2028/, "
"); } class XmlText { value; constructor(value) { this.value = value; } toString() { return escapeElement("" + this.value); } } class XmlNode { name; children; attributes = {}; static of(name, childText, withName) { const node = new XmlNode(name); if (childText !== undefined) { node.addChildNode(new XmlText(childText)); } if (withName !== undefined) { node.withName(withName); } return node; } constructor(name, children = []) { this.name = name; this.children = children; } withName(name) { this.name = name; return this; } addAttribute(name, value) { this.attributes[name] = value; return this; } addChildNode(child) { this.children.push(child); return this; } removeAttribute(name) { delete this.attributes[name]; return this; } n(name) { this.name = name; return this; } c(child) { this.children.push(child); return this; } a(name, value) { if (value != null) { this.attributes[name] = value; } return this; } cc(input, field, withName = field) { if (input[field] != null) { const node = XmlNode.of(field, input[field]).withName(withName); this.c(node); } } l(input, listName, memberName, valueProvider) { if (input[listName] != null) { const nodes = valueProvider(); nodes.map((node) => { node.withName(memberName); this.c(node); }); } } lc(input, listName, memberName, valueProvider) { if (input[listName] != null) { const nodes = valueProvider(); const containerNode = new XmlNode(memberName); nodes.map((node) => { containerNode.c(node); }); this.c(containerNode); } } toString() { const hasChildren = Boolean(this.children.length); let xmlText = `<${this.name}`; const attributes = this.attributes; for (const attributeName of Object.keys(attributes)) { const attribute = attributes[attributeName]; if (attribute != null) { xmlText += ` ${attributeName}="${escapeAttribute("" + attribute)}"`; } } return (xmlText += !hasChildren ? "/>" : `>${this.children.map((c) => c.toString()).join("")}`); } } Object.defineProperty(exports, "parseXML", { enumerable: true, get: function () { return xmlParser.parseXML; } }); exports.XmlNode = XmlNode; exports.XmlText = XmlText;