@anlix-io/genieacs-sim
Version:
TR-069 client simulator for GenieACS
32 lines (28 loc) • 973 B
JavaScript
;
function node(key, attrs = {}, value = "") {
if (Array.isArray(value)) value = value.join("");
let attrsStr = "";
for (const [k, v] of Object.entries(attrs)) attrsStr += ` ${k}="${v}"`;
if (!value) return `<${key}${attrsStr}/>`
return `<${key}${attrsStr}>${value}</${key}>`
}
function formatXML(xml, tab = '\t', nl = '\n') {
if (xml.indexOf('<') < 0) return xml;
let formatted = '';
let indent = '';
const nodes = xml.slice(1, -1).split(/>\s*</);
if (nodes[0][0] === '?') formatted += '<' + nodes.shift() + '>' + nl;
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i];
if (node[0] === '/') indent = indent.slice(tab.length); // decrease indent
formatted += indent + '<' + node + '>' + nl;
if (
node[0] !== '/' && node[node.length-1] !== '/' && node.indexOf('</') < 0
) {
indent += tab; // increase indent
}
}
return formatted;
};
exports.node = node;
exports.formatXML = formatXML;